puvijain 发表于 2022-7-6 11:40:34

DXF中的顶点

我想从已经创建的中获取顶点。dxf文件。

SEANT 发表于 2022-7-6 11:52:20

是否要分析与关联的文本。dxf文件而不在AutoCAD中打开该文件?

puvijain 发表于 2022-7-6 12:00:26

我想将其存储在数组中,以便修改。

SEANT 发表于 2022-7-6 12:13:43

今天剩下的时间我都不在办公室附近,所以要到今晚晚些时候才能提供任何编码建议。不过,我会问几个问题来帮助澄清你的情况。
 
文件是否在AutoCAD中打开?您将使用什么程序语言?所有的多段线是否都与世界坐标系共面,或者在空间中是否存在一些任意方向,或者,更好的是,您是否可以发布一个示例文件来演示数据?

puvijain 发表于 2022-7-6 12:23:22

为此,我正在使用Autocad VBA和Autocad2007。假设我在空间中有一个共面闭合多边形(例如三角形)的文件,那么我应该能够将顶点数据(x,y,z坐标)存储在一个数组中。

SEANT 发表于 2022-7-6 12:26:39

Coordinates属性(AcadLWPolyline.Coordinates)返回一维数组。如果需要一个二维数组(逻辑要求),那么这样的东西可能会达到目的。
 
编辑:代码已删除。参见第#8页中的修改代码

puvijain 发表于 2022-7-6 12:34:57

非常感谢。它起作用了。你是怎么做到的?有没有找到解决方案的一般方法?
再次感谢

SEANT 发表于 2022-7-6 12:47:58

使用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]
查看完整版本: DXF中的顶点