找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3180|回复: 11

[LISP程序]:应网友要求把文字加删除线改为加双下划线

[复制链接]
发表于 2002-2-2 22:05:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
;;;應網友要求把文字加删除线改一下
;;;功能:文字加双下划线

  1. (defun C:MTT (/              HOLDECHO              HOLDWID HOLDOSMODE      HOLDCLAYER
  2.               SS      TEXTM   TEXTM1  M10     M40     M42     M43
  3.               M50     M71     PT1     PT2     PT3     PT4     PT5
  4.               PT6     PT7     PT8     PT9     RT      TB      DIST
  5.               DIST1   D              ANG
  6.              )
  7.   (command "_.UNDO" "BE")
  8.   (setq HOLDOSMODE (getvar "OSMODE"))
  9.   (setq HOLDCLAYER (getvar "CLAYER"))
  10.   (setq HOLDECHO (getvar "CMDECHO"))
  11.   (setq HOLDWID (getvar "PLINEWID"))
  12.   (setvar "CMDECHO" 0)
  13.   (setvar "OSMODE" 0)
  14.   (if (= (tblsearch "LAYER" "DIM") NIL)
  15.     (command "_.layer" "m"         "dim"           "c"             "cyan"
  16.              ""               "lt"         "continuous"             ""
  17.              ""
  18.             )
  19.   )
  20.   (setvar "CLAYER" HOLDCLAYER)
  21.   (while (= TEXTM1 NIL)
  22.     (setq TEXTM1 (car (nentsel "\n请点选文字加双下划线: ")))
  23.     (if        (/= TEXTM1 NIL)
  24.       (progn
  25.         (setq TEXTM (entget TEXTM1))
  26.         (if (and (/= "MTEXT" (cdr (assoc 0 TEXTM)))
  27.                  (/= "TEXT" (cdr (assoc 0 TEXTM)))
  28.             )
  29.           (progn
  30.             (setq TEXTM1 NIL)
  31.             (prompt (strcat "\n点选对象为" (cdr (assoc 0 TEXTM))))
  32.           )
  33.         )
  34.       )
  35.     )
  36.   )
  37.   (cond
  38.     ((= "MTEXT" (cdr (assoc 0 TEXTM)))
  39.      (command "_.ucs" "W")
  40.      (setq M10 (cdr (assoc 10 TEXTM)))
  41.      (setq M40 (cdr (assoc 40 TEXTM)))
  42.      (setq M42 (cdr (assoc 42 TEXTM)))
  43.      (setq M43 (cdr (assoc 43 TEXTM)))
  44.      (setq M50 (cdr (assoc 50 TEXTM)))
  45.      (setq M71 (cdr (assoc 71 TEXTM)))
  46.      (setq PT9 (list (+ (car M10) M42) (cadr M10) (caddr M10)))
  47.      (setq PT3 (list (car PT9) (+ (cadr PT9) M43) (caddr PT9)))
  48.      (setq PT1 (list (car M10) (+ (cadr M10) M43) (caddr M10)))
  49.      (setq PT8 (list (+ (car M10) (/ M42 2)) (cadr M10) (caddr M10)))
  50.      (setq PT4 (list (car M10) (+ (cadr M10) (/ M43 2)) (caddr M10)))
  51.      (setq PT2 (list (+ (car M10) (/ M42 2))
  52.                      (+ (cadr M10) M43)
  53.                      (caddr M10)
  54.                )
  55.      )
  56.      (setq PT6 (list (+ (car M10) M42)
  57.                      (+ (cadr M10) (/ M43 2))
  58.                      (caddr M10)
  59.                )
  60.      )
  61.      (setq SS (ssadd))
  62.      (setq ANG (angle PT1 M10))
  63.      (setq M101 (polar M10 (+ ANG pi) (* M40 0.05)))
  64.      ;;(setq M101 (polar M10 ANG (* M40 0.05)))那是第一点与字距离方向不同
  65.      ;;计算第一点与字距离(* M40 0.05),其实对每种字体会有误差,可自行修正
  66.      (setq PT91 (polar PT9 (+ ANG pi) (* M40 0.05)))
  67.      ;;(setq PT91 (polar PT9 ANG (* M40 0.05)))那是第一点与字距离方向不同
  68.      ;;计算第二点与字距离(* M40 0.05),其实对每种字体会有误差,可自行修正
  69.      (command "_.PLINE"
  70.               M101
  71.               "W"
  72.               (* M40 (/ 3 40.0))
  73.               ""
  74.               PT91
  75.               "W"
  76.               0
  77.               ""
  78.               ""
  79.      )
  80.      ;;计算线宽(* M40 (/ 3 40.0))
  81.      (ssadd (entlast) SS)
  82.      (command "_.MOVE"
  83.               (entlast)
  84.               ""
  85.               "0,0"
  86.               (polar '(0 0) ANG (* M40 (/ 3 16.0)))
  87.               ;;第一条线与字的移动距离,M40=字高
  88.      )
  89.      (command "_.LINE" M101 PT91 "")
  90.      (command "_.MOVE"
  91.               (entlast)
  92.               ""
  93.               "0,0"
  94.               (polar '(0 0) ANG (* M40 (/ 26 80.0)))
  95.               ;;第二条线与字的移动距离,M40=字高
  96.      )
  97.      (ssadd (entlast) SS)
  98.      (setq PT5 (inters M10 PT3 PT9 PT1))
  99.      (cond
  100.        ((= 1 M71) (command "._move" SS "" PT1 M10)) ;1 = Top left
  101.        ((= 2 M71) (command "._move" SS "" PT2 M10)) ;2 = Top center
  102.        ((= 3 M71) (command "._move" SS "" PT3 M10)) ;3 = Top right
  103.        ((= 4 M71) (command "._move" SS "" PT4 M10)) ;4 = Middle left
  104.        ((= 5 M71) (command "._move" SS "" PT5 M10)) ;5 = Middle center
  105.        ((= 6 M71) (command "._move" SS "" PT6 M10)) ;6 = Middle right
  106. ;;;    ((= 7 M71) (command "._move" SS "" M10 M10)) ;7 = Bottom left
  107.        ((= 8 M71) (command "._move" SS "" PT8 M10)) ;8 = Bottom center
  108.        ((= 9 M71) (command "._move" SS "" PT9 M10)) ;9 = Bottom right
  109.      )
  110.      (command "_.ROTATE" SS "" M10 (/ (* 180 M50) pi))
  111.      (command "_.CHANGE" SS "" "P" "LA" "DIM" "C" 6 "")
  112.      ;;把线移至DIM层,COLOR为紫色
  113.      (setq DIST (* M40 1.66))
  114.      (setq DIST1 (fix (/ M43 DIST)))
  115.      (setq D 1)
  116.      (repeat DIST1
  117.        (command        "_.COPY"
  118.                 SS
  119.                 ""
  120.                 M10
  121.                 (polar M10 (+ M50 (/ pi 2)) (* DIST D))
  122.        )
  123.        (setq D (+ 1 D))
  124.      )
  125.      (command "_.ucs" "p")
  126.     )
  127.     ((= "TEXT" (cdr (assoc 0 TEXTM)))
  128.      (command "_.ucs" "Object" TEXTM1)
  129.      (setq TB (textbox (list (cons -1 TEXTM1))))
  130.      (setq PT1 (car TB)
  131.            PT2 (cadr TB)
  132.            PT3 (list (car PT1) (cadr PT2))
  133.            PT4 (list (car PT2) (cadr PT1))
  134.      )
  135.      (setq DIST (cdr (assoc 40 TEXTM)))
  136.      ;;取出文字高度
  137.      (setq ANG (angle PT3 PT1))
  138.      (setq SS (ssadd))
  139.      (setq PT1 (polar PT1 (+ ANG pi) (* DIST 0.05)))
  140.      ;;(setq PT1 (polar PT1 ANG (* DIST 0.05)))那是第一点与字距离方向不同
  141.      ;;计算第一点与字距离(* DIST 0.05),其实对每种字体会有误差,可自行修正
  142.      (setq PT4 (polar PT4 (+ ANG pi) (* DIST 0.05)))
  143.      ;;(setq PT4 (polar PT4 ANG (* DIST 0.05)))那是第一点与字距离方向不同
  144.      ;;计算第二点与字距离(* DIST 0.05),其实对每种字体会有误差,可自行修正
  145.      (command "_.PLINE"
  146.               PT1
  147.               "W"
  148.               (* DIST (/ 3 40.0))
  149.               ""
  150.               PT4
  151.               "W"
  152.               0
  153.               ""
  154.               ""
  155.      )
  156.      ;;计算线宽(* DIST (/ 3 40.0))
  157.      (ssadd (entlast) SS)
  158.      (command "_.MOVE"
  159.               (entlast)
  160.               ""
  161.               "0,0"
  162.               (polar '(0 0) ANG (* DIST (/ 3 16.0)))
  163.               ;;第一条线与字的移动距离,DIST=字高
  164.      )
  165.      (command "_.LINE" PT1 PT4 "")
  166.      (command "_.MOVE"
  167.               (entlast)
  168.               ""
  169.               "0,0"
  170.               (polar '(0 0) ANG (* DIST (/ 26 80.0)))
  171.               ;;第二条线与字的移动距离,DIST=字高
  172.      )
  173.      (ssadd (entlast) SS)
  174.      (command "_.CHANGE" SS "" "P" "LA" "DIM" "C" 6 "")
  175.      ;;把线移至DIM层,COLOR为紫色
  176.      (command "_.ucs" "p")
  177.     )
  178.   )
  179.   (setvar "PLINEWID" HOLDWID)
  180.   (setvar "OSMODE" HOLDOSMODE)
  181.   (setvar "CMDECHO" HOLDECHO)
  182.   (command "_.UNDO" "END")
  183.   (princ)
  184. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-2-2 22:38:29 | 显示全部楼层
用textbox能简化些....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-2 23:25:40 | 显示全部楼层
把%%U加到文字的前面即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-2-3 13:42:11 | 显示全部楼层
LUCAS兄,没想到这么快就改好了,还加了注释,太让小弟感动了...
:2 :2 :2 :2
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 35个

财富等级: 招财进宝

发表于 2009-5-31 15:21:23 | 显示全部楼层
楼主好东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-7-14 14:34:54 | 显示全部楼层
以前我都是用多线手画的。谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-7-26 16:46:32 | 显示全部楼层
我想要,给我一份
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-12-21 11:02:23 | 显示全部楼层
谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

发表于 2009-12-27 14:14:38 | 显示全部楼层
程序比较有用。如果程序能做到添加下划线后文字长度改变了,添加的下划线自动改变长度那就更好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-12-27 15:55:57 | 显示全部楼层
每次只能選一行,能否一次選多行。謝謝!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2018-2-26 09:41:20 | 显示全部楼层
很好用! 不知道怎么修改线宽这些,想把线宽,线间距改为固定的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-3-26 00:40:39 | 显示全部楼层
好用哈,想知道如何是下划线左右两边凸出去对齐点50呢,该怎么设置呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:52 , Processed in 0.247451 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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