您不需要while函数,函数的返回必须是变量ss,而不是实体名和几个小mod。
继续编码,不管你会有多少错误。
看一看。
(defun newss(/ ss i ename)
(if (setq ss (ssget (list '(0 . "INSERT"))))
(repeat (setq i (sslength ss))
(setq ename (ssname ss (setq i (1- i))))
(if (not (= (cdr (assoc 41 (entget ename)))
(cdr (assoc 42 (entget ename)))
(cdr (assoc 43 (entget ename))))
)
(ssdel ename ss)
)
)
(alert "\nNothing select. Try again.")
)
ss
)
也许 吧:
(defun c:noteq (/ ss i en ed)
(setq neq (ssadd))
(and (setq ss (ssget "X" (list (cons 0 "INSERT"))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en))
(if (not (= (cdr (assoc 41 ed))
(cdr (assoc 42 ed))
(cdr (assoc 43 ed))))
(ssadd en neq))
(setq i (1+ i))))
(alert (strcat "UnEqual Scaked Blocks Found = " (rtos (sslength neq) 2 0)))
(prin1))
全局neq选取集
-大卫 使用VL轻松比较X、Y和Z等,不需要记住assoc代码
; XEffectiveScaleFactor=1.0
; XScaleFactor=1.0
; YeEffectiveScaleFactor=2.0
; YScaleFactor=2.0
; ZeEffectiveScaleFactor=1.0
; ZScaleFactor=1.0 谢谢塔瓦和大卫。
嗨,大卫。我的图形具有非均匀缩放的块。我使用您的代码进行测试。但要警惕 “找到不相等的缩放块=0”
糟糕的是,我忘记了/=有一个怪癖,即(/=1 2 2)返回零。
我修正了12号帖子中的代码
-大卫 是否要选择非均匀缩放的块,但忽略镜像块(即x比例因子为负的块)?
由于块比例存储为双精度,我建议在执行比较时使用具有一定公差的等函数,即:
(defun c:selnublocks ( / i s x )
(if (setq s (ssget "_X" (list '(0 . "INSERT") (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model")))))
(repeat (setq i (sslength s))
(setq x (entget (ssname s (setq i (1- i)))))
(if (and (equal (abs (cdr (assoc 41 x))) (abs (cdr (assoc 42 x))) 1e-
(equal (abs (cdr (assoc 41 x))) (abs (cdr (assoc 43 x))) 1e-
)
(ssdel (cdr (assoc -1 x)) s)
)
)
)
(sssetfirst nil s)
(princ)
)
我忽略镜像块。非常感谢李。如果我想选择均匀缩放的块,只需将“等于”替换为“/”,对吗?
提到镜像块,我想起了一个问题。
http://www.cadtutor.net/forum/showthread.php?96562-Lee-s-MirrorBlock。lsp-have-a-bug
我建议用(not)括住(and)表达式以反转条件。
李,再次谢谢你。
这样地?
(if
(not
(and (equal (abs (cdr (assoc 41 x))) (abs (cdr (assoc 42 x))) 1e-
(equal (abs (cdr (assoc 41 x))) (abs (cdr (assoc 43 x))) 1e-
)
)
(ssdel (cdr (assoc -1 x)) s)
)
确切地
页:
1
[2]