Lisp在dimens中更改前缀
您好,这是我在论坛上的第一个帖子,所以请宽容。我有许多带有不同前缀的多维线。尺寸文本如下所示:W1/+1(220),
每个尺寸线的前缀不同:
W1/+1
W2/+1
W3/+1 ect。。。。。
前缀数据存储在扩展数据实体中。Autocad的Find命令对本文不起作用,我在这个论坛上找到的一些lisp例程也失败了。
有人能给我指一个lisp吗?它可以将多条尺寸线的+1到+2(或另一个五位数值)的选定文本更改为
当做
塞巴斯蒂安 你能发布示例文件吗?你用的是哪种文字?我刚刚在autocad中对标准DIMLIN和DIMALI标注运行了“查找并替换”命令,效果很好。
我搜索“/+1”,它找到了所有结果,我用“/+2”替换。 请尝试以下基本代码:
(defun c:dimpre ( / a b e i s p x )
(if (and (setq s (ssget "_:L" '((0 . "*DIMENSION") (-3 ("ACAD")))))
(/= "" (setq a (getstring "\nPrefix to find: ")))
(/= "" (setq b (getstring (strcat "\nReplace " a " with: "))))
)
(repeat (setq i (sslength s))
(and(setq e (ssname s (setq i (1- i))))
(setq x (cadr (assoc -3 (entget e '("acad")))))
(setq p (member '(1070 . 3) x))
(entmod
(append (entget e)
(list
(list -3
(append (reverse (member '(1070 . 3) (reverse x)))
(cons
(cons 1000 (vl-string-subst b a (cdadr p)))
(cddr p)
)
)
)
)
)
)
(entupd e)
)
)
)
(princ)
) 我不知道他使用的维度类型,也不知道他什么时候有时间测试,但我刚刚用他的W1/+1,W2/+1测试了几个维度。W3/+1示例和您提供的代码不起作用。当然,他那边的情况可能会有所不同,我不确定。
我输入W1/+1作为要更改的前缀,然后输入W1/+2作为目标更改。没有什么在第二次运行时,我还输入了/+1作为前缀,输入了/+2作为目标,再次输入nothing。
是否将标注前缀应用为OP所示的标注样式替代
我道歉。我没有添加前缀。一旦我添加了它并进行了测试,您的代码就能完美地工作。
太好了-谢谢! Hey甚至可能喜欢在代码中包含前缀列表和特定层上的所有维度,这样他就可以运行代码,并自动评估和更改所有前缀,而无需用户选择对象和手动输入前缀。只是一个想法。 (defun c:dimpre ( / a b e i s p x )
(if (and (setq s (ssget "X" '((0 . "*DIMENSION")(8 . "DIM")(-3 ("ACAD")))))
(/= "" (setq a "W1/+1"))
(/= "" (setq b "W1/+2"))
)
(repeat (setq i (sslength s))
(and(setq e (ssname s (setq i (1- i))))
(setq x (cadr (assoc -3 (entget e '("acad")))))
(setq p (member '(1070 . 3) x))
(entmod
(append (entget e)
(list
(list -3
(append (reverse (member '(1070 . 3) (reverse x)))
(cons
(cons 1000 (vl-string-subst b a (cdadr p)))
(cddr p)
)
)
)
)
)
)
(entupd e)
)
)
)
(princ)
)
页:
[1]