therock005 发表于 2022-7-5 13:07:11

一次编辑大量文本?

我正在寻找一种方法,我可以收集一个图纸内的所有文本,并可以大规模编辑它的意愿。
 
我知道AutoCAD有一个内置函数,允许批量查找和替换,并且存在其他类似的例程,但我发现这是一个限制,您必须搜索特定的字符串。
 
我需要的是一个函数,它列出整个图形或指定绘图区域内的所有可用文本,然后用所需的最终结果替换每个实例。
 
我怎么能在这方面得到帮助?

MSasu 发表于 2022-7-5 13:14:10

我认为当说FIND命令对您的案例有限制时,您需要更具体一些。
此外,可能会要求版主在AutoLISP、VBA、CUI和自定义部分中移动您的帖子。
 
当做

Dana W 发表于 2022-7-5 13:16:56

编辑>查找>查找位置:选定对象
 
首先,选择文本对象并执行上述操作。您可以选中“全部替换”。
 
等等,你说过你想一次编辑多个字符串。

alanjt 发表于 2022-7-5 13:22:47

多么奇怪的请求啊。写起来很有趣。。。
 
需要DosLib。
 
(defun c:EAT (/ ss sLst eLst nLst)
;; Edit All Text (playing around)
;; DosLib Required
;; Alan J. Thompson, 05.21.10
(if (and (or dos_proplist
            (alert "DosLib required. Please download and install.")
            (command "_.browser" "http://www.en.na.mcneel.com/doslib.htm")
          )
          (setq ss (ssget "_X" '((0 . "ATTDEF,MTEXT,MULTILEADER,TEXT"))))
   )
   (progn
   ((lambda (i)
      (while (setq e (ssname ss (setq i (1+ i))))
          ((lambda (ent)
             (or (eq 4
                     (logand 4 (cdr (assoc 70 (entget (tblobjname "layer" (cdr (assoc 8 ent)))))))
               )
               ((lambda (str)
                  (setq sLst (cons (cons str str) sLst)
                        eLst (cons e eLst)
                  )
                  )
                   ((lambda (s)
                      (cond
                        ((eq (cdr (assoc 0 ent)) "MULTILEADER") (cdr (assoc 304 ent)))
                        ((vl-position (cdr (assoc 0 ent)) '("ATTDEF" "MTEXT" "TEXT"))
                         (foreach x ent
                           (and (vl-position (car x) '(1 3)) (setq s (strcat s (cdr x))))
                         )
                         s
                        )
                      )
                  )
                     ""
                   )
               )
             )
         )
            (entget e)
          )
      )
      )
       -1
   )
   (if (and sLst eLst)
       (if (setq nLst (dos_proplist "Edit All Text" "Edit text:" sLst))
         (mapcar
         (function
             (lambda (e s)
               (or (eq "" (cdr s))
                   (eq (car s) (cdr s))
                   (vla-put-textstring (vlax-ename->vla-object e) (cdr s))
               )
             )
         )
         eLst
         nLst
         )
       )
       (alert "No text on unlocked layers!")
   )
   )
)
(princ)
)

therock005 发表于 2022-7-5 13:28:57

但我希望奇数是好的!谢谢你这么有团队精神!!!这对我以后会有很大帮助。
 
但是可以进一步调整一下,允许我指定我想要的文本所在的区域吗?
 
因为用这种方法所有的文字都会显示出来,现在我有了这个有700多个文字输入的绘图,我失去了我想要替换的!!!
 
但是付出了巨大的努力,我想知道为什么没有人认为这是有效的!

alanjt 发表于 2022-7-5 13:30:24

选择方法(我有点喜欢)。。。
 
(defun c:EAST (/ ss sLst eLst nLst)
;; Edit All Selected Text
;; DosLib Required
;; Alan J. Thompson, 05.21.10
(if (and (or dos_proplist
            (alert "DosLib required. Please download and install.")
            (command "_.browser" "http://www.en.na.mcneel.com/doslib.htm")
          )
          (setq ss (ssget "_:L" '((0 . "ATTDEF,MTEXT,MULTILEADER,TEXT"))))
   )
   ((lambda (i)
      (while (setq e (ssname ss (setq i (1+ i))))
      ((lambda (str)
         (setq sLst (cons (cons str str) sLst)
               eLst (cons e eLst)
         )
         )
          ((lambda (s ent)
             (cond
               ((eq (cdr (assoc 0 ent)) "MULTILEADER") (cdr (assoc 304 ent)))
               ((vl-position (cdr (assoc 0 ent)) '("ATTDEF" "MTEXT" "TEXT"))
                (foreach x ent
                  (and (vl-position (car x) '(1 3)) (setq s (strcat s (cdr x))))
                )
                s
               )
             )
         )
            ""
            (entget e)
          )
      )
      )
      (if (setq nLst (dos_proplist "Edit All Text" "Edit text:" sLst))
      (mapcar
          (function
            (lambda (e s)
            (or (eq "" (cdr s))
                  (eq (car s) (cdr s))
                  (vla-put-textstring (vlax-ename->vla-object e) (cdr s))
            )
            )
          )
          eLst
          nLst
      )
      )
    )
   -1
   )
)
(princ)
)

alanjt 发表于 2022-7-5 13:37:37

我还更新了原始版本,以忽略锁定层上的对象。

therock005 发表于 2022-7-5 13:40:59

哦,天哪,这真的很有帮助。
 
我请求它,因为有时我会命名多边形的顶点,如A1、A2、A3、A50、A51。。。我可能会在稍后决定添加或删除顶点,因此我必须对受影响的点重新编号。
 
想象一下,在没有任何帮助的情况下手动执行此操作!
 
这是我想要的主要原因之一。但有时我发现自己想要编辑一幅画里的很多文字。当你需要处理大量文本时,一个接一个地选择它们并转到属性来更改它们的标题是完全令人厌倦的。
 
再次感谢你,艾伦!

alanjt 发表于 2022-7-5 13:44:58

回想一下,很久以前,我看到一些非常旧的文本编辑器,可以选择多达3个文本对象进行编辑。我必须记住把它放在我的LSP文件夹中,并在周一上班时加载它;永远不知道,可能有它的用处。
 
享受吧,不客气。

alanjt 发表于 2022-7-5 13:49:53

微小修复。。。。
页: [1] 2
查看完整版本: 一次编辑大量文本?