python 如何在 DXF 中查找形状的尺寸?
How to find dimensions of a shape in DXF in python?
我正在尝试从 dxf 文件中获取形状的尺寸。我尝试查看 dxfgrabber 和 ezdxf 库,我采用 最低点和最高点 来获取尺寸,但结果是错误的。
使用 dxfgrabber:
import dxfgrabber
import numpy as np
import sys
dxf = dxfgrabber.readfile(sys.argv[1])
shapes = dxf.entities.get_entities()
minX, maxX, minY, maxY = 999999,0,999999,0
for shape in shapes:
print('dxftype', shape.dxftype)
if shape.dxftype == 'LINE':
x, y = shape.start[0], shape.start[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
x, y = shape.end[0], shape.end[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
if shape.dxftype == 'ARC':
x, y = shape.center[0], shape.center[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
print('minX', minX, 'minY', minY)
print('maxX', maxX, 'maxY', maxY)
print('x1', 0, 'y1', 0)
print('x2', maxX-minX, 'y2', maxY-minY)
使用 ezdxf:
modelspace = dwg.modelspace()
for e in modelspace:
if e.dxftype() == 'LINE':
print("start point: ", e.dxf.start)
print("end point: ", e.dxf.end)
if e.dxftype() == 'ARC':
print("ARC on layer: ", e.dxf.layer)
print("center point ", e.dxf.center)
并手动取了minX minY maxX maxY。
是否有任何计算方法或任何现有库来获取尺寸?
And manually took the minX
, minY
, maxX
, maxY
.
使用元素的边界范围是不正确的。如果 LINE 不是垂直或水平的,则尤其如此。一旦它处于旋转,你的逻辑就会失败。
Is there any way of calculating, or any existing libraries to get the dimensions ?
我无法具体评论您使用的软件库。他们可能只读取 DXF 文件,不提供其他功能。
看来您正在处理二维数据。在你的问题中显示:
- 线
- 圆弧
对于 LINE
元素,这里是一个示例(在 Visual Basic for Applications 中):
Public Function Get2DLength(aryPoint1 As Variant, _
aryPoint2 As Variant) As Double
Dim dDeltaX As Double
Dim dDeltaY As Double
dDeltaX = aryPoint2(0) - aryPoint1(0)
dDeltaY = aryPoint2(1) - aryPoint1(1)
Get2DLength = Sqr((dDeltaX * dDeltaX) + (dDeltaY * dDeltaY))
End Function
如果您使用的是 3D 数据,则通过引入 dDeltaZ
.
来扩展该方法
您应该能够将其移植到您的环境中。恐怕无法对 ARC
个元素发表评论。
我很快 Google 找到了一个相关的 Whosebug question,它提供了计算弧长的公式:
Arc Length = Radius * (Angle In Radian)
评论中有二级link,提供更多信息。
所以你现在应该可以准确计算出你的长度了。
我正在尝试从 dxf 文件中获取形状的尺寸。我尝试查看 dxfgrabber 和 ezdxf 库,我采用 最低点和最高点 来获取尺寸,但结果是错误的。 使用 dxfgrabber:
import dxfgrabber
import numpy as np
import sys
dxf = dxfgrabber.readfile(sys.argv[1])
shapes = dxf.entities.get_entities()
minX, maxX, minY, maxY = 999999,0,999999,0
for shape in shapes:
print('dxftype', shape.dxftype)
if shape.dxftype == 'LINE':
x, y = shape.start[0], shape.start[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
x, y = shape.end[0], shape.end[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
if shape.dxftype == 'ARC':
x, y = shape.center[0], shape.center[1]
if x < minX:
minX = x
if y < minY:
minY = y
if x >= maxX:
maxX = x
if y >= maxY:
maxY = y
print('minX', minX, 'minY', minY)
print('maxX', maxX, 'maxY', maxY)
print('x1', 0, 'y1', 0)
print('x2', maxX-minX, 'y2', maxY-minY)
使用 ezdxf:
modelspace = dwg.modelspace()
for e in modelspace:
if e.dxftype() == 'LINE':
print("start point: ", e.dxf.start)
print("end point: ", e.dxf.end)
if e.dxftype() == 'ARC':
print("ARC on layer: ", e.dxf.layer)
print("center point ", e.dxf.center)
并手动取了minX minY maxX maxY。
是否有任何计算方法或任何现有库来获取尺寸?
And manually took the
minX
,minY
,maxX
,maxY
.
使用元素的边界范围是不正确的。如果 LINE 不是垂直或水平的,则尤其如此。一旦它处于旋转,你的逻辑就会失败。
Is there any way of calculating, or any existing libraries to get the dimensions ?
我无法具体评论您使用的软件库。他们可能只读取 DXF 文件,不提供其他功能。
看来您正在处理二维数据。在你的问题中显示:
- 线
- 圆弧
对于 LINE
元素,这里是一个示例(在 Visual Basic for Applications 中):
Public Function Get2DLength(aryPoint1 As Variant, _
aryPoint2 As Variant) As Double
Dim dDeltaX As Double
Dim dDeltaY As Double
dDeltaX = aryPoint2(0) - aryPoint1(0)
dDeltaY = aryPoint2(1) - aryPoint1(1)
Get2DLength = Sqr((dDeltaX * dDeltaX) + (dDeltaY * dDeltaY))
End Function
如果您使用的是 3D 数据,则通过引入 dDeltaZ
.
您应该能够将其移植到您的环境中。恐怕无法对 ARC
个元素发表评论。
我很快 Google 找到了一个相关的 Whosebug question,它提供了计算弧长的公式:
Arc Length = Radius * (Angle In Radian)
评论中有二级link,提供更多信息。
所以你现在应该可以准确计算出你的长度了。