明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2897|回复: 8

[求助]把文字从空格处断开自动变2行,行距由用户输入

[复制链接]
发表于 2008-5-18 11:37:00 | 显示全部楼层 |阅读模式
请高手编个程序,把文字从空格处断开自动变2行,如"KL2-22(11) 200X700",括号后为空格,从空格处把这行文字断开成2行,行距由用户输入。
 楼主| 发表于 2008-5-19 21:45:00 | 显示全部楼层

自己顶一下.

有高手编写了断开文字换行的程序,但不能连续选择.

而且不能指定行距.

发表于 2008-5-20 23:42:00 | 显示全部楼层

(defun c:strsplit(/ ACADSPC DST INDEX OBJ SLTSET STRING)
  (vl-load-com)
  (if (= (getvar "TILEMODE") 1)
    (setq acadspc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
    (setq acadspc (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))
    )
  (setq dst (getdist "\n输入行间距: "))
  (if (null dst)(setq dst 0))
  (while (and (setq sltset (ssget '((0 . "TEXT")))) (/= (setq string (getstring 1 "\n输入分割字符: ")) ""))
    (setq index 0)
    (repeat (sslength sltset)
      (setq obj (vlax-ename->vla-object (ssname sltset index)))
      (stringsplit obj string dst acadspc)
      (setq index (1+ index))
      )
    )
  )
 

(defun stringsplit(obj string dst acadspc / BPT BPT1 NINSERTPOINT NTEXTSTRING STRINDEX TEXTH TEXTSTRING)
  (setq bpt (vla-get-insertionpoint obj)
 bpt1 (vlax-safearray->list (vlax-variant-value bpt))
 texth (vla-get-height obj)
 )
  (vla-put-alignment obj acalignmentleft)
  (vla-put-insertionpoint obj bpt)
  (setq textstring (vla-get-textstring obj))
  (setq strindex (vl-string-search string textstring))
  (if strindex
    (progn
      (vla-put-textstring obj (substr textstring 1 strindex))
      (setq ntextstring (substr textstring (+ strindex 2))
     ninsertpoint (polar bpt1 (* 1.5 pi) (+ texth dst))
     )
      (setq obj (vla-addtext acadspc ntextstring (vlax-3d-point ninsertpoint) texth))
      (stringsplit obj string dst acadspc)
      )
    )
  )

发表于 2008-5-20 23:44:00 | 显示全部楼层

递归算法,可以连续分解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2008-5-21 12:04:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-21 14:17:39 编辑

多谢sailorcwx,高手出招。

希望做一下优化:

文字换行后样式为当前样式,能否改成与选择的文字样式和图层都相同;

另外,只能处理文字为水平(0度)的文字,如果文字是90度换行后仍然0度,且不能处理倾斜角度的文字。能否与选择文字平行?

发表于 2008-5-21 15:32:00 | 显示全部楼层

(defun c:strsplit(/ ACADSPC DST INDEX OBJ SLTSET STRING)
  (vl-load-com)
  (if (= (getvar "TILEMODE") 1)
    (setq acadspc (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
    (setq acadspc (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))))
    )
  (setq dst (getdist "\n输入行间距: "))
  (if (null dst)(setq dst 0))
  (setq string " ")
  (while (setq sltset (ssget '((0 . "TEXT"))))
    (setq index 0)
    (repeat (sslength sltset)
      (setq obj (vlax-ename->vla-object (ssname sltset index)))
      (stringsplit obj string dst acadspc)
      (setq index (1+ index))
      )
    )
  )
 

(defun stringsplit(obj string dst acadspc / BPT BPT1 NINSERTPOINT NTEXTSTRING STRINDEX TEXTH TEXTSTRING TEXTANGLE TEXTCOLOR TEXTLAYER TEXTSCALE TEXTSTYLE)
  (setq bpt (vla-get-insertionpoint obj)
 bpt1 (vlax-safearray->list (vlax-variant-value bpt))
 texth (vla-get-height obj)
 )
  (vla-put-alignment obj acalignmentleft)
  (vla-put-insertionpoint obj bpt)
  (setq textstring (vla-get-textstring obj)
 textlayer (vla-get-layer obj)
 textcolor (vla-get-color obj)
 textangle (vla-get-rotation obj)
 textstyle (vla-get-stylename obj)
 textscale (vla-get-scalefactor obj)
 )
  (setq strindex (vl-string-search string textstring))
  (if strindex
    (progn
      (vla-put-textstring obj (substr textstring 1 strindex))
      (setq ntextstring (substr textstring (+ strindex 2))
     ninsertpoint (polar bpt1 (- textangle (* 0.5 pi)) (+ texth dst))
     )
      (setq obj (vla-addtext acadspc ntextstring (vlax-3d-point ninsertpoint) texth))
      (vla-put-layer obj textlayer)
      (vla-put-color obj textcolor)
      (vla-put-rotation obj textangle)
      (vla-put-stylename obj textstyle)
      (vla-put-scalefactor obj textscale)     
      (stringsplit obj string dst acadspc)
      )
    )
  )

 楼主| 发表于 2008-5-21 18:01:00 | 显示全部楼层

多谢sailorcwx,搞定了。

向你学习。

发表于 2008-6-17 17:52:00 | 显示全部楼层

别分成一个一个的单词呀,最好能指定首个句子的长度。

发表于 2008-7-18 13:31:00 | 显示全部楼层

能不能不用输入行距,自动排列

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-27 23:14 , Processed in 0.201332 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表