本帖最后由 tranney 于 2014-12-3 02:20 编辑
我是设备专业的,经常从建筑调图,发现每个人的图名样式都不一样,所以一张图里面有很多种图名样式,前几天看到有人发的代码,我也根据我的需要修改了一下,谁知道,有点问题,请大伙帮我看看,先谢谢了
 - ;;;;;;***************************文本加双下划线
- (defun c:fe (/ sc box ent ent1 h nent1 nent2 np1 np2
- np3 np4 np5 old_lay p p1x p1y p2x p2y
- px py r snap test
- )
- (if (= (tblsearch "style" "菜菜字体") nil)
- (command "_.style" "菜菜字体" "txt,hztxt" "0" ".7" "" "" "" "")
- )
- (if (null sc)
- (SETQ sc (GETVAR "DIMSCALE")))
- (setq ent1 (car (entsel "\n选择文本:")))
- (setvar "cmdecho" 0)
- ;;;; 关闭命令响应
- (command ".UNDO" "BE") ; 设置undo起点
- (setq snap (getvar "osmode"))
- (setvar "osmode" 0)
- ;;;; 关闭捕捉
- (setq old_lay (getvar "clayer")) ; 保存当前图层
- (setq ent (entget ent1))
- (if (= "MTEXT" (cdr (assoc 0 ent))) ; 如选多行文本,则转化为单行文本
- (progn
- (command ".EXPLODE" ent1)
- (setq ent1 (entlast))
- (setq ent (entget ent1))
- )
- (princ)
- )
-
- (entmod (list (assoc -1 ent)
- (cons 7 "菜菜字体")
- (cons 8 "0-标题文字")
- (cons 40 600)
- (cons 41 0.8)
- ;(cons 50 0)
- (cons 62 7)
- (cons 370 5)
- )
- )
- ;关键获取不了更新的图元参数
- (setq p (cdr (assoc 10 ent)) ; 文本基点坐标
- r (cdr (assoc 50 ent)) ; 文本旋转角度
- test (cdr (assoc 8 ent)) ; 文本所在图层
- )
- (setq box (textbox ent)) ; 文本框坐标
- (setq p1x (car (car box)) ; 文本左下角X坐标
- p1y (car (cdr (car box)))
- p2x (car (car (cdr box))) ; 文本右上角X坐标
- p2y (car (cdr (car (cdr box))))
- px (car p)
- py (car (cdr p))
- )
- ;;;第一条线段左端点坐标
- (setq np1 (list (- px (* sc 0.8)) (- py (* sc 1.5)) 0.0))
- ;;;第一条线段右端点坐标
- (setq np2 (list (+ p2x (+ px (* sc 0.8))) (- py (* sc 1.5)) 0.0))
- ;;;; 第二条线段左端点坐标
- (setq np3 (list (- px (* sc 0.8)) (- py (* sc 2.5)) 0.0))
- ;;;; 第二条线段右端点坐标
- (setq np4 (list (+ p2x (+ px (* sc 0.8))) (- py (* sc 2.5)) 0.0))
- ;;;; 第一条线段右端点坐标偏移一点点写比例
- (setq np5 (list (+ p2x (+ px (* sc 2.8))) (- py (* sc 1.5)) 0.0))
- (SETVAR "CLAYER" test) ; 文本所在图层设为当前图层
- (command "pline" np1 "w" (* sc 0.8) (* sc 0.8) np2 "")
- (setq nent1 (entlast))
- (command "text" "s" "菜菜字体" "J" "BL" np5 "400" 0 "1:100")
- (setq nent3 (entlast))
- (command "line" np3 np4 "") ; 第二条下划线
- (setq nent2 (entlast))
- (if (/= r 0.0)
- ;;;; 如果文本不水平则旋转下划线角度
- (progn
- (command "rotate" nent1 "" p (* 180.0 (/ r pi)))
- (command "rotate" nent2 "" p (* 180.0 (/ r pi)))
- (command "rotate" nent3 "" p (* 180.0 (/ r pi)))
- )
- )
- (setvar "osmode" snap)
- (setvar "clayer" old_lay) ; 恢复当前图层
- (command ".UNDO" "E")
- (princ)
- )
|