用ssget获取圆和直线的代码如下
- (setq ss1 (ssget '((0 . "LINE"))))
- (setq ss2 (ssget '((0 . "circle"))))
但是要选择两次,无疑是个笨办法.所以我把它改成
- (setq sss (ssget '((0 . "LINE,circle"))))
问题来了,我如何将其分离,就是把直线实体赋给选择集ss1,圆实体赋给选择集ss2 ?
我的解决办法如下
- (defun c:test ()
- (setq ss1 nil ss2 nil)
- (if (setq ss1 (ssget '((0 . "LINE,circle"))))
- (foreach itm (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1)))
- (if (= (cdr (assoc 0 (entget itm))) "CIRCLE")
- (progn
- (or ss2 (setq ss2 (ssadd)))
- (ssadd itm ss2)
- (ssdel itm ss1)
- )
- )
- )
- )
- )
期待各路高手的讲解,希望在此跟帖,看到您的解决办法.最后请斑竹评一下谁的代码最实用最精简.谢谢大家!
.
|