bonacad 发表于 2022-7-6 17:27:12

cad编码器帮助!关于:组

http://img379.imageshack.us/img379/185/groupnk8.jpg
 
这个值到哪里去了?
我搜索了两天。
无论如何,问题是:
 
我正在用Lisp创建未命名组。
 
1.以这种方式创建组时(没有拨号bx),没有选项
新组是否可选择。
命令:-组
输入组选项
[?/Order/Add/Remove/Explode/REName/selective/Create]:c
输入组名或[?]:*
 
2.因为我正在创建未命名的grups,所以在以下情况下我无法使用它:
-组输入组选项
[?/Order/Add/Remove/Explode/REName/selective/Create]:s
输入组名或[?]:-我不知道名字-
 
3.最后一个值保留在该复选框中,用于确定是否可以选择新组。
 
它不是系统变量值。
它不是注册表值,因为当您打开新图形时,它将设置为ON。
它必须是局部Lisp变量之一。
 
注意:当打开“组”对话框时,该值是浮动的,当取消、确定或关闭时退出时,该值保持不变!。

ASMI 发表于 2022-7-6 17:45:54

未命名组名是带有“*A”+随机数的字符串,您无法知道它。该数字包含分组字典,例如:
 
 
更简单的方法是使用ENTMAKEX函数创建未命名的组。DXF代码70是“未命名”标志:1=未命名;0=命名,DXF代码71为可选择标志:1=可选择;0=不可选择,DXF组300是组描述。
 
(defun c:ugr(/ grSet eLst)
(princ "\n<<< Select object to make unnamed group >>>")
(if(setq grSet(ssget))
   (progn
   (setq eLst(append(list '(0 . "GROUP") '(100 . "AcDbGroup")
                     '(300 . "") '(70 . 1) '(71 . 1))
   (mapcar '(lambda(x)(cons 340 x))
       (vl-remove-if 'listp
                   (mapcar 'cadr(ssnamex grSet))))
       ); end append
    ); end setq
       (entmakex eLst)
      (sssetfirst nil grSet)
   ); end progn
   ); end if
(princ)
); end of c:ugr

VovKa 发表于 2022-7-6 18:04:27

bonacad,这将返回上次创建的组的名称

(cdr
(assoc 3
(reverse
   (entget
   (cdadr
       (member (cons 3 "ACAD_GROUP") (entget (namedobjdict)))
   )
   )
)
)
)

ASMI,使用您的代码创建的组将持续到文档打开为止。关闭文档和组。
这就是我用的。

(defun CreateGroup
              (Name EntsList SelFlag / GroupDic EntName)
(if (and (setq GroupDic (cdadr (member (cons 3 "ACAD_GROUP")
                               (entget (namedobjdict))
                       )
                  )
   )
   (not
   (and Name (vl-position (cons 3 Name) (entget GroupDic)))
   )
   (setq
   EntName (entmakex
             (append (list (cons 0 "GROUP")
                             (cons 100 "AcDbGroup")
                             (cons 300 "")
                             (cons 70
                                   (if Name
                                     0
                                     1
                                   )
                             )
                             (cons 71 SelFlag)
                     )
                     (mapcar (function (lambda (e) (cons 340 e)))
                             EntsList
                     )
             )
             )
   )
   (entmod (append (entget GroupDic)
                   (list (cons 3
                             (if (null Name)
                               "*"
                               Name
                             )
                       )
                       (cons 350 EntName)
                   )
           )
   )
   )
   (if        Name
   Name
   (cdadr
(member (cons 350 EntName) (reverse (entget GroupDic)))
   )
   )
)
)
;;;(CreateGroup nil (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))) 1)

ASMI 发表于 2022-7-6 18:14:59

>沃夫卡语
 
你是对的。“ACAD_组”字典需要附加新的组名和名称。你有很好的群组创建功能。这是我的“随时可用”功能,用于创建未命名的组。
 
(defun c:ugr(/ grSet eLst nGrp grDic nNam)
(princ "\n<<< Select object to make unnamed group >>>")
(if(setq grSet(ssget))
   (progn
   (setq eLst(append(list '(0 . "GROUP") '(100 . "AcDbGroup")
                     '(300 . "") '(70 . 1) '(71 . 1))
   (mapcar '(lambda(x)(cons 340 x))
       (vl-remove-if 'listp
                   (mapcar 'cadr(ssnamex grSet))))
       ); end append
    ); end setq
       (setq nGrp(entmakex eLst)
      grDic(append grDic
             (entget(cdadr(member '(3 . "ACAD_GROUP")
              (entget (namedobjdict)))))
                (list(cons 3 "*")(cons 350 nGrp)))
      ); end setq
   (entmod grDic)
   ); end progn
   ); end if
(princ)
); end of c:ugr

bonacad 发表于 2022-7-6 18:41:32

非常感谢你们。
非常有用的信息和方法。
我很感激。
现在我可以从Lisp程序中准确地得到我想要的。
页: [1]
查看完整版本: cad编码器帮助!关于:组