标注对齐源码
(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 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:57 编辑
雨的节奏 发表于 2019-7-12 11:20
难的地方应该在这里、、、
试了下,角度标注对齐需完善 有个bag:当只挪一个标注的时候提示“ 错误: DXF 组不正确: (10 . 32)”。
难的地方应该在这里、、、
谢谢!雨的节奏分享程序!!!! 比我写的好我写了好长才写出来 程序很实用,多谢楼主分享 {:1_1:}
源码都 有了,需要别的细节可以自己修改 谢谢楼主分享好程序 贱人工具箱也有,不能动态,但是好像更稳定。
程序很实用,多谢楼主分享