转角/对齐标注对齐--没写过,近几天用上刚写的分享
本帖最后由 wzg356 于 2023-8-22 11:19 编辑很少用,临时写的,需要其他控制的自己补充。
先选要对齐的一组转角/对齐标注,再指定对齐的基准(其中一个标注)
(defun perppp (P p1 p2);垂足
(inters p1 p2 p(polar p(+ (* 0.5 pi)(angle p1 p2))10.0)nil)
)
;(dimsduiqi(setq e(car(entsel)))(setq ss(ssget)))
(defun dimsduiqi(e ss / e0 es ang ang1 e10 e13 e14 p10 p101 p13 p131 p14)
(setq es(entget e))
(setq p10(cdr(assoc 10 es)))
(setq e14(assoc 14 es) p14(cdr e14))
(setq ang(angle p14 p10))
(setq p101(polar p10 (+ (* pi 0.5)ang) 10))
(setq p13(cdr(assoc 13 es)))
(setq p131(perppp p13 p10 p14));perppp垂足函数
(entmod(subst(cons 14 p131)e14 es))
(repeat(setq ss1(ssadd) n(sslength ss))
(setq e0(ssname ss(setq n(1- n))) es(entget e0))
(setq e10(assoc 10 es) e13(assoc 13 es) e14(assoc 14 es))
(setq ang1(- ang(angle (cdr e14)(cdr e10))))
(if(or(equal 0 ang1 1e-6)(equal pi ang1 1e-6))(progn
(setq es(subst(cons 10(perppp (cdr e10) p10 p101))e10 es))
(setq es(subst(cons 13(perppp (cdr e13) p13 p131))e13 es))
(entmod(subst(cons 14(perppp (cdr e14) p13 p131))e14 es))
(ssadd e0 ss1)
))
)(list ang e ss1);这个数据留着扩展-下面函数使用
)
;对齐即完成
(defun c:dmdq( / e ss frs)
(setq frs '((0 . "DIMENSION")(-4 . "<or")(70 . 32)(70 . 33)(-4 . "or>")))
(princ"\n选择拟对齐标注集:")
(if (and (or(setq ss(ssget "i" frs))(setq ss(ssget frs)))
(sssetfirst nil ss)
(setq e(car(entsel " \n指定基准标注对象:")))
(ssmemb e ss)
)
(dimsduiqi e ss)
)
)
;对齐后移动
(defun c:dmdm( / cmd ls Wob)
(if(setq ls(c:dmdq))(progn
(setq cmd(if command-s command-s vl-cmdf))
(setq Wob(Vlax-Get-Or-Create-Object "WScript.Shell" ))
(cmd "_move" (caddr ls) "" "non" (cdr(assoc 10(entget(cadr ls)))))
(Vlax-Invoke-Method Wob 'Sendkeys(strcat"<"(angtos(car ls)0 4)"{Enter}"))
(cmd pause)
(vlax-release-object Wob)
))
)
很棒。如果有图片演示将更好了。 如果有图片演示将更好了。 放个GIF ,效果一目了然,方便大家知道效果 补了一张动态图 感谢大佬分享
页:
[1]