乐筑天下

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

选择MSpace Viewport中的所有可见实体

[复制链接]

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2008-12-3 13:52:20 | 显示全部楼层 |阅读模式
好的,我知道我应该记住这一个,不,我没有
CADencoding存档(希望我有),但是…
如何选择在
mspace视口中可见的所有实体?这将选择dwg中具有REC_NUM属性的每个块。我需要
做什么
  1. Public Sub TestThis()
  2. Dim intcnt As Integer
  3. Dim objSelSet As AcadSelectionSet
  4. Dim varData(0 To 1) As Variant
  5. Dim intType(0 To 1) As Integer
  6. Dim objEnt As AcadEntity
  7. Dim strRecNumbers As String
  8. Dim varRecNum As Variant
  9. Dim objBlkRef As AcadBlockReference
  10. Dim varPnt As Variant
  11. ThisDrawing.MSpace = True
  12. intType(0) = 0: varData(0) = "INSERT"
  13. intType(1) = 2: varData(1) = BlockAttributeFilter("REC_NUM")
  14. Set objSelSet = ThisDrawing.PickfirstSelectionSet
  15. objSelSet.Select Mode:=acSelectionSetAll, FilterType:=intType, FilterData:=varData
  16. ''Try this if all else fails
  17. ' dblLL(0) = varLowerLeft(0) - 100
  18. ' dblLL(1) = varLowerLeft(1) - 100
  19. '
  20. ' dblUR(0) = varUpperRight(0) + 100
  21. ' dblUR(1) = varUpperRight(1) + 100
  22. '
  23. ' objSelSet.Select acSelectionSetWindow, dblLL, dblUR, intType, varData
  24. For Each objEnt In objSelSet
  25.       If TypeOf objEnt Is AcadBlockReference Then
  26.            Set objBlkRef = objEnt
  27.            strRecNumbers = IIf(strRecNumbers = "", AttString(objBlkRef, "REC_NUM"), strRecNumbers & "|" & AttString(objBlkRef, "REC_NUM"))
  28.       End If
  29. Next
  30. varRecNum = Split(strRecNumbers, "|")
  31. ThisDrawing.MSpace = False
  32. 'Now create the pole list with framing and locations
  33. 'Do a SQL for each Rec_Num|Pri_Unit|Location
  34. For intcnt = LBound(varRecNum) To UBound(varRecNum)
  35.       Debug.Print varRecNum(intcnt)
  36. Next
  37. End Sub
  38. Public Function BlockAttributeFilter(strAttTag As String) As String
  39. Dim objBlk As AcadBlock
  40. Dim strFilter As String
  41. Dim objBlkEnt As AcadEntity
  42. Dim objAtt As AcadAttribute
  43. For Each objBlk In ThisDrawing.Blocks
  44.       If Left(objBlk.Name, 1)  "*" Then
  45.       For Each objBlkEnt In objBlk
  46.            If TypeOf objBlkEnt Is AcadAttribute Then
  47.                 Set objAtt = objBlkEnt
  48.                 If objAtt.TagString = strAttTag Then
  49.                      strFilter = IIf(strFilter = "", objBlk.Name, strFilter & "," & objBlk.Name)
  50.                 End If
  51.            End If
  52.       Next objBlkEnt
  53.       End If
  54. Next objBlk
  55. BlockAttributeFilter = strFilter
  56. End Function

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2008-12-3 17:27:28 | 显示全部楼层
我找到了一个解决方案。
该代码是在欧特克论坛上找到的。
  1. Public Sub TestThis()
  2. Dim intcnt As Integer
  3. Dim objSelSet As AcadSelectionSet
  4. Dim varData(0 To 1) As Variant
  5. Dim intType(0 To 1) As Integer
  6. Dim objEnt As AcadEntity
  7. Dim strRecNumbers As String
  8. Dim varRecNum As Variant
  9. Dim objBlkRef As AcadBlockReference
  10. Dim varPnt As Variant
  11. Dim dblLL(0 To 2) As Double
  12. Dim dblUR(0 To 2) As Double
  13. Dim varLowerLeft As Variant
  14. Dim varUpperRight As Variant
  15. ThisDrawing.MSpace = True
  16. intType(0) = 0: varData(0) = "INSERT"
  17. intType(1) = 2: varData(1) = BlockAttributeFilter("REC_NUM")
  18. If MSpaceWindow(varLowerLeft, varUpperRight) = True Then
  19.       dblLL(0) = varLowerLeft(0)
  20.       dblLL(1) = varLowerLeft(1)
  21.       dblUR(0) = varUpperRight(0)
  22.       dblUR(1) = varUpperRight(1)
  23.       'Select the blocks
  24.       Set objSelSet = ThisDrawing.PickfirstSelectionSet
  25.       objSelSet.Select acSelectionSetWindow, dblLL, dblUR, intType, varData
  26.       'Loop through them for the Rec_Num
  27.       For Each objEnt In objSelSet
  28.            If TypeOf objEnt Is AcadBlockReference Then
  29.                 Set objBlkRef = objEnt
  30.                 strRecNumbers = IIf(strRecNumbers = "", AttString(objBlkRef, "REC_NUM"), strRecNumbers & "|" & AttString(objBlkRef, "REC_NUM"))
  31.            End If
  32.       Next
  33.       'Split for easy stepping
  34.       varRecNum = Split(strRecNumbers, "|")
  35.       'Now create the pole list with framing and locations
  36.       'Do a SQL for each Rec_Num|Pri_Unit|Location
  37.       For intcnt = LBound(varRecNum) To UBound(varRecNum)
  38.            Debug.Print varRecNum(intcnt)
  39.       Next
  40. End If
  41. ThisDrawing.MSpace = False
  42. End Sub
  43. '//*****************************//'
  44. '//****Code from Autodesk Forum*****//'
  45. '//*****************************//'
  46. Public Function MSpaceWindow(varLowerLeft As Variant, varUpperRight As Variant) As Boolean
  47. Dim varCenter As Variant
  48. Dim dblHeight As Double
  49. Dim dblWidth As Double
  50. Dim varMinp As Variant
  51. Dim varMaxp As Variant
  52. Dim dblVPHeight As Double
  53. Dim dblVPWidth As Double
  54. On Error GoTo Err_Control
  55. ThisDrawing.MSpace = True
  56. ThisDrawing.SetVariable "CVPORT", 2
  57. 'view center in WCS
  58. varCenter = ThisDrawing.GetVariable("VIEWCTR")
  59. 'convert in to DCS
  60. varCenter = ThisDrawing.Utility.TranslateCoordinates(varCenter, acWorld, acDisplayDCS, 0)
  61. 'height of the viewport in DCS
  62. dblHeight = ThisDrawing.GetVariable("VIEWSIZE")
  63. varMinp = varCenter: varMaxp = varCenter
  64. 'calculate the width of the viewport in DCS
  65. dblVPHeight = ThisDrawing.ActivePViewport.Height
  66. dblVPWidth = ThisDrawing.ActivePViewport.Width
  67. dblWidth = dblVPWidth * dblHeight / dblVPHeight
  68. 'calculate bounding view boundary in DCS
  69. varMinp(0) = varCenter(0) - dblWidth / 2
  70. varMinp(1) = varCenter(1) - dblHeight / 2
  71. varMaxp(0) = varCenter(0) + dblWidth / 2
  72. varMaxp(1) = varCenter(1) + dblHeight / 2
  73. varMinp = ThisDrawing.Utility.TranslateCoordinates(varMinp, acDisplayDCS, acWorld, 0)
  74. varMaxp = ThisDrawing.Utility.TranslateCoordinates(varMaxp, acDisplayDCS, acWorld, 0)
  75. 'Set the Returns
  76. varLowerLeft = varMinp
  77. varUpperRight = varMaxp
  78. MSpaceWindow = True
  79. Exit_Here:
  80. Exit Function
  81.   
  82. Err_Control:
  83. Select Case Err.Number
  84.       Case Else
  85.            MsgBox Err.Description
  86.            MSpaceWindow = False
  87.            Resume Exit_Here
  88. End Select
  89. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 15:43 , Processed in 0.608912 second(s), 56 queries .

© 2020-2025 乐筑天下

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