yjpzc 发表于 2011-1-12 14:13:12

闭合多段线文这标注

(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)
)

xiaxiang 发表于 2011-1-12 14:56:49

除了代码还应有一些必要的说明

461045462 发表于 2011-3-29 07:01:01

谢谢楼主提供的分享
看看学习学习。
试试,好像只能将.....,哦,不是的。标注的数据还要慢慢看理解理解。
如果楼主有个说明,就好了
谢谢

fanqinwei 发表于 2012-4-9 23:48:36

标注多义线曲线段的长度不对,

vlisp2012 发表于 2012-4-10 13:31:30

很好的程序,就是文字的高度设置,有一点小问题,应该先查询一下当前的系统高度,就ok了!!
小问题。

arches9 发表于 2016-3-13 03:44:24

看到楼主之前发过一个类似的,那个一运行cad就卡死,但是感觉比这个功能多些
页: [1]
查看完整版本: 闭合多段线文这标注