明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: tyrasv

[提问] 文字加下划线! 求专家

[复制链接]
 楼主| 发表于 2015-1-5 00:57 | 显示全部楼层
kwok 发表于 2014-12-31 15:00
用6楼的改了一下,其实楼主也可以自己改一下的,自己改才是适合自己想要的效果:
不支持mtext,是mtext要先 ...

用了一下,感觉不错,选中很多文字也不回出现乱连问题.
回复

使用道具 举报

发表于 2015-1-5 08:55 | 显示全部楼层
试试这个:;;; ********下划线
(defun c:tt ()
  (setq sh (getvar "peditaccept"))
  (setvar "peditaccept" 0)
  (setq osm (getvar "osmode"))
  (setvar "osmode" 0)
  (setq mclayer (getvar "CLAYER"))
  (setvar "CLAYER" "0")
  (setq ss1 (ssget '((0 . "*TEXT"))))
  (if (null ss1)
    (progn
      (princ "\n没有文本实体被选择!")
      (exit)
    )                                       ; end progn
  )                                       ; end if
  (setq n (sslength ss1))
  (if (not (= nil n))                       ; no select objects
    (progn
    (setq i 0)
    (while (< i n)
        (setq txtentname (ssname ss1 i))
        (setq txtentdata (entget txtentname))
        (setq i (+ i 1))
        (setq txtenttype (cdr (assoc 0 txtentdata))) ; get entity's name:
                                       ; "text" or "mtext"
        (if (= txtenttype "TEXT")      ; this object is simple line text
          (progn
            (vl-cmdf "ucs" "Object" txtentname)        ; 定义用户坐标系到文本的方?
            (setq tbox (textbox (list (car txtentdata))) ; must change to a list
                      pt_bl (car tbox)     ; left bottom point coords
                      pttr (cadr tbox)     ; right top point coords
                      pttl (list (car pt_bl) (cadr pttr))
                      pt_br (list (car pttr) (cadr pt_bl))
            )                               ; end setq
            (setq roundspace (* 0.2 (distance pt_bl pttl)))
            (setq pt_bl (polar pt_bl pi (* roundspace 2)))
            (setq pt_bl (polar pt_bl (* pi 1.5) roundspace))
            (setq pt_br (polar pt_br 0.0 (* roundspace 2)))
            (setq pt_br (polar pt_br (* pi 1.5) roundspace)) ;
            (command "pline" pt_bl "w" (* roundspace 0.25) "" pt_br "" "")
            (command "CHPROP" (entlast) "" "C" "BYBlock" "")
            (command "pline" (polar pt_bl (* pi 1.5) (* roundspace 0.6)) "w" 0 "" (polar pt_br (* pi 1.5) (* roundspace 0.6)) "")
         (command "CHPROP" (entlast) "" "C" "BYBlock" "")               
            (setvar "peditaccept" sh)
            (vl-cmdf "ucs" "p" "")
          )                               ; end progn
          (progn
            (vl-cmdf "_.JustifyText" txtentname "" "TL") ; 处理为对对齐模式.
            (setq txtentdata (entget txtentname))
            (setq pttl (cdr (assoc 10 txtentdata))
                  xwidth (cdr (assoc 42 txtentdata))
                  xheight (cdr (assoc 43 txtentdata))
                  xangle (cdr (assoc 50 txtentdata))
                  pt_tc (polar pttl xangle (* xwidth 0.5))
                  pttr (polar pttl xangle xwidth)
                  pt_bl (polar pttl (- xangle (/ pi 2.0)) xheight)
                  pt_bc (polar pt_bl xangle (* xwidth 0.5))
                  pt_br (polar pt_bl xangle xwidth)
                  pt_mc (polar pt_bl (angle pt_bl pttr) (/
                                                           (distance pt_bl
                                                                     pttr
                                                           ) 2.0 ; end
                                                        ) ; end angle
                        )               ; end polar
            )                               ; end setq
            (setq roundspace (* 0.2 (distance pt_bl pttl)))
            (setq xangle (cdr (assoc 50 txtentdata)))
            (setq pt_bl (polar pt_bl xangle (- roundspace)))
            (setq pt_bl (polar pt_bl (+ xangle (/ pi 2.0)) (- roundspace)))
            (setq pt_br (polar pt_br xangle roundspace))
            (setq pt_br (polar pt_br (+ xangle (/ pi 2.0)) (- roundspace)))
            (setq pttl (polar pttl xangle (- roundspace)))
            (setq pttl (polar pttl (+ xangle (/ pi 2.0)) roundspace))
            (setq pttr (polar pttr xangle roundspace))
            (setq pttr (polar pttr (+ xangle (/ pi 2.0)) roundspace)) ;
            (command "pline" pt_bl "w" (* roundspace 0.25) "" pt_br "")
            (command "CHPROP" (entlast) "" "C" "BYBlock" "")
            (command "pline" (polar pt_bl (* pi 1.5) (* roundspace 0.6)) "w" 0 "" (polar pt_br (* pi 1.5) (* roundspace 0.6)) "")
         (command "CHPROP" (entlast) "" "C" "BYBlock" "")                               ; end command
            (setvar "peditaccept" sh)
          )                               ; end progn
        )                               ; end if
      )                                       ; end while
    )                                       ; end progn
  )                                       ; end if
  (setvar "CLAYER" mclayer)
  (vl-cmdf "ucs" "W" "")
  (setvar "osmode" osm)
  (princ)
)
回复

使用道具 举报

 楼主| 发表于 2015-1-5 17:47 | 显示全部楼层
成仔 发表于 2015-1-5 08:55
试试这个:;;; ********下划线
(defun c:tt ()
  (setq sh (getvar "peditaccept"))

感觉不错,可是我只要一条下滑线就行了,你这个好像是生成了2条线,一条粗的和一条细的。
回复

使用道具 举报

发表于 2018-10-29 16:00 | 显示全部楼层
非常感谢22楼   要找的就是加文武线的办法
回复

使用道具 举报

发表于 2018-10-30 03:29 | 显示全部楼层
建议ACAD自带动能,只限纯字母下划线长短自动随字体大小

此简单程序仅供参考
  1. ;切换字体下划线
  2. (defun c:tt (/ s e o )
  3.   (while (setq e (car (entsel "\n选择文字或按任何键退出 ")))
  4.   (setq o (vlax-ename->vla-object e))
  5.   (vlax-property-available-p o 'TextString)
  6.   (setq s (vla-get-TextString o))
  7.   (vla-put-TextString o (if (wcmatch s "*%%u*")(vl-string-subst "" "%%u" s)(strcat "%%u" s))))
  8.   (princ)
  9.   )
回复

使用道具 举报

发表于 2018-10-30 10:10 | 显示全部楼层
非常感谢22楼,要找的就是这样加线的办法
回复

使用道具 举报

发表于 2022-7-11 12:40 | 显示全部楼层

这个怎么做到的?能分享下吗
回复

使用道具 举报

发表于 2023-11-13 09:37 | 显示全部楼层
成仔 发表于 2015-1-5 08:55
试试这个:;;; ********下划线
(defun c:tt ()
  (setq sh (getvar "peditaccept"))

66666666666666
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 07:38 , Processed in 0.367713 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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