(defun ssinter (ss1 ss2 / ss3 sn1 sn2 sn3 );求两个选择集的交集
(if (or (equal ss1 nil) (equal ss2 nil))
nil
(progn
(setq sn1 (sslength ss1) sn2 (sslength ss2))
(if (> sn1 sn2)
(setq ss3 ss1 ss1 ss2 ss2 ss3 sn3 sn1 sn1 sn2 sn2 sn3)
)
(setq ss3 (ssadd) n 0)
(repeat sn1
(if (ssmemb (ssname ss1 n) ss2)
(ssadd (ssname ss1 n) ss3)
)
(setq n (1+ n))
)
ss3
)
)
)
(defun ssunion (SS1 SS2 / n);求两个选择集的并集
(cond
((and (equal ss1 nil) (not (equal ss2 nil))) ss2)
((and (equal ss2 nil) (not (equal ss1 nil))) ss1)
((and (equal ss1 nil) (equal ss2 nil)) nil)
(
(and (not(equal ss2 nil))(not (equal ss1 nil)))
(progn
(setq n 0)
(repeat (sslength ss1)
(if (not(ssmemb (ssname ss1 n) ss2))
(ssadd (ssmemb ss2 n) ss1)
)
(setq n (1+ n))
)
ss1
)
)
)
)
(defun sssubtract (SS1 SS2 / n ss3);求两个选择集的差集: SS1-SS2
(if (setq ss2 (ssinter ss1 ss2))
(progn
(setq n 0)
(repeat (sslength ss1)
(if (not(ssmemb (ssname ss1 n) ss2))
(ssadd (ssname ss1 n) ss3)
)
(setq n (1+ n))
)
ss3
)
ss1
)
) 原因在于, (ssget "P")得到的是,最近一次非空选择集,而非最近一次选择集 ygp820601 发表于 2012-12-18 21:00 static/image/common/back.gif
呵呵,求差集的函数有问题,当两个选择集相同时,差集应该为nil,这种情况没有考虑到。
(defun ssinter (ss ...
这位朋友写的代码有很多问题呀,我重改了一个
(defun ssunion (SS1 SS2 / n);求两个选择集的并集
(cond
((and (equal ss1 nil) (not (equal ss2 nil))) ss2)
((and (equal ss2 nil) (not (equal ss1 nil))) ss1)
((and (equal ss1 nil) (equal ss2 nil)) nil)
(
(and (not(equal ss2 nil))(not (equal ss1 nil)))
(progn
(setq n 0)
(repeat (sslength ss2)
(if (not(ssmemb (ssname ss2 n) ss1))
(setq ss1 (ssadd (ssname ss2 n) ss1))
)
(setq n (1+ n))
)
ss1
)
)
)
) yjtdkj 发表于 2013-12-14 17:07
这位朋友写的代码有很多问题呀,我重改了一个
感谢代码,取走用了
页:
1
[2]