nyistjz 发表于 2023-4-15 21:57:02

标注图层名在线段右侧

本帖最后由 nyistjz 于 2023-4-15 21:58 编辑


给朋友做的一个小功能,希望能能更多人有用!

(defun c:tt(/ alist en h i pt ss str)
      (setq ss (ssget '((0 . "*POLYLINE,LINE"))))
      (setq i 0)
      (repeat (sslength ss)
                (setq en (ssname ss i) i (1+ i))
                (setq alist (entget en))
                (setq str (cdr (assoc 8 alist)))
                (setq h 800)
                (setq pt (vlax-curve-getendPoint (vlax-ename->vla-object en)))
                (setq pt (mapcar '(lambda(x y)(+ x y)) pt (list (* 0.5 h) (* -0.3 h) 0)))
                (entmake (list '(0 . "TEXT") (cons 1 str) (cons 8 str) (cons 10 pt) (cons 40 h) (cons 72 0)))
      )
)

kucha007 发表于 2023-4-15 23:09:26

本帖最后由 kucha007 于 2023-4-15 23:51 编辑

最近可能会用到,就做了点改动。
01-获取首尾端点坐标,判断那个才是右侧端点。
02-文字高度改为GetDist输入。
03-命令编组方便撤回


(defun C:TT (/ DOC SS i en LayNam StaPt EndPt TgtPt Hight)
(vl-load-com)
(setq DOC (vla-get-ActiveDOCument (vlax-get-acad-object)))
(vla-startundomark DOC)
    (if (setq SS (ssget '((0 . "*POLYLINE,LINE"))))
      (progn
      (initget (+ 1 2 4)) ;非空非零非负值
      (setq Hight (getdist "→请输入或量取文字高度:"))
      (repeat (setq i (sslength SS))
          (setq en (ssname SS (setq i (1- i))))
          (setq LayNam (cdr (assoc 8 (entget en))))
          (setq StaPt (vlax-curve-getstartPoint (vlax-ename->vla-object en))) ; 起点坐标
          (setq EndPt (vlax-curve-getendPoint (vlax-ename->vla-object en))) ; 终点坐标
          (setq TgtPt (if (>= (car StaPt) (car EndPt)) StaPt EndPt))
          (setq TgtPt (mapcar
                        '(lambda (x y) (+ x y))
                        TgtPt
                        (list (* 0.5 Hight) (* -0.3 Hight) 0)
                      )
          )
          (entmake
            (list
            '(0 . "TEXT")
            (cons 1 LayNam) ;文字内容
            (cons 8 LayNam) ;图层名称
            (cons 10 TgtPt) ;插入点
            (cons 40 Hight) ;文字高度
            )
          )
      )
      )
    )
(vla-endundomark DOC)
(princ)
)





alexmai 发表于 2023-4-23 13:34:48

画线表示不理解,跟论坛中“提取图层名字”,是相同用法

;;提取图层名字
(defun C:tcn (/ LST N PT)
(setvar "cecolor" "bylayer")
(setq LST (reverse (TABLE "LAYER")))
(setq PT (getpoint "文字插入點: ")
      N 0
)
(foreach NAME LST
    (entmake (list '(0 . "TEXT") (cons 8 NAME) '(100 . "AcDbText") (cons 10
                                                                         (list
                                                                               (car PT)
                                                                               (-
                                                                                  (cadr PT) N
                                                                               )
                                                                         )
                                                                   ) '
                   (40 . 6) (cons 1 NAME)
             )
    )
    (setq N (+ N 10.0))
)
(princ)
)

(defun TABLE (S / D R)
(while (setq D (tblnext S (null D)))
    (setq R (cons (cdr (assoc 2 D)) R))
)
)

nyistjz 发表于 2023-4-15 23:58:42

kucha007 发表于 2023-4-15 23:09
最近可能会用到,就做了点改动。
01-获取首尾端点坐标,判断那个才是右侧端点。
02-文字高度改为GetDist ...

lxl217114 发表于 2023-4-16 11:22:09

谢谢大佬分享实用功能

月下闲人 发表于 2023-4-16 20:51:43

kucha007 发表于 2023-4-15 23:09
最近可能会用到,就做了点改动。
01-获取首尾端点坐标,判断那个才是右侧端点。
02-文字高度改为GetDist ...

感谢大佬优化,输入命令选择对象后输入字高时出现乱码

ferious 发表于 2023-4-20 16:39:39

kucha007 发表于 2023-4-15 23:09
最近可能会用到,就做了点改动。
01-获取首尾端点坐标,判断那个才是右侧端点。
02-文字高度改为GetDist ...

你好,
首先,聊表谢意!谷雨快乐!

其次,附上GIF动图,直观,如有动图疑问,可查看下面链接教程;

Cad图块中线型比例修改 - AutoCAD工具插件 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
最后,能否将产生的文字放到公司标准的图层?

wlpkok 发表于 2023-4-20 20:54:09

ferious 发表于 2023-4-20 16:39
你好,
首先,聊表谢意!谷雨快乐!



求个这个lisp,上面那个码复制了不行

aggdqty 发表于 2023-4-20 22:50:45

本帖最后由 aggdqty 于 2023-4-20 22:56 编辑

kucha007 发表于 2023-4-15 23:09
最近可能会用到,就做了点改动。
01-获取首尾端点坐标,判断那个才是右侧端点。
02-文字高度改为GetDist ...
试了一下,很实用,谢谢

ferious 发表于 2023-4-21 08:15:17

wlpkok 发表于 2023-4-20 20:54
求个这个lisp,上面那个码复制了不行

(defun C:TTT4 (/ DOC SS i en LayNam StaPt EndPt TgtPt Hight)
(vl-load-com)
(setq DOC (vla-get-ActiveDOCument (vlax-get-acad-object)))
(vla-startundomark DOC)
    (if (setq SS (ssget '((0 . "*POLYLINE,LINE"))))
      (progn
      (initget (+ 1 2 4)) ;非空非零非负值
      (setq Hight (getdist "→请输入或量取文字高度:"))
      (repeat (setq i (sslength SS))
          (setq en (ssname SS (setq i (1- i))))
          (setq LayNam (cdr (assoc 8 (entget en))))
          (setq StaPt (vlax-curve-getstartPoint (vlax-ename->vla-object en))) ; 起点坐标
          (setq EndPt (vlax-curve-getendPoint (vlax-ename->vla-object en))) ; 终点坐标
          (setq TgtPt (if (>= (car StaPt) (car EndPt)) StaPt EndPt))
          (setq TgtPt (mapcar
                        '(lambda (x y) (+ x y))
                        TgtPt
                        (list (* 0.5 Hight) (* -0.3 Hight) 0)
                      )
          )
          (entmake
            (list
            '(0 . "TEXT")
            (cons 1 LayNam) ;文字内容
            (cons 8 LayNam) ;图层名称
            (cons 10 TgtPt) ;插入点
            (cons 40 Hight) ;文字高度
            )
          )
      )
      )
    )
(vla-endundomark DOC)
(princ)
)

wlpkok 发表于 2023-4-21 13:17:19

ferious 发表于 2023-4-21 08:15
(defun C:TTT4 (/ DOC SS i en LayNam StaPt EndPt TgtPt Hight)
(vl-load-com)
(setq DOC (vla-ge ...

:handshake感谢啊
页: [1] 2
查看完整版本: 标注图层名在线段右侧