乐筑天下

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

请教一个关于组的命令

[复制链接]

2

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
13
发表于 2008-1-19 16:27:00 | 显示全部楼层 |阅读模式
中有一个关于组选择的命令ctrl+shift+a,对组的使用很方便,
但是,我感觉这个组合使用起来太麻烦,想用VBA编一个命令实现它,
请指点一下。
       谢谢!
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 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
回复

使用道具 举报

2

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
13
发表于 2008-1-21 09:58:00 | 显示全部楼层
上面的程序我也有
但是对于大的组操作起来太慢了,
没有简单的吗
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 13:47 , Processed in 1.636537 second(s), 58 queries .

© 2020-2025 乐筑天下

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