乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 48|回复: 2

选择集和过滤

[复制链接]

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2014-1-18 01:38:50 | 显示全部楼层 |阅读模式
尊敬的各位成员您好,我很久没有进行autocad自定义,现在我想创建一些多段线坐标的数组,然后删除重复的坐标,所以我编写了我的例程,但在第一阶段有一些错误;请告诉我我的错误。谢谢,祝你愉快
  1. Private Sub CommandButton4_Click()
  2. Me.Hide
  3. Dim myEnt As AcadEntity
  4. Dim Pot(0 To 2) As Double
  5. Dim myLay As Variant
  6. Dim myCol As Variant
  7. ThisDrawing.Utility.GetEntity myEnt, Pot, "Select yout lwpolyline"
  8.      If TypeOf myEnt Is AcadLWPolyline Then
  9.         myLay = myEnt.Layer
  10.         myCol = myEnt.color
  11.           Else
  12.             MsgBox "Not selected a polyline !?", vbCritical
  13.      End If
  14.     Dim SSet As AcadSelectionSet
  15.     Dim FilterType(0 To 2) As Integer
  16.     Dim FilterData(0 To 2) As Variant
  17.     Dim Groupcode As Variant
  18.     Dim DataValue As Variant
  19.     Dim myCoords() As Double
  20.     FilterType(0) = 0
  21.     FilterData(0) = "LWPolyline"
  22.     FilterType(1) = 8
  23.     FilterData(1) = myEnt.Layer
  24.     FilterType(2) = 62
  25.     FilterData(2) = myEnt.color
  26.     Groupcode = FilterType
  27.     DataValue = FilterData
  28.     On Error Resume Next
  29.     ActiveDocument.SelectionSets.Item("MY_SSL").Delete
  30.     Set SSet = ActiveDocument.SelectionSets.Add("MY_SSL")
  31.     On Error GoTo 0
  32.     SSet.Select acSelectionSetAll, , , Groupcode, DataValue
  33.         
  34.        Dim Ents() As Object
  35.        Dim Ent As Object
  36.        Dim i As Long
  37.         i = 0
  38.           For Each Ent In SSet
  39.              If Ent.EntityType  myEnt.EntityType Then
  40.                 ReDim Preserve Ents(0 To i)
  41.                 Set Ents(i) = Ent
  42.                 ReDim Preserve Ents(0 To i)
  43.                 myCoords(i) = Ent.Coordinates
  44.                 i = i + 1
  45.              End If
  46.           Next Ent
  47.            If i > 0 Then
  48.                 SSet.RemoveItems (Ents)
  49.            End If
  50.                 For i = 0 To UBound(myCoords) - 1
  51.                   Debug.Print myCoords(i), myCoords(i + 1)
  52.                 Next i
  53. UserForm1.Show
  54. End Sub


回复

使用道具 举报

0

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
9
发表于 2014-1-30 02:46:41 | 显示全部楼层
你好,Robert98,你克服这个问题了吗
否则,请告诉我您'我们还在挣扎
然而,乍一看我'注意下面的内容:
-;d投诉不#039的用户;t选择myEnt作为LWPolyline(“MsgBox”未选择多段线!?“vbCritical”)但是,如果他选择myEnt作为LWPolyline,那么例程就不会&35;039;从那以后我什么都不做;如果是Ent。实体类型&lt&燃气轮机;迈恩。实体类型“;“内部控制”;对于SSet中的每个Ent“;循环将始终返回“;“假”;(SSet.Select标准将仅收集“LWPolyline”类型元素),并且永远不会填充MyCords向量
这样,您的例程只处理属于具有相同颜色和a层的轻量级多段线的坐标;非轻型多段线“;实体:这就是你'你的目标是什么
说明书;MyCords(i)=耳鼻喉科。坐标“;不会't工作,因为;坐标“;属性返回一个变体。此外,它会返回多个值(“对象中每个顶点的坐标”)不能只放在一个向量位置,例如;MyCords(i)”;。最后你没有't使用任何ReDim指令来生成;MyCords“;向量可以用新的坐标填充,因此您应该首先声明一个变量来收集实体坐标,并最终通过循环将其倒入myCoords向量中。所有这些始终跟踪向量维度(即:适当地重新命名它们)。例如:
  1. Option Explicit
  2. Private Sub CommandButton4_Click()
  3. Me.Hide
  4. Dim myEnt As AcadEntity
  5. Dim Pot(0 To 2) As Double
  6. Dim myLay As Variant
  7. Dim myCol As Variant
  8. ThisDrawing.Utility.GetEntity myEnt, Pot, "Select yout lwpolyline"
  9. If TypeOf myEnt Is AcadLWPolyline Then
  10.     myLay = myEnt.Layer
  11.     myCol = myEnt.color
  12. Else
  13.     MsgBox "Not selected a polyline !?", vbCritical
  14. End If
  15. Dim SSet As AcadSelectionSet
  16. Dim FilterType(0 To 2) As Integer
  17. Dim FilterData(0 To 2) As Variant
  18. Dim Groupcode As Variant
  19. Dim DataValue As Variant
  20. Dim myCoords() As Double
  21. FilterType(0) = 0
  22. FilterData(0) = "LWPolyline"
  23. FilterType(1) = 8
  24. FilterData(1) = myEnt.Layer
  25. FilterType(2) = 62
  26. FilterData(2) = myEnt.color
  27. Groupcode = FilterType
  28. DataValue = FilterData
  29. On Error Resume Next
  30. ActiveDocument.SelectionSets.Item("MY_SSL").Delete
  31. Set SSet = ActiveDocument.SelectionSets.Add("MY_SSL")
  32. On Error GoTo 0
  33. SSet.Select acSelectionSetAll, , , Groupcode, DataValue
  34.    
  35. Dim Ents() As Object
  36. Dim Ent As Object
  37. Dim i As Long, j As Long, UBRetCoords As Long, UBMyCoords As Long
  38. Dim retCoords As Variant
  39. i = 0
  40. For Each Ent In SSet
  41.     If Ent.EntityType  myEnt.EntityType Then
  42.         ReDim Preserve Ents(0 To i)
  43.         Set Ents(i) = Ent
  44.         ReDim Preserve Ents(0 To i)
  45.         i = i + 1
  46.         
  47.         retCoords = Ent.Coordinates
  48.         UBRetCoords = UBound(retCoords)
  49.         
  50.         'handle the first time you have to fill myCoords
  51.         On Error Resume Next
  52.         UBMyCoords = UBound(myCoords)
  53.         If Err Then UBMyCoords = -1
  54.         On Error GoTo 0
  55.         
  56.         ' fill myCoords
  57.         ReDim Preserve myCoords(0 To UBMyCoords + UBRetCoords + 1)
  58.         For j = 0 To UBRetCoords
  59.             myCoords(UBMyCoords + j + 1) = retCoords(j)
  60.         Next j
  61.         
  62.     End If
  63. Next Ent
  64. If i > 0 Then
  65.     SSet.RemoveItems (Ents)
  66. End If
  67. For i = 0 To UBound(myCoords) - 1
  68.     Debug.Print myCoords(i), myCoords(i + 1)
  69. Next i
  70. UserForm1.Show
  71. End Sub
再见
回复

使用道具 举报

0

主题

9

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2014-1-30 18:17:44 | 显示全部楼层
您好,RECVBA,非常感谢您的支持 尊敬的,It;似乎继续下去是个好主意,但我'我现在正在进行实地工作,因此很快我'我要去编程了。真的,罗伯特
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-4-20 18:14 , Processed in 1.832506 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表