雨的节奏 发表于 2019-7-12 11:15:43

标注对齐源码



(defun c:dag (/ ss ptx i endata pt13 pt14 ang vlen)
(princ "\n选择要对齐的标注")
(setq ss (ssget '((0 . "DIMENSION"))))
;;需要计算一下哪种标注最多
;;排除少量的,用最多的那种
(while (= (car (grread 1)) 5)
         (setq ptx (cadr (grread 1)))
         (setq i 0)
         (repeat (sslength ss)
               (setq endata (entget (ssname ss i)))
               (entmod (subst (cons 10 ptx) (assoc 10 endata) endata ))
       (setq i (1+ i))
   ); end repeat
);end while
;;下面来指定引线起点
(setq ptx (getpoint "\n指定标注引线起点") i 0)
(repeat (sslength ss)
      (setq endata (entget (ssname ss i)))

       (setq pt13 (cdr (assoc 13 endata))
       pt14 (cdr (assoc 14 endata)))      
      (if (= 33 (cdr (assoc 70 endata))) (setq ang (angle pt13 pt14)) (setqang(cdr (assoc 50 endata))))
      (entmake (list '(0 . "LINE") (cons 10 ptx) (cons 11 (polar ptx ang 100))))
      (setq vlen (vlax-ename->vla-object (entlast)))
      ;;求出跟线最近的点
       (setqendata (subst (cons 13(vlax-curve-getclosestpointto vlen pt13 T)) (assoc 13 endata) endata)
            endata (subst (cons 14(vlax-curve-getclosestpointto vlen pt14 T)) (assoc 14 endata) endata))      
      (vla-erase vlen)
   (entmod endata)
   (setq i (1+ i))
   
);end repeat
   
)

forever111 发表于 2019-8-16 20:44:46

本帖最后由 forever111 于 2019-8-16 21:19 编辑

使用时跟演示的好像不太一样,所以简单修改了一下,望指教。
(defun c:dag (/ ss ptx i endata pt13 pt14 ang vlen)
(princ "\n选择要对齐的标注")
(setq ss (ssget '((0 . "DIMENSION"))))
;;需要计算一下哪种标注最多
;;排除少量的,用最多的那种
(while (= (car(setq poi(grread 1))) 5)
         (setq ptx (cadr poi))
      (setq i 0)
      (repeat (sslength ss)
      (setq endata (entget (ssname ss i)))
      (entmod (subst (cons 10 ptx) (assoc 10 endata) endata ))
      (setq i (1+ i))
      ))
;;下面来指定引线起点
(setq ptx (getpoint "\n指定标注引线起点"))
(setq i 0)
(repeat (sslength ss)
      (setq endata (entget (ssname ss i)))
       (setq pt13 (cdr (assoc 13 endata))
             pt14 (cdr (assoc 14 endata)))      
      (if (= 33 (cdr (assoc 70 endata))) (setq ang (angle pt13 pt14)) (setqang(cdr (assoc 50 endata))))
      (entmake (list '(0 . "LINE") (cons 10 ptx) (cons 11 (polar ptx ang 100))))
      (setq vlen (vlax-ename->vla-object (entlast)))
      ;;求出跟线最近的点
       (setqendata (subst (cons 13(vlax-curve-getclosestpointto vlen pt13 T)) (assoc 13 endata) endata)
            endata (subst (cons 14(vlax-curve-getclosestpointto vlen pt14 T)) (assoc 14 endata) endata))      
      (vla-erase vlen)
   (entmod endata)
   (setq i (1+ i))
   
);end repeat
   
)

我用的是2019版本的。。

1028695446 发表于 2019-8-1 23:49:41

本帖最后由 1028695446 于 2019-8-1 23:57 编辑

雨的节奏 发表于 2019-7-12 11:20
难的地方应该在这里、、、
试了下,角度标注对齐需完善

cghdy 发表于 2019-7-13 13:17:03

有个bag:当只挪一个标注的时候提示“ 错误: DXF 组不正确: (10 . 32)”。

雨的节奏 发表于 2019-7-12 11:20:44



难的地方应该在这里、、、

yoyoho 发表于 2019-7-12 12:15:46

谢谢!雨的节奏分享程序!!!!

taoyi0727 发表于 2019-7-12 12:24:18

比我写的好我写了好长才写出来

sunny_8848 发表于 2019-7-12 13:27:03

程序很实用,多谢楼主分享

雨的节奏 发表于 2019-7-12 21:01:46

{:1_1:}
源码都 有了,需要别的细节可以自己修改

669423907 发表于 2019-7-13 11:29:03

谢谢楼主分享好程序

cghdy 发表于 2019-7-13 13:12:28

贱人工具箱也有,不能动态,但是好像更稳定。

paulpipi 发表于 2019-7-16 07:43:51


程序很实用,多谢楼主分享
页: [1] 2 3
查看完整版本: 标注对齐源码