明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3712|回复: 16

[源码] 群组(group)-帮忙补充_子函数

[复制链接]
发表于 2019-3-23 11:16 | 显示全部楼层 |阅读模式
本帖最后由 alexmai 于 2019-3-23 11:28 编辑

我在这里找到关于群组(group)的资料
http://bbs.xdcad.net/thread-712340-1-1.html
发现缺失子函数_GROUPADDORDEL
有能力的大侠可否补上,谢谢!


快捷群组:

  1. (vl-load-com)
  2. (DEFUN c:GGG(/ E EL N SS)  
  3.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  4.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  5.   ;;清理空组
  6.   (C:DelEmptyGroup)  
  7.   ;;显示当有组数量
  8.   (princ (strcat "\n 当前有 "  (itoa (c:GroupsCount))  " 个组" ))
  9.   ;;显示所有组名
  10.   (princ (C:AllGroups))
  11.   
  12.   (_StartUndo *DOC*)
  13.   (SETQ E (CAR (ENTSEL "\n 组[创建或增减成员/分解]<分解所有组>")))
  14.   (if e
  15.     (if        (_GROUPNAMES e);是组
  16.       (_GroupAddOrDel e)
  17.       ;;选择对象创建组
  18.       (if (setq ss (LM:ssget "\n 选择对象创建无名组" nil))
  19.         (progn
  20.           (ssadd e ss)
  21.           (IF (> (SSLENGTH SS) 1)
  22.             (PROGN
  23.               (repeat (setq n (sslength ss))
  24.                 (setq eL (cons (ssname ss (setq n (1- n))) eL))
  25.               )
  26.               (_CreateGroup (mapcar 'vlax-ename->vla-object eL))
  27.               (princ "\n 成功创建无名组")
  28.             )
  29.             (princ "\n 只有一个对象,不能创建组")
  30.           )
  31.         )
  32.         (princ "\n 没有选择对象,不能创建组")
  33.       )
  34.     )
  35.     ;;空选时, 分解有的组
  36.     (C:DelAllGroups)
  37.   )   
  38.   (_EndUndo *DOC*)
  39.   
  40.   (gc)
  41.   (princ "\n 组操作命令 GGG")
  42.   (princ)
  43. )
  44. (princ "\n 组操作命令 GGG")

  45. ;;1 带提示的ssget
  46. (defun LM:ssget (msg arg / sel )
  47.     (princ msg)
  48.     (setvar 'nomutt 1)
  49.     (setq sel (vl-catch-all-apply 'ssget arg))
  50.     (setvar 'nomutt 0)
  51.     (if (not (vl-catch-all-error-p sel)) sel)
  52. )
  53. ;;2 创建组
  54. (defun _CreateGroup (Objlst)
  55.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  56.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  57.   (vla-appenditems
  58.     (vla-add (vla-get-groups *DOC*) "*")
  59.     (vlax-make-variant
  60.       (vlax-safearray-fill
  61.         (vlax-make-safearray
  62.           vlax-vbobject
  63.           (cons 0 (1- (length objlst)))
  64.         )
  65.         objlst
  66.       )
  67.     )
  68.   )
  69. )
  70. ;;3 统计组定义个数
  71. (defun c:GroupsCount ()
  72.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  73.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  74.   (vla-get-count (vla-get-groups *DOC*))
  75. )

  76. ;;4 删除所有组定义
  77. (defun c:DelAllGroups ()
  78.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  79.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  80.   (vlax-for obj        (vla-get-groups *DOC*)
  81.     (vla-delete obj)
  82.   )
  83. )

  84. ;;5 删除空组
  85. (defun c:DelEmptyGroup        ()
  86.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  87.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  88.   (vlax-for obj        (vla-get-groups *DOC*)
  89.     (if        (< (vla-get-count obj) 2)
  90.       (vla-delete obj)
  91.     )
  92.   )
  93. )

  94. ;;7 求所有组名 -> ("*A1" "*A2" "2")
  95. (defun C:AllGroups (/ LST)
  96.   (setq lst (dictsearch (namedobjdict) "ACAD_GROUP"))
  97.   (mapcar 'cdr
  98.           (vl-remove-if '(lambda (x) (/= (car x) 3)) lst)
  99.   )
  100. )
  101. ;;8 实体所在组名 => ("*A4")
  102. ;;(_GROUPNAMES (car(entsel)))
  103. (defun _GROUPNAMES (ENAME / KEY DICT RESULT)
  104.   (setq        KEY  (cons 340 ENAME)
  105.         DICT (dictsearch (namedobjdict) "acad_group")
  106.   )
  107.   (while (setq DICT (member (assoc 3 DICT) DICT))
  108.     (if        (member KEY (entget (cdadr DICT)))
  109.       (setq RESULT (cons (cdar DICT) RESULT))
  110.     )
  111.     (setq DICT (cddr DICT))
  112.   )
  113.   (reverse RESULT)
  114. )

  115. ;;9 分解特定组名的组
  116. ;;(_DelOneGroup "*A4")
  117. (defun _DelOneGroup (N)
  118.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  119.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  120.   (vlax-for obj        (vla-get-groups *DOC*)
  121.     (if        (= (vla-get-name obj) N)
  122.       (vla-delete obj)
  123.     )
  124.   )
  125. )

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2019-3-23 17:13 | 显示全部楼层
群组的好处是,是可以和块(动态块)结合一起使用,检查和修改更方便
群组增加物体,群组减物体,炸特定组,全图删除组,点选显示组名
全搞定了,源码在明经和晓东找的,再总结组合,收个币






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-4-18 16:59 | 显示全部楼层
本帖最后由 alexmai 于 2021-4-18 17:01 编辑

群组,要配合快捷键使用,才有效率
类似word里的组合,常用地方: 引线+材料号,引线+文字,图框内容组合,列表组合....等等
ctrl + A   是群组的开关
不过要提前设置一下: cui  详细设置如下

http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTEyOTQ0fDU2YzNiMzQ4NjFiZmE0NGQ0MTI4YmY3YTc4YzYwZDllfDE3MTk5Njc5OTk%3D&request=yes&_f=.jpg
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTEyOTQ1fDRkODNiZWVlYjk1OGM1OThjN2NmNWIyZDI1NmE0YmEyfDE3MTk5Njc5OTk%3D&request=yes&_f=.jpg

设置后就可以完美使用: ctrl + A   群组开关

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2019-3-29 08:46 | 显示全部楼层
lllllja 发表于 2019-3-28 15:17
有没有什么办法,可以往已有组里添加图素,像块一样的操作

组增加物体,组减物体,都已经有了

特别是组减物体,明经,晓东都找过了,也没找到好用的原码。

最后自己编的,但也有小毛病(第一次点选带动态块的组时,组是不认动态块的物体,点其它就没问题)
发表于 2019-3-24 14:46 | 显示全部楼层
谢谢! alexmai 分享程序!!!!
发表于 2019-3-28 15:17 | 显示全部楼层
有没有什么办法,可以往已有组里添加图素,像块一样的操作
发表于 2019-3-29 09:01 | 显示全部楼层
alexmai 发表于 2019-3-29 08:46
组增加物体,组减物体,都已经有了

特别是组减物体,明经,晓东都找过了,也没找到好用的原码。

感谢回复,我再研究一下
发表于 2019-3-29 09:01 | 显示全部楼层
alexmai 发表于 2019-3-29 08:46
组增加物体,组减物体,都已经有了

特别是组减物体,明经,晓东都找过了,也没找到好用的原码。

多个物体框选之后   能否批量各自成组   另外 组合物体 能否批量各自成组
 楼主| 发表于 2019-3-29 09:05 | 显示全部楼层
依然小小鸟 发表于 2019-3-29 09:01
多个物体框选之后   能否批量各自成组   另外 组合物体 能否批量各自成组

不能,只能单选一个组增加物体,多几个组一起点选,只会变为一个大组合
发表于 2019-3-29 11:03 | 显示全部楼层
alexmai 发表于 2019-3-29 09:05
不能,只能单选一个组增加物体,多几个组一起点选,只会变为一个大组合

恩 希望大神攻克这个难关
发表于 2019-3-30 11:21 | 显示全部楼层
谢谢分享,正需要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-3 08:53 , Processed in 0.169043 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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