CadTechJGC184 发表于 2022-7-6 14:36:04

需要文字编辑lisp

我一直在寻找编辑文本命令,但我没有运气。我希望能够一次选择多个文本进行更改。就像我有6个需要更改,我一个接一个地选择,然后它让我按照我选择的顺序编辑它们。
 
在我上一份工作中,我们使用了ETA。
 
有什么帮助吗??

CadTechJGC184 发表于 2022-7-6 14:57:08

哎呀。。。。。。知道了!
 
; 按选择编辑属性或文本
(定义C:ETA(/A B C D E F G H J K L M N)
(图表)
;   (提示“\n加载了编辑文本/属性…”)
(setq A(ssget)B(sslength A)C 0)
(虽然(
(setq F(E车))
(setq G(cdr E))
(setq H(汽车G))
(setq J(cdr H))
(setq K“文本”)
(setq L“插入”)
(setq M“尺寸”)
(setq N“多行文字”)
(if(=J K)(命令“.ddedit”D“”))
(if(=J N)(命令“.ddedit”D“”))
(if(=J L)(命令“.ddatte”D))
(如果(=J M)(提示
“\n你选择了一个维度,你这个笨蛋….,我只做文本或属性…”)
(ERPI)
(setq C(1+C)))
(普林斯)
)

Freerefill 发表于 2022-7-6 15:01:19

如果你愿意,这是我的。它适用于文本、多行文字、属性、维度,甚至块内的文本(不过,请记住,它会改变块的每个实例……现在)
 

;Super-Edit
;by Mark Mercier
;05-11-09

(defun c:ed( / )(super_edit))
(defun c:at( / )(super_edit))

(defun super_edit( / modEnt dumEnt ent)
(vl-load-com)
(while (setq ent (nentsel "\nSelect object: "))
   (if (and ent (or (wcmatch (cdadr (entget (car ent))) "*TEXT") (eq "ATTRIB" (cdadr (entget (car ent))))))
   (progn
   ; Extract properties of selection and save as list, to modify or replace later if failed
   (setq modEnt (vlax-ename->vla-object (car ent)))

   ; extract properties and create dummy text
   (setq dumEnt (_TextCopy ent))

   ; Clear contents of selected text
   (vla-put-TextString modEnt " ")
   (command "regen")

   ; Edit dummy text
   (command "DDEDIT" (entlast))(command)

   ; once DDEDIT is finished, set modEnt TextString equal to dumEnt
   (if (and (caar (cdddr ent)) (wcmatch (vla-get-ObjectName (vlax-ename->vla-object (caar (cdddr ent)))) "*Dimension"))
   (vla-put-TextOverride (vlax-ename->vla-object (caar (cdddr ent))) (vla-get-TextOverride (vlax-ename->vla-object dumEnt)))
   (vla-put-TextString modEnt (vla-get-TextString (vlax-ename->vla-object dumEnt)))
   )

   ; Delete dummy text
   (command "erase" dumEnt "")
   (command "regen")
   )
   )
   )
)

(defun _TextCopy(ent / vlaEnt lasEnt return)
(setq return nil)
(cond
   ((and (wcmatch (cdadr (entget (car ent))) "TEXT") (not (caar (cdddr ent))))
    (setq return (_TextCopy-TEXT ent))
    )
   ((and (wcmatch (cdadr (entget (car ent))) "MTEXT") (not (caar (cdddr ent))))
    (setq return (_TextCopy-MTEXT ent))
    )
   ((and (wcmatch (cdadr (entget (car ent))) "MTEXT") (eq "INSERT" (cdr (assoc 0 (entget (caar (cdddr ent)))))))
    (setq return (_TextCopy-NESMTEXT ent))
    )
   ((and (wcmatch (cdadr (entget (car ent))) "MTEXT") (eq "DIMENSION" (cdr (assoc 0 (entget (caar (cdddr ent)))))))
    (setq return (_TextCopy-DIMMTEXT ent))
    )
   ((and (wcmatch (cdadr (entget (car ent))) "TEXT") (not (assoc 410 (entget (car ent)))))
    (setq return (_TextCopy-NESTEXT ent))
    )
   ((eq "ATTRIB" (cdadr (entget (car ent))))
    (setq return (_TextCopy-NESATT ent))
    )
   )
return
); Creates exact copy of text/mtext/attribute entity as text/mtext, including blocked text. Return entity if successful or nil if not.

(defun _TextCopy-TEXT(ent / vlaEnt lasEnt)
(command "TEXT" '(0 0 0) 1 1 "1")
(setq lasEnt (vlax-ename->vla-object (entlast)))
(setq vlaEnt (vlax-ename->vla-object (car ent)))
(vla-put-Layer      lasEnt    (vla-get-Layer            vlaEnt))
(vla-put-Height      lasEnt    (vla-get-Height            vlaEnt))
(vla-put-TextString      lasEnt    (vla-get-TextString      vlaEnt))
(vla-put-Rotation      lasEnt    (vla-get-Rotation      vlaEnt))
(vla-put-ScaleFactor      lasEnt    (vla-get-ScaleFactor      vlaEnt))
(vla-put-ObliqueAngle      lasEnt    (vla-get-ObliqueAngle      vlaEnt))
(vla-put-StyleName      lasEnt    (vla-get-StyleName      vlaEnt))
(vla-put-Alignment      lasEnt    (vla-get-Alignment      vlaEnt))
(vla-put-Backward      lasEnt    (vla-get-Backward      vlaEnt))
(vla-put-Normal      lasEnt    (vla-get-Normal            vlaEnt))
(vla-put-UpsideDown      lasEnt    (vla-get-UpsideDown      vlaEnt))
(vla-put-InsertionPoint    lasEnt    (vla-get-InsertionPoint      vlaEnt))
(vla-put-TextAlignmentPoint    lasEnt    (vla-get-TextAlignmentPoint    vlaEnt))
(setq return (vlax-vla-object->ename lasEnt))
return
)

(defun _TextCopy-MTEXT(ent / vlaEnt lasEnt)
(command "MTEXT" '(0 0 0) '(1 1 0) "1" "")
(setq lasEnt (vlax-ename->vla-object (entlast)))
(setq vlaEnt (vlax-ename->vla-object (car ent)))
(vla-put-AttachmentPoint    lasEnt    (vla-get-AttachmentPoint    vlaEnt))
(vla-put-InsertionPoint    lasEnt    (vla-get-InsertionPoint      vlaEnt))
(vla-put-Layer      lasEnt    (vla-get-Layer            vlaEnt))
(vla-put-Height      lasEnt    (vla-get-Height            vlaEnt))
(vla-put-TextString      lasEnt    (vla-get-TextString      vlaEnt))
(vla-put-Width      lasEnt    (vla-get-Width            vlaEnt))
(vla-put-StyleName      lasEnt    (vla-get-StyleName      vlaEnt))
(vla-put-Normal      lasEnt    (vla-get-Normal            vlaEnt))
(vla-put-BackgroundFill    lasEnt    (vla-get-BackgroundFill      vlaEnt))
(vla-put-DrawingDirection    lasEnt    (vla-get-DrawingDirection    vlaEnt))
(vla-put-LineSpacingDistance    lasEnt    (vla-get-LineSpacingDistance    vlaEnt))
(vla-put-LineSpacingFactor    lasEnt    (vla-get-LineSpacingFactor    vlaEnt))
(vla-put-LineSpacingStyle    lasEnt    (vla-get-LineSpacingStyle    vlaEnt))
(vla-put-Rotation      lasEnt    (vla-get-Rotation      vlaEnt))
(setq return (vlax-vla-object->ename lasEnt))
return
)

(defun _TextCopy-NESATT(ent / vlaEnt lasEnt)
(command "TEXT" '(0 0 0) 1 1 "1")
(setq lasEnt (vlax-ename->vla-object (entlast)))
(setq vlaEnt (vlax-ename->vla-object (car ent)))
(vla-put-Layer      lasEnt    (vla-get-Layer            vlaEnt))
(vla-put-InsertionPoint    lasEnt    (vla-get-InsertionPoint      vlaEnt))
(vla-put-Height      lasEnt    (vla-get-Height            vlaEnt))
(vla-put-TextString      lasEnt    (vla-get-TextString      vlaEnt))
(vla-put-Rotation      lasEnt    (vla-get-Rotation      vlaEnt))
(vla-put-ScaleFactor      lasEnt    (vla-get-ScaleFactor      vlaEnt))
(vla-put-ObliqueAngle      lasEnt    (vla-get-ObliqueAngle      vlaEnt))
(vla-put-StyleName      lasEnt    (vla-get-StyleName      vlaEnt))
(princ "blah")
(setq return (vlax-vla-object->ename lasEnt))
return
)

(defun _TextCopy-NESTEXT(ent / vlaEnt lasEnt)
(command "TEXT" '(0 0 0) 1 1 "1")
(setq lasEnt (vlax-ename->vla-object (entlast)))
(setq vlaEnt (vlax-ename->vla-object (car ent)))
(vla-put-TextString      lasEnt    (vla-get-TextString    vlaEnt))
(vla-put-ObliqueAngle      lasEnt    (vla-get-ObliqueAngle    vlaEnt))
(vla-put-StyleName      lasEnt    (vla-get-StyleName    vlaEnt))
(vla-put-Alignment      lasEnt    (vla-get-Alignment    vlaEnt))
(vla-put-Backward      lasEnt    (vla-get-Backward    vlaEnt))
(vla-put-Normal      lasEnt    (vla-get-Normal      vlaEnt))
(vla-put-UpsideDown      lasEnt    (vla-get-UpsideDown    vlaEnt))
(vla-put-Height      lasEnt    (vlax-make-variant (* (cdr (assoc 42 (entget (caar (cdddr ent))))) (cdr (assoc 40 (entget (car ent))))) vlax-vbDouble))
(vla-put-ScaleFactor      lasEnt    (vlax-make-variant (* (/ (cdr (assoc 41 (entget (caar (cdddr ent))))) (cdr (assoc 42 (entget (caar (cdddr ent)))))) (cdr (assoc 41 (entget (car ent))))) vlax-vbDouble))
(vla-put-Rotation      lasEnt    (vlax-make-variant (cdr (assoc 50 (entget (caar (cdddr ent))))) vlax-vbDouble))
(vla-put-Layer      lasEnt    (vlax-make-variant (cdr (assoc 8 (entget (caar (cdddr ent))))) vlax-vbString))
(vla-put-InsertionPoint    lasEnt (vlax-3D-point
                  (+ (car (cdr (assoc 10 (entget (caar (cdddr ent)))))) (car (cdr (assoc 10 (entget (car ent))))))
                  (+ (cadr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (cadr (cdr (assoc 10 (entget (car ent))))))
                  (+ (caddr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (caddr (cdr (assoc 10 (entget (car ent))))))))
(vla-put-TextAlignmentPoint    lasEnt (vlax-3D-point
                  (+ (car (cdr (assoc 10 (entget (caar (cdddr ent)))))) (car (cdr (assoc 11 (entget (car ent))))))
                  (+ (cadr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (cadr (cdr (assoc 11 (entget (car ent))))))
                  (+ (caddr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (caddr (cdr (assoc 11 (entget (car ent))))))))
(setq return (vlax-vla-object->ename lasEnt))
return
)

(defun _TextCopy-NESMTEXT(ent / vlaEnt lasEnt)
(command "MTEXT" '(0 0 0) '(1 1 0) "1" "")
(setq lasEnt (vlax-ename->vla-object (entlast)))
(setq vlaEnt (vlax-ename->vla-object (car ent)))
(vla-put-TextString      lasEnt    (vla-get-TextString    vlaEnt))
(vla-put-StyleName      lasEnt    (vla-get-StyleName    vlaEnt))
(vla-put-Normal      lasEnt    (vla-get-Normal      vlaEnt))
(vla-put-AttachmentPoint    lasEnt    (vla-get-AttachmentPoint vlaEnt))
(vla-put-Width      lasEnt    (vla-get-Width      vlaEnt))
(vla-put-Height      lasEnt    (vlax-make-variant (* (cdr (assoc 42 (entget (caar (cdddr ent))))) (cdr (assoc 40 (entget (car ent))))) vlax-vbDouble))
(vla-put-Rotation      lasEnt    (vlax-make-variant (cdr (assoc 50 (entget (caar (cdddr ent))))) vlax-vbDouble))
(vla-put-Layer      lasEnt    (vlax-make-variant (cdr (assoc 8 (entget (caar (cdddr ent))))) vlax-vbString))
(vla-put-InsertionPoint    lasEnt (vlax-3D-point
                  (+ (car (cdr (assoc 10 (entget (caar (cdddr ent)))))) (car (cdr (assoc 10 (entget (car ent))))))
                  (+ (cadr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (cadr (cdr (assoc 10 (entget (car ent))))))
                  (+ (caddr (cdr (assoc 10 (entget (caar (cdddr ent)))))) (caddr (cdr (assoc 10 (entget (car ent))))))))
   (setq return (vlax-vla-object->ename lasEnt))
return
)

(defun _TextCopy-DIMMTEXT(ent / vlaEnt lasEnt)
(command "copybase" (list 0 0 0) (caar (cdddr ent)) "")
(command "pasteclip" (list 0 0 0))
(setq return (entlast))
return
)

 
可能有一些代码可以清理,但总的来说,它应该可以工作。这项工作仍在进行中。如果你使用它,请告诉我它是如何工作的。我自己经常用它。^^

Lee Mac 发表于 2022-7-6 15:16:01

简单介绍一下:
 

(defun c:qEdit (/ ss dc$tag bs|Txt nw|Txt)
(vl-load-com)
(if (setq ss (ssget '((0 . "TEXT,MTEXT"))))
   (progn
   (setq dc$tag (load_dialog "ACAD")
         bs|Txt (cdr (assoc 1 (entget (ssname ss 0)))))
   (new_dialog "acad_txtedit" dc$tag)
   (set_tile "text_edit" bs|Txt)
   (action_tile "text_edit" "(setq nw|Txt $value)")
   (action_tile "cancel" "(exit)")
   (start_dialog)
   (mapcar
       (function
         (lambda (x)
         (entmod
             (subst
               (cons 1 nw|Txt)
               (assoc 1 x) x))))
       (mapcar 'entget
         (vl-remove-if 'listp
         (mapcar 'cadr
             (ssnamex ss)))))
   (unload_dialog dc$tag)))
(princ))

Commandobill 发表于 2022-7-6 15:27:08

 
由于ddedit可以处理几乎所有的事情,我只是稍微更改了您的代码


; EDIT ATTRIBUTED OR TEXT BY SELECTION
(defun C:ETA (/ A B C D E Z)
(graphscr)
; (prompt "\nEdit-TEXT/ATTRIBUTE is loaded... ")
(setq A (ssget) B (sslength A) C 0)
(while (< C B)
   (setq D (ssname A C) E (entget D))
   (setq Z (cdadr E))
   (if (member Z '("TEXT" "MTEXT" "INSERT" "DIMENSION")) (command ".ddedit" D ""))
   (terpri)
   (setq C (1+ C)))
(princ)
)
 
我肯定我还想用它做些别的事,但我不记得了

Commandobill 发表于 2022-7-6 15:47:52

 
 
隐马尔可夫模型。。。看起来不像你的风格,李。尝试新事物?
页: [1]
查看完整版本: 需要文字编辑lisp