明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1102|回复: 2

请教一个关于组的命令

[复制链接]
发表于 2008-1-19 16:27:00 | 显示全部楼层 |阅读模式

AutoCAD中有一个关于组选择的命令ctrl+shift+a,对组的使用很方便,

但是,我感觉这个组合使用起来太麻烦,想用VBA编一个命令实现它,

请指点一下。

       谢谢!

发表于 2008-1-19 20:34:00 | 显示全部楼层
5年前的程序,但好用。
  1. ' UnNameGroup.dvb
  2. ' 版权所有 (C) 1999-2003  明经通道 郑立楷
  3. '
  4. 'http://www.mjtd.com ; mccad@mjtd.com
  5. '
  6. '   本软件免费可供进行任何用途需求的拷贝、修改及发行, 但请遵循下述原则:
  7. '
  8. '   1)  上列的版权通告必须出现在每一份拷贝里。
  9. '   2)  相关的说明文档也必须载有版权通告及本项许可通告。
  10. '
  11. '   本软件仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  12. '   用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认。
  13. '软件功能:对象组合及分解
  14. '该两个程序解决了AutoCAD在对象组合及分解过程中繁琐的操作过程,最主要是在分
  15. '解时不必要首先知道组合的名称,组合时也不需要提供组合名称。
  16. '该程序可以通过选定对象的方法来组合及分解。
  17. '将选择对象组合起来
  18. Sub AddUnNameGroup()
  19.     Dim SelObjects As AcadSelectionSet
  20.     Set SelObjects = GetSelSet
  21.     Dim UnNameGroup As AcadGroup
  22.     Set UnNameGroup = ThisDrawing.Groups.Add("*")
  23.     If SelObjects.Count > 0 Then
  24.         ReDim appendObjs(0 To SelObjects.Count - 1) As AcadEntity
  25.         Dim I As Integer
  26.         For I = 0 To SelObjects.Count - 1
  27.             Set appendObjs(I) = SelObjects.Item(I)
  28.         Next
  29.      
  30.         UnNameGroup.AppendItems appendObjs
  31.     End If
  32. End Sub
  33. '将选定的组合分解开
  34. '由于不能通过选定的对象来直接找到其组合名称,只能通过循环比较对象ID的方法
  35. '来解决这个问题,运行时可能会慢点,但对象不多的情况下应该没问题
  36. Sub DelUnNameGroup()
  37.     Dim SelGroup As AcadGroup
  38.     Dim SelObjects As AcadSelectionSet
  39.     Set SelObjects = GetSelSet
  40.     Dim ObjInSelSet As AcadObject
  41.     Dim I As Integer
  42.     Dim J As Integer
  43.     Dim K As Integer
  44.     Dim ObjInGroup As AcadObject
  45.     On Error Resume Next
  46.     For I = 0 To SelObjects.Count - 1
  47.         Set ObjInSelSet = SelObjects.Item(I)
  48.         For J = 0 To ThisDrawing.Groups.Count - 1
  49.             For K = 0 To ThisDrawing.Groups.Item(J).Count - 1
  50.                 Set ObjInGroup = ThisDrawing.Groups.Item(J).Item(K)
  51.                 If ObjInGroup.ObjectID = ObjInSelSet.ObjectID Then
  52.                     ThisDrawing.Groups.Item(J).Delete
  53.                     Exit For
  54.                 End If
  55.             Next
  56.         Next
  57.     Next
  58.                      
  59. End Sub
  60. '对象选择函数
  61. Function GetSelSet() As AcadSelectionSet
  62.     Dim ss As AcadSelectionSet
  63.     Set ss = ThisDrawing.PickfirstSelectionSet
  64.     If ss.Count = 0 Then
  65.         Dim ssName As String
  66.         ssName = "strSSet"
  67.         On Error Resume Next
  68.         Set ss = ThisDrawing.SelectionSets(ssName)
  69.         If Err Then Set ss = ThisDrawing.SelectionSets.Add(ssName)
  70.         ss.Clear
  71.         ss.SelectOnScreen
  72.     Else
  73.         ThisDrawing.Application.Update
  74.     End If
  75.     Set GetSelSet = ss
  76. End Function
  77. Private Sub AcadDocument_BeginLisp(ByVal FirstLine As String)
  78. Select Case UCase(FirstLine)
  79.        Case "(C:AG)"
  80.              AddUnNameGroup
  81.        Case "(C:DG)"
  82.             DelUnNameGroup
  83. End Select
  84. End Sub
 楼主| 发表于 2008-1-21 09:58:00 | 显示全部楼层

上面的程序我也有

但是对于大的组操作起来太慢了,

没有简单的吗

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-12 09:26 , Processed in 0.170089 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表