Cat 发表于 2022-7-6 09:46:47

Lisp请帮忙。。。。。。

早上好Lispers,
我使用下面的lisp在一些图形中定位两个属性标记,但我需要能够选择目标块,因为它是整个图形中的一个常见标记。我比你知道的还要感激。
 

(defun c:chgnonc (/ tagname new_val i ss en ch an ad)
(setq tagname "TERM01")
(setq new_val "3")
(and (setq i -1 ss (ssget "X" '((0 . "INSERT")(66 . 1))))
      (while (setq en (ssname ss (setq i (1+ i))))
             (setq ch nil
                   an (entnext en)
                   ad (entget an))
             (while (= "ATTRIB" (cdr (assoc 0 ad)))
                  (and (= (strcase (cdr (assoc 2 ad)))
                            (strcase tagname))
                         (entmod (subst (cons 1 new_val)
                                        (assoc 1 ad) ad))
                         (setq ch T))
                  (setq an (entnext an)
                        ad (entget an)))
             (if ch (entupd en))))
(setq tagname "TERM02")
(setq new_val "4")
(and (setq i -1 ss (ssget "X" '((0 . "INSERT")(66 . 1))))
      (while (setq en (ssname ss (setq i (1+ i))))
             (setq ch nil
                   an (entnext en)
                   ad (entget an))
             (while (= "ATTRIB" (cdr (assoc 0 ad)))
                  (and (= (strcase (cdr (assoc 2 ad)))
                            (strcase tagname))
                         (entmod (subst (cons 1 new_val)
                                        (assoc 1 ad) ad))
                         (setq ch T))
                  (setq an (entnext an)
                        ad (entget an)))
             (if ch (entupd en))))
(prin1))

David Bethel 发表于 2022-7-6 10:09:34

[列表]
[*]通过从(ssget)调用中删除“X”参数,您现在必须选择插入
[*]您可以在(2“*”)字段中添加块名过滤。使用块名或模式“BLK1、BLK2”或“BLK*”编辑“*”值,或将所有块保留为“*”。它接受通配符字符串搜索。
[*]通过制作编辑值的关联列表(ev),您只需遍历该集合一次。根据需要在列表中添加或删除原子。但一定要保留正确的(在本例中为点对)
[/列表]
 

(defun chmultag (/ ev ss en ch an ad tn)
(setq ev '(("TERM01" . "3")
            ("TERM02" . "4")))

(and (setq ss (ssget '((0 . "INSERT")(2 . "*")(66 . 1))))
      (while (setq en (ssname ss 0))
             (setq ch nil
                   an (entnext en)
                   ad (entget an))
             (while (= "ATTRIB" (cdr (assoc 0 ad)))
                  (setq tn (cdr (assoc 2 ad)))
                  (and (assoc tn ev)
                         (setq ch T)
                         (entmod (subst (cons 1 (cdr (assoc tn ev)))
                                        (assoc 1 ad) ad)))
                  (setq an (entnext an)
                        ad (entget an)))
             (and ch (entupd en))
             (ssdel en ss)))
(prin1))

 
 
未经测试。
 
玩得开心-大卫

Cat 发表于 2022-7-6 10:12:51

谢谢大卫。我希望能够使用旧的lisp(因为我是lisp村的白痴),并能够获得用户输入来选择带有十字路口或窗户的街区。这些块并不一致,但反映了不同设备的NO或NC接触状态),但这可能是一个很高的要求。

David Bethel 发表于 2022-7-6 10:23:40

只需从(ssget)调用中删除“X”。这将强制用户输入。
 
 
至于NO&NC,块是否具有唯一的名称?
 
 
-大卫

Cat 发表于 2022-7-6 10:45:51

 
 
不一致,大卫。我再试试。不管怎样,我都很感激。

BIGAL 发表于 2022-7-6 10:54:24

您可以为选项P L I W C X WP CP等的ssget check帮助添加额外的“mode”,这样您就可以将交叉窗口作为默认的拾取方法以及过滤。
页: [1]
查看完整版本: Lisp请帮忙。。。。。。