需要文字编辑lisp
我一直在寻找编辑文本命令,但我没有运气。我希望能够一次选择多个文本进行更改。就像我有6个需要更改,我一个接一个地选择,然后它让我按照我选择的顺序编辑它们。在我上一份工作中,我们使用了ETA。
有什么帮助吗?? 哎呀。。。。。。知道了!
; 按选择编辑属性或文本
(定义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)))
(普林斯)
) 如果你愿意,这是我的。它适用于文本、多行文字、属性、维度,甚至块内的文本(不过,请记住,它会改变块的每个实例……现在)
;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
)
可能有一些代码可以清理,但总的来说,它应该可以工作。这项工作仍在进行中。如果你使用它,请告诉我它是如何工作的。我自己经常用它。^^ 简单介绍一下:
(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))
由于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)
)
我肯定我还想用它做些别的事,但我不记得了
隐马尔可夫模型。。。看起来不像你的风格,李。尝试新事物?
页:
[1]