Tharwat 发表于 2022-7-5 18:18:00

到现在为止,一直都还不错
 
您不需要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
)

David Bethel 发表于 2022-7-5 18:21:00

也许 吧:
 

(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选取集
 
-大卫

BIGAL 发表于 2022-7-5 18:23:19

使用VL轻松比较X、Y和Z等,不需要记住assoc代码
 
; XEffectiveScaleFactor=1.0
; XScaleFactor=1.0
; YeEffectiveScaleFactor=2.0
; YScaleFactor=2.0
; ZeEffectiveScaleFactor=1.0
; ZScaleFactor=1.0

DuanJinHui 发表于 2022-7-5 18:27:33

谢谢塔瓦和大卫。
 
嗨,大卫。我的图形具有非均匀缩放的块。我使用您的代码进行测试。但要警惕 “找到不相等的缩放块=0”

David Bethel 发表于 2022-7-5 18:28:46

 
糟糕的是,我忘记了/=有一个怪癖,即(/=1 2 2)返回零。
 
我修正了12号帖子中的代码
 
-大卫

Lee Mac 发表于 2022-7-5 18:31:01

是否要选择非均匀缩放的块,但忽略镜像块(即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)
)

DuanJinHui 发表于 2022-7-5 18:36:42

 
我忽略镜像块。非常感谢李。如果我想选择均匀缩放的块,只需将“等于”替换为“/”,对吗?
 
提到镜像块,我想起了一个问题。
http://www.cadtutor.net/forum/showthread.php?96562-Lee-s-MirrorBlock。lsp-have-a-bug

Lee Mac 发表于 2022-7-5 18:38:01

 
我建议用(not)括住(and)表达式以反转条件。

DuanJinHui 发表于 2022-7-5 18:41:58

 
李,再次谢谢你。
 
这样地?

(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)
                )

Lee Mac 发表于 2022-7-5 18:46:23

确切地
页: 1 [2]
查看完整版本: Flter非均匀缩放blo