我正在尝试从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。
有没有计算方法,或任何现有的库来获取尺寸?
答案 0 :(得分:1)
并手动接听
minX
,minY
,maxX
,maxY
。
使用元素的边界范围不正确。如果LINE不是垂直或水平的,则尤其如此。只要它处于旋转,您的逻辑就会失败。
是否有任何计算方法或任何现有的库来获取尺寸?
我无法对您正在使用的软件库做出具体评论。他们可能只读取DXF文件并且不提供其他功能。
您似乎正在使用2D数据。在你的问题是显示:
对于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,我找到了一个相关的StackOverflow question,它提供了计算弧长的公式:
Arc Length = Radius * (Angle In Radian)
评论中有一个辅助link,其中包含更多信息。
所以你现在应该能够准确地计算出你的长度。