sbarszczewski 发表于 2022-7-5 17:35:58

Lisp在dimens中更改前缀

您好,这是我在论坛上的第一个帖子,所以请宽容。
 
我有许多带有不同前缀的多维线。尺寸文本如下所示:W1/+1(220),
 
每个尺寸线的前缀不同:
W1/+1
W2/+1
W3/+1 ect。。。。。
 
前缀数据存储在扩展数据实体中。Autocad的Find命令对本文不起作用,我在这个论坛上找到的一些lisp例程也失败了。
 
有人能给我指一个lisp吗?它可以将多条尺寸线的+1到+2(或另一个五位数值)的选定文本更改为
 
当做
塞巴斯蒂安

tmelancon 发表于 2022-7-5 17:44:55

你能发布示例文件吗?你用的是哪种文字?我刚刚在autocad中对标准DIMLIN和DIMALI标注运行了“查找并替换”命令,效果很好。
 
我搜索“/+1”,它找到了所有结果,我用“/+2”替换。

Lee Mac 发表于 2022-7-5 17:51:47

请尝试以下基本代码:
(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)
)

tmelancon 发表于 2022-7-5 17:59:31

我不知道他使用的维度类型,也不知道他什么时候有时间测试,但我刚刚用他的W1/+1,W2/+1测试了几个维度。W3/+1示例和您提供的代码不起作用。当然,他那边的情况可能会有所不同,我不确定。
 
我输入W1/+1作为要更改的前缀,然后输入W1/+2作为目标更改。没有什么在第二次运行时,我还输入了/+1作为前缀,输入了/+2作为目标,再次输入nothing。

Lee Mac 发表于 2022-7-5 18:10:30

 
是否将标注前缀应用为OP所示的标注样式替代
 

tmelancon 发表于 2022-7-5 18:16:40

我道歉。我没有添加前缀。一旦我添加了它并进行了测试,您的代码就能完美地工作。

Lee Mac 发表于 2022-7-5 18:26:11

 
太好了-谢谢!

tmelancon 发表于 2022-7-5 18:32:28

Hey甚至可能喜欢在代码中包含前缀列表和特定层上的所有维度,这样他就可以运行代码,并自动评估和更改所有前缀,而无需用户选择对象和手动输入前缀。只是一个想法。

tmelancon 发表于 2022-7-5 18:42:41

(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]
查看完整版本: Lisp在dimens中更改前缀