tranney 发表于 2014-12-3 02:15:14

求高手帮忙看看代码,可能是textbox的问题,也可能是entmod的问题

本帖最后由 tranney 于 2014-12-3 02:20 编辑

我是设备专业的,经常从建筑调图,发现每个人的图名样式都不一样,所以一张图里面有很多种图名样式,前几天看到有人发的代码,我也根据我的需要修改了一下,谁知道,有点问题,请大伙帮我看看,先谢谢了


;;;;;;***************************文本加双下划线
(defun c:fe (/   scbox   ent   ent1h   nent1 nent2 np1 np2
       np3 np4 np5   old_lay   p   p1x   p1y   p2x   p2y
       px   py   r    snaptest
      )
(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)
    )
)
;关键获取不了更新的图元参数

(setqp    (cdr (assoc 10 ent)); 文本基点坐标
      r    (cdr (assoc 50 ent)); 文本旋转角度
      test (cdr (assoc 8 ent)); 文本所在图层
)

(setq box (textbox ent))    ; 文本框坐标
(setqp1x (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)
)

ZZXXQQ 发表于 2014-12-3 08:19:14

;;;;;;***************************文本加双下划线
(defun c:fe (/   scbox   ent   ent1h   nent1 nent2 np1 np2
       np3 np4 np5   old_lay   p   p1x   p1y   p2x   p2y
       px   py   r    snaptest
      )
(setvar "CMDECHO" 0)
;;;; 关闭命令响应
(command ".UNDO" "BE")    ; 设置undo起点
(setq snap (getvar "OSMODE"))
(setvar "OSMODE" 0)
;;;; 关闭捕捉
(setq old_lay (getvar "clayer")); 保存当前图层
(if (= (tblsearch "style" "菜菜字体") nil)
    (command "_.style" "菜菜字体""txt,hztxt" "0"".7" """" "" "")
)
(if (null sc) (setq sc(getvar "DIMSCALE")))
(setq ent1 (car (entsel "\n选择文本:")))
(setq ent (entget ent1))
(if (= "MTEXT" (cdr (assoc 0 ent))) (progn; 如选多行文本,则转化为单行文本
    (command ".EXPLODE" ent1)
    (setq ent1 (entlast))
    (setq ent (entget ent1))
))
(setq ent (subst (cons 7 "菜菜字体") (assoc 7 ent) ent))
(setq ent (subst (cons 8 "0-标题文字") (assoc 8 ent) ent))
(setq ent (subst (cons 40 600) (assoc 40 ent) ent))
(setq ent (subst (cons 41 0.8) (assoc 41 ent) ent))
(if (assoc 62 ent)
   (setq ent (subst (cons 62 7) (assoc 62 ent) ent))
   (setq ent (append ent (list(cons 62 7))))
)
(entmod (subst (cons 370 5) (assoc 370 ent) ent))
;关键获取不了更新的图元参数
(setqp    (cdr (assoc 10 ent)); 文本基点坐标
      r    (cdr (assoc 50 ent)); 文本旋转角度
      test (cdr (assoc 8 ent)); 文本所在图层
)
(setq box (textbox ent))    ; 文本框坐标
(setqp1x (caar box)    ; 文本左下角X坐标
p1y (cadar box)
p2x (caadr box); 文本右上角X坐标
p2y (cadadr box)
px(car p)
py(cadr 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" "菜菜字体" "BL" np5 "400" 0 "1:100")
(setq nent3 (entlast))
(command "line" np3 np4 "")    ; 第二条下划线
(setq nent2 (entlast))
(if (/= r 0.0) ;;;; 如果文本不水平则旋转下划线角度
    (command "rotate" nent1 nent2 nent3 "" p (/ (* r 180.0) pi))
)
(setvar "OSMODE" snap)
(setvar "CLAYER" old_lay)    ; 恢复当前图层
(command ".UNDO" "E")
(princ)
)

tranney 发表于 2014-12-3 08:35:10

谢谢z超级版主,我昨天弄了一夜都没弄好呢,哈哈,真的非常感谢,你起得真早啊
页: [1]
查看完整版本: 求高手帮忙看看代码,可能是textbox的问题,也可能是entmod的问题