DuanJinHui 发表于 2022-7-5 17:43:32

Flter非均匀缩放blo

使用“ssget”,我想过滤非均匀缩放块。
(setq ss (ssget (list '(0 . "INSERT"))))
 
有什么好主意吗?谢谢

Tharwat 发表于 2022-7-5 17:49:38

你好
 
您可能需要将1.0的值更改为所需的值。

(setq ss (ssget '((-4 . "<NOT")
               (-4 . "<AND")
               (0 . "INSERT")
               (41 . 1.0)
               (42 . 1.0)
               (43 . 1.0)
               (-4 . "AND>")
               (-4 . "NOT>")
               )
               )
   )

DuanJinHui 发表于 2022-7-5 17:52:26

 
谢谢塔瓦。
但这不是我需要的。
我需要选择均匀缩放的块。
例(41.1.0)(42.1.0)(43.1.0)
(41 . 2.0)(42 . 2.0)(43 . 2.0)
(41 . 3.0)(42 . 3.0)(43 .3.0).... 等

DuanJinHui 发表于 2022-7-5 17:55:10

我知道使用“entsel”函数可以做到这一点:
(setq blkref (car (entsel "\n>>>Choose a block:")))
 

(if (not(= (cdr(assoc 41 (entget blkref))) (cdr(assoc 42 (entget blkref))) (cdr(assoc 43 (entget blkref)))))
                                (progn
                                        (alert "\nNOT support non-uniformly scaled block.")
                                        t
                                )
                                (progn


Tharwat 发表于 2022-7-5 17:57:37

我真的不确定你能用不同的X、Y和Z比例值过滤许多块,但你只能有一个,正如我在第一个回复中所演示的那样。
 
否则,您可以创建一个块选择集,然后在每个块对象之间循环,并在其比例X、Y、Z匹配时将对象添加到列表中。

DuanJinHui 发表于 2022-7-5 18:00:24

 
可能需要编写一个子函数。

Tharwat 发表于 2022-7-5 18:04:58

 
试试看,如果你需要帮助,请告诉我。

DuanJinHui 发表于 2022-7-5 18:08:22

 
可能需要1天或更长时间。我会努力的。

Tharwat 发表于 2022-7-5 18:11:50

 
不,很简单。
 
如果你不尝试给出至少75%的代码正确,我将不再回复你的任何帖子。

DuanJinHui 发表于 2022-7-5 18:12:14

 
这有什么建议吗?谢谢
 

(defun newss(/ ss i ename )
(while
        (if (null(setq ss (ssget (list '(0 . "INSERT")))))
                (progn
                        (alert "\nNothing select. Try again.")
                        t
                )
                (progn
                        (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))))
                                        )
                                        (setq ename(ssdel ename ss))
                                )
                        )
                        nil
                )
        )
)
ename
)

 
因此,如果需要,请使用此新选择集。

; test
(setq en (newss))
(command "_.move" en "")

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