Dill 发表于 2022-7-6 22:56:47

从中获取AcadPolyline

我想分解blockrefs,以便更仔细地查看其中的对象。
我首先尝试的是检索blockref中多段线的坐标。
 
但是,当我将多段线引用设置为分解数组的对象时,会出现“类型不匹配”错误。(尽管它的ObjectName==AcDbPolyline)。
 

If varEx(i).ObjectName = "AcDbPolyline" Then
Set pl = varEx(i) 'ERROR: Type mismatch
'(...)
End If

 
我需要一个AcadPolyline对象来访问“坐标”属性。
这是怎么做到的?
我不习惯VB,但我发现它的对象模型相当混乱。。。
 
以下是完整代码:
 
 

Public Sub Test()
   Dim bref As AcadBlockReference
   Dim ent As AcadEntity
   Dim exp As Variant
   Dim pl As AcadPolyline
   
   For Each ent In ThisDrawing.ModelSpace
      
       If ent.ObjectName = "AcDbBlockReference" Then
      
         Set bref = ent
         Debug.Print "exploding", bref.Name
         Dim i As Double
   
         varEx = bref.Explode
         
         For i = 0 To UBound(varEx)
               Debug.Print varEx(i).ObjectName
               If varEx(i).ObjectName = "AcDbPolyline" Then
                   Set pl = varEx(i) 'ERROR: Type mismatch
                   '(...)
               End If
         Next
      
       End If
   Next
End Sub
 
非常感谢。

10west 发表于 2022-7-6 23:32:25



SSET2.SelectOnScreen
For Each ent In SSET2
If (TypeOf ent Is AutoCAD.AcadLWPolyline) Then
       Set lwpl = ent
       vtxs = lwpl.Coordinates
         For idx = LBound(vtxs) To UBound(vtxs) Step 2
               List1(0).AddItem vtxs(idx)
               List1(1).AddItem vtxs(idx + 1)
         Next idx
   End If
Next ent



 
可能尝试设置为对象,然后将obj设置为varEx返回

Dill 发表于 2022-7-6 23:38:13

我是否理解你的意思
 
Dim o As AcadObject
(...)
Set o = varEx(i)
Set pl = o
 
同样的错误。
试一试会有帮助吗。net还是使用相同的库?
 
谢谢你的帮助。
 
编辑:
python做到了这一点。
这里有一个例子。dwg只包含由3个顶点多段线组成的bref。
不适用于较旧的acad版本,此处在acad 11上测试。

>>> import win32com.client
>>> acad = win32com.client.Dispatch("AutoCAD.Application")
>>> doc = acad.ActiveDocument
>>> ms = doc.ModelSpace
>>>
>>> for item in ms:
...   print item.ObjectName
...
AcDbBlockReference
>>> bref = ms
>>> exp = bref.Explode()
>>> exp
(<COMObject Explode>,)
>>> e=exp
>>> e.ObjectName
u'AcDbPolyline'
>>> e.Coordinates
(1000.0, 500.0, 1000.0, 600.0, 1100.0, 600.0, 1100.0, 500.0, 1000.0, 500.0)

10west 发表于 2022-7-7 00:13:00

如果仍然包含LWpoly,请确保尝试所有可能的多段线。
页: [1]
查看完整版本: 从中获取AcadPolyline