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))
[列表]
[*]通过从(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))
未经测试。
玩得开心-大卫 谢谢大卫。我希望能够使用旧的lisp(因为我是lisp村的白痴),并能够获得用户输入来选择带有十字路口或窗户的街区。这些块并不一致,但反映了不同设备的NO或NC接触状态),但这可能是一个很高的要求。 只需从(ssget)调用中删除“X”。这将强制用户输入。
至于NO&NC,块是否具有唯一的名称?
-大卫
不一致,大卫。我再试试。不管怎样,我都很感激。 您可以为选项P L I W C X WP CP等的ssget check帮助添加额外的“mode”,这样您就可以将交叉窗口作为默认的拾取方法以及过滤。
页:
[1]