闭合多段线文这标注
(defun c:bz()(command "layer" "M" "bz" "C" "4" "" "LT" "CONTINUOUS" "" "");设置一个标注图层
(setq k 0)
(setq en(entget (car (entsel "\n选取要标注的多段线:"))));选取图元名
(setq pts nil);设置一个空表
;----------------------------------->读取图元名的坐标并将其添加到新的表
(foreach lst en
(if (= (car lst) 10);判断如果点表的第一个数为10就将坐标添加进新的列表
(setq pts (append pts (list (cdr lst))))))
;----------------------->标注选择的实体
(repeat (length pts);设置循环的次数为新建表的长度
(setq pt1(nth k pts))
(if (<= (length pts)(1+ k))
(setq pt2 (nth 0 pts))
(setq pt2(nth (1+ k) pts))
);判断如果表的长度小于运行次数+1的话那么pt2就取列表的一个坐标
(setq dis(/ (distance pt1 pt2) 1.00));取点之间的距离
(setq text (rtos dis 2 3));将距离转换成字符串
(setq rang(angle pt1 pt2));取点间的角度
(setq ang(* (/ rang pi) 180));转弧度角
(setq pos(/ dis 2.0));求点间距离一半的长度
(setq mid_pt (polar pt1 rang pos));求两点间的中点坐标
(setq mid_pt1(polar mid_pt (+ rang (/ pi 2)) 0.4));求文字标注点的坐标
(if
(and (> ang 90) (<= ang 270))
(setq ang(+ ang 180))
(setq mid_pt1(polarmid_pt1 (+ rang (/ (* pi 3) 2)) 0.25))
)
(command "text" "j" "c" mid_pt1 "0.3" ang text);标注文字
(setq k(1+ k))
)
(princ)
) 除了代码还应有一些必要的说明 谢谢楼主提供的分享
看看学习学习。
试试,好像只能将.....,哦,不是的。标注的数据还要慢慢看理解理解。
如果楼主有个说明,就好了
谢谢 标注多义线曲线段的长度不对, 很好的程序,就是文字的高度设置,有一点小问题,应该先查询一下当前的系统高度,就ok了!!
小问题。 看到楼主之前发过一个类似的,那个一运行cad就卡死,但是感觉比这个功能多些
页:
[1]