DXF中的顶点
我想从已经创建的中获取顶点。dxf文件。 是否要分析与关联的文本。dxf文件而不在AutoCAD中打开该文件? 我想将其存储在数组中,以便修改。 今天剩下的时间我都不在办公室附近,所以要到今晚晚些时候才能提供任何编码建议。不过,我会问几个问题来帮助澄清你的情况。文件是否在AutoCAD中打开?您将使用什么程序语言?所有的多段线是否都与世界坐标系共面,或者在空间中是否存在一些任意方向,或者,更好的是,您是否可以发布一个示例文件来演示数据? 为此,我正在使用Autocad VBA和Autocad2007。假设我在空间中有一个共面闭合多边形(例如三角形)的文件,那么我应该能够将顶点数据(x,y,z坐标)存储在一个数组中。 Coordinates属性(AcadLWPolyline.Coordinates)返回一维数组。如果需要一个二维数组(逻辑要求),那么这样的东西可能会达到目的。
编辑:代码已删除。参见第#8页中的修改代码 非常感谢。它起作用了。你是怎么做到的?有没有找到解决方案的一般方法?
再次感谢 使用ActiveX和VBA参考需要一些时间才能习惯AutoCAD文件的数据结构。帮助文档非常好。
For/Next循环必须根据实体的底层数据结构进行设置。
为了完整性;这里有一个更通用的例程,它将在任何方向或高程分析LWPOLY。
Sub StoreCoordsInArray3d()
Dim entPline As AcadLWPolyline
Dim varPt As Variant
Dim ent As AcadEntity
Dim coords As Variant
Dim dblPtArray() As Double
Dim intBound As Integer
Dim i As Integer
Dim strMsg As String
Dim varNormal As Variant
Dim dblElev As Double
Dim dblPt(2) As Double
Dim varTrans As Variant
With ThisDrawing
On Error Resume Next
.Utility.GetEntity ent, varPt, "Select a Poly:"
If Err <> 0 Then Exit Sub
On Error GoTo 0
If TypeOf ent Is AcadLWPolyline Then
Set entPline = ent
dblElev = entPline.Elevation
varNormal = entPline.Normal
coords = entPline.Coordinates
intBound = ((UBound(coords) + 1) / 2) - 1
ReDim dblPtArray(intBound, 2)
For i = 0 To intBound
dblPt(0) = coords(2 * i)
dblPt(1) = coords((2 * i) + 1)
dblPt(2) = dblElev
varTrans = .Utility.TranslateCoordinates(dblPt, acOCS, acWorld, 0, varNormal)
dblPtArray(i, 0) = varTrans(0)
dblPtArray(i, 1) = varTrans(1)
dblPtArray(i, 2) = varTrans(2)
strMsg = strMsg & CStr(dblPtArray(i, 0)) & ", "
strMsg = strMsg & CStr(dblPtArray(i, 1)) & ", "
strMsg = strMsg & CStr(dblPtArray(i, 2)) & vbCr
Next
MsgBox strMsg
End If
End With
End Sub
页:
[1]