你好,Robert98,你克服这个问题了吗
否则,请告诉我您';我们还在挣扎
然而,乍一看我';注意下面的内容:
-;d投诉不#039的用户;t选择myEnt作为LWPolyline(“MsgBox”未选择多段线!?“vbCritical”)但是,如果他选择myEnt作为LWPolyline,那么例程就不会&35;039;从那以后我什么都不做;如果是Ent。实体类型<&燃气轮机;迈恩。实体类型“;“内部控制”;对于SSet中的每个Ent“;循环将始终返回“;“假”;(SSet.Select标准将仅收集“LWPolyline”类型元素),并且永远不会填充MyCords向量
这样,您的例程只处理属于具有相同颜色和a层的轻量级多段线的坐标;非轻型多段线“;实体:这就是你';你的目标是什么
说明书;MyCords(i)=耳鼻喉科。坐标“;不会';t工作,因为;坐标“;属性返回一个变体。此外,它会返回多个值(“对象中每个顶点的坐标”)不能只放在一个向量位置,例如;MyCords(i)”;。最后你没有';t使用任何ReDim指令来生成;MyCords“;向量可以用新的坐标填充,因此您应该首先声明一个变量来收集实体坐标,并最终通过循环将其倒入myCoords向量中。所有这些始终跟踪向量维度(即:适当地重新命名它们)。例如:
- Option Explicit
- Private Sub CommandButton4_Click()
- Me.Hide
- Dim myEnt As AcadEntity
- Dim Pot(0 To 2) As Double
- Dim myLay As Variant
- Dim myCol As Variant
- ThisDrawing.Utility.GetEntity myEnt, Pot, "Select yout lwpolyline"
- If TypeOf myEnt Is AcadLWPolyline Then
- myLay = myEnt.Layer
- myCol = myEnt.color
- Else
- MsgBox "Not selected a polyline !?", vbCritical
- End If
- Dim SSet As AcadSelectionSet
- Dim FilterType(0 To 2) As Integer
- Dim FilterData(0 To 2) As Variant
- Dim Groupcode As Variant
- Dim DataValue As Variant
- Dim myCoords() As Double
- FilterType(0) = 0
- FilterData(0) = "LWPolyline"
- FilterType(1) = 8
- FilterData(1) = myEnt.Layer
- FilterType(2) = 62
- FilterData(2) = myEnt.color
- Groupcode = FilterType
- DataValue = FilterData
- On Error Resume Next
- ActiveDocument.SelectionSets.Item("MY_SSL").Delete
- Set SSet = ActiveDocument.SelectionSets.Add("MY_SSL")
- On Error GoTo 0
- SSet.Select acSelectionSetAll, , , Groupcode, DataValue
-
- Dim Ents() As Object
- Dim Ent As Object
- Dim i As Long, j As Long, UBRetCoords As Long, UBMyCoords As Long
- Dim retCoords As Variant
- i = 0
- For Each Ent In SSet
- If Ent.EntityType myEnt.EntityType Then
- ReDim Preserve Ents(0 To i)
- Set Ents(i) = Ent
- ReDim Preserve Ents(0 To i)
- i = i + 1
-
- retCoords = Ent.Coordinates
- UBRetCoords = UBound(retCoords)
-
- 'handle the first time you have to fill myCoords
- On Error Resume Next
- UBMyCoords = UBound(myCoords)
- If Err Then UBMyCoords = -1
- On Error GoTo 0
-
- ' fill myCoords
- ReDim Preserve myCoords(0 To UBMyCoords + UBRetCoords + 1)
- For j = 0 To UBRetCoords
- myCoords(UBMyCoords + j + 1) = retCoords(j)
- Next j
-
- End If
- Next Ent
- If i > 0 Then
- SSet.RemoveItems (Ents)
- End If
- For i = 0 To UBound(myCoords) - 1
- Debug.Print myCoords(i), myCoords(i + 1)
- Next i
- UserForm1.Show
- End Sub
再见 |