[求助]把文字从空格处断开自动变2行,行距由用户输入
<strong><font face="Verdana" color="#da2549">请高手编个程序,把文字从空格处断开自动变2行,如"KL2-22(11) 200X700",括号后为空格,从空格处把这行文字断开成2行,行距由用户输入。</font></strong> <p>自己顶一下.</p><p>有高手编写了断开文字换行的程序,但不能连续选择.</p><p>而且不能指定行距.</p> <p>(defun c:strsplit(/ ACADSPC DST INDEX OBJ SLTSET STRING)<br/> (vl-load-com)<br/> (if (= (getvar "TILEMODE") 1)<br/> (setq acadspc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))<br/> (setq acadspc (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))<br/> )<br/> (setq dst (getdist "\n输入行间距: "))<br/> (if (null dst)(setq dst 0))<br/> (while (and (setq sltset (ssget '((0 . "TEXT")))) (/= (setq string (getstring 1 "\n输入分割字符: ")) ""))<br/> (setq index 0)<br/> (repeat (sslength sltset)<br/> (setq obj (vlax-ename->vla-object (ssname sltset index)))<br/> (stringsplit obj string dst acadspc)<br/> (setq index (1+ index))<br/> )<br/> )<br/> )<br/> </p><p>(defun stringsplit(obj string dst acadspc / BPT BPT1 NINSERTPOINT NTEXTSTRING STRINDEX TEXTH TEXTSTRING)<br/> (setq bpt (vla-get-insertionpoint obj)<br/> bpt1 (vlax-safearray->list (vlax-variant-value bpt))<br/> texth (vla-get-height obj)<br/> )<br/> (vla-put-alignment obj acalignmentleft)<br/> (vla-put-insertionpoint obj bpt)<br/> (setq textstring (vla-get-textstring obj))<br/> (setq strindex (vl-string-search string textstring))<br/> (if strindex<br/> (progn<br/> (vla-put-textstring obj (substr textstring 1 strindex))<br/> (setq ntextstring (substr textstring (+ strindex 2))<br/> ninsertpoint (polar bpt1 (* 1.5 pi) (+ texth dst))<br/> )<br/> (setq obj (vla-addtext acadspc ntextstring (vlax-3d-point ninsertpoint) texth))<br/> (stringsplit obj string dst acadspc)<br/> )<br/> )<br/> )</p> <p>递归算法,可以连续分解</p><p></p><p></p> 本帖最后由 作者 于 2008-5-21 14:17:39 编辑 <br /><br /> <p><strong><font face="Verdana" color="#61b713">多谢sailorcwx,高手出招。</font></strong></p><p><strong><font face="Verdana" color="#61b713">希望做一下优化:</font></strong></p><p><strong><font face="Verdana" color="#61b713">文字换行后样式为当前样式,能否改成与选择的文字样式和图层都相同;</font></strong></p><p><strong><font face="Verdana" color="#61b713">另外,只能处理文字为水平(0度)的文字,如果文字是90度换行后仍然0度,且不能处理倾斜角度的文字。能否与选择文字平行?</font></strong></p> <p>(defun c:strsplit(/ ACADSPC DST INDEX OBJ SLTSET STRING)<br/> (vl-load-com)<br/> (if (= (getvar "TILEMODE") 1)<br/> (setq acadspc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))<br/> (setq acadspc (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))<br/> )<br/> (setq dst (getdist "\n输入行间距: "))<br/> (if (null dst)(setq dst 0))<br/> (setq string " ")<br/> (while (setq sltset (ssget '((0 . "TEXT"))))<br/> (setq index 0)<br/> (repeat (sslength sltset)<br/> (setq obj (vlax-ename->vla-object (ssname sltset index)))<br/> (stringsplit obj string dst acadspc)<br/> (setq index (1+ index))<br/> )<br/> )<br/> )<br/> </p><p>(defun stringsplit(obj string dst acadspc / BPT BPT1 NINSERTPOINT NTEXTSTRING STRINDEX TEXTH TEXTSTRING TEXTANGLE TEXTCOLOR TEXTLAYER TEXTSCALE TEXTSTYLE)<br/> (setq bpt (vla-get-insertionpoint obj)<br/> bpt1 (vlax-safearray->list (vlax-variant-value bpt))<br/> texth (vla-get-height obj)<br/> )<br/> (vla-put-alignment obj acalignmentleft)<br/> (vla-put-insertionpoint obj bpt)<br/> (setq textstring (vla-get-textstring obj)<br/> textlayer (vla-get-layer obj)<br/> textcolor (vla-get-color obj)<br/> textangle (vla-get-rotation obj)<br/> textstyle (vla-get-stylename obj)<br/> textscale (vla-get-scalefactor obj)<br/> )<br/> (setq strindex (vl-string-search string textstring))<br/> (if strindex<br/> (progn<br/> (vla-put-textstring obj (substr textstring 1 strindex))<br/> (setq ntextstring (substr textstring (+ strindex 2))<br/> ninsertpoint (polar bpt1 (- textangle (* 0.5 pi)) (+ texth dst))<br/> )<br/> (setq obj (vla-addtext acadspc ntextstring (vlax-3d-point ninsertpoint) texth))<br/> (vla-put-layer obj textlayer)<br/> (vla-put-color obj textcolor)<br/> (vla-put-rotation obj textangle)<br/> (vla-put-stylename obj textstyle)<br/> (vla-put-scalefactor obj textscale) <br/> (stringsplit obj string dst acadspc)<br/> )<br/> )<br/> )<br/></p> <p><strong><font face="Verdana" color="#61b713">多谢sailorcwx,搞定了。</font></strong></p><p><strong><font face="Verdana" color="#61b713">向你学习。</font></strong></p> <p>别分成一个一个的单词呀,最好能指定首个句子的长度。</p> <p>能不能不用输入行距,自动排列</p>
页:
[1]