网上找到一个程序,怎么会丢行? - ;Explode MText
- ;Explodes Mtext into single lines of mtext
- ;Written by: cmwade77 @ theswamp.org - July 2014
- ;Bug: Currenlty Only works on the first two lines of mtext
- ;Work Around: Repeat use until all lines are exploded
- (defun c:explodemtext (/ *thisdrawing* *modelspace* *paperspace* Ent Object ObjectType Text pt1 style ct OldCt Width txtobj Layer LineCt Pt2 LSpace color)
- (vl-load-com)
- (setq *thisdrawing* (vla-get-activedocument (vlax-get-acad-object))
- *modelspace* (vla-get-ModelSpace *thisdrawing*)
- *paperspace* (vla-get-PaperSpace *thisdrawing*)
- )
- (setq Ent (nentselp "\rSelect text to explode: "))
- (setq Object (vlax-ename->vla-object (car Ent))
- ObjectType (vla-get-ObjectName Object)
- )
- (if (wcmatch ObjectType "*Text*")
- (progn
- (setq Text (vla-get-textstring Object)
- pt1 (vla-get-InsertionPoint Object)
- style (vla-get-StyleName Object)
- Width (vla-get-width Object)
- Layer (vla-get-Layer Object)
- LSpace (vla-get-LineSpacingDistance Object)
- pt1 (vlax-safearray->list (vlax-variant-value pt1))
- color (vla-get-color Object)
- )
- (vla-delete Object)
- (setq ct 1)
- (setq LineCt 0)
- (setq OldCt 1)
- (while (<= ct (strlen Text))
- (if (= (substr Text ct 2) "\\P")
- (progn
- (setq pt2 (vlax-3d-point (nth 0 Pt1) (- (nth 1 Pt1) (* LineCt LSPace)) (nth 2 Pt1)))
- (setq NewText (substr Text OldCt (+ (- (- ct 1) OldCt) 1))
- OldCt (+ ct 2)
- LineCt (+ LineCt 1)
- )
- (if (or (/= (getvar "cvport") 1) (/= (getvar "tilemode") 0))
- (setq txtobj (vla-AddMtext *modelspace* pt2 width NewText))
- (setq txtobj (vla-AddMtext *paperspace* pt2 width NewText))
- )
- (vla-put-StyleName txtobj Style)
- (vla-put-layer txtObj Layer)
- (vla-put-color txtObj color)
- )
- )
- (setq ct (+ ct 1))
- )
- )
- )
- )
|