可否实现智能标注
本帖最后由 ddqzmpaxlozc 于 2020-3-18 13:04 编辑求大佬给加个标注避让的功能
避让规则:如图效果,确实是比较难实现 随便搞了一下,不要悬赏,避让不好搞,您自己琢磨吧
(defun c:test1 (/ ss1 n en ent lst1a lst1b ss2 lst2 lst3 m p pa pb pc)
(prompt "\n选择定位线:")
(setq ss1 (ssget '((0 . "line"))))
(repeat (setq n (sslength ss1))
(setq en(ssname ss1 (setq n (1- n)))
ent (entget en)
)
(if(equal (car (cdr (assoc 10 ent)))
(car (cdr (assoc 11 ent)))
1e-6
)
(setq lst1a (cons en lst1a))
(setq lst1b (cons en lst1b))
)
)
(prompt "\n选择标示物:")
(setq ss2 (ssget '((0 . "*line,point,circle,arc"))))
(repeat (setq n (sslength ss2))
(setq en(ssname ss2 (setq n (1- n)))
ent (entget en)
)
(cond ((member (cdr (assoc 0 ent)) '("POINT" "CIRCLE"))
(setq lst2 (cons (cdr (assoc 10 ent)) lst2))
)
((member (cdr (assoc 0 ent)) '("LINE" "ARC"))
(setq lst2 (cons (vlax-curve-getstartpoint en) lst2))
(setq lst2 (cons (vlax-curve-getendpoint en) lst2))
)
((member (cdr (assoc 0 ent)) '("LWPOLYLINE" "POLYLINE"))
(setq m (vlax-curve-getendParam en))
(while (>= m 0)
(setq lst2(cons (vlax-curve-getpointatparam en m) lst2)
m(1- m)
)
)
)
)
)
(while lst2
(setq p (car lst2)
lst(cdr lst2)
lst3 (cons p lst3)
)
(iflst2
(setq lst2 (vl-remove-if '(lambda (x) (equal p x 1e-6)) lst2))
)
)
(setqlst3 (vl-sort lst3
'(lambda (p1 p2)
(if (equal (car p1) (car p2) 1e-6)
(< (cadr p1) (cadr p2))
(< (car p1) (car p2))
)
)
)
)
(foreach n lst3
(setq
lst2 (mapcar
'(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
lst1a
)
lst2 (vl-sort lst2
'(lambda (p1 p2)
(< (distance (car p1) (cadr p1))
(distance (car p2) (cadr p2))
)
)
)
)
(setq p(car lst2)
pa (car p)
pb (cadr p)
pc (polar pa (* 0.5 pi) 500)
)
(command "dimlinear" pa pb pc)
(setq
lst2 (mapcar
'(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
lst1b
)
lst2 (vl-sort lst2
'(lambda (p1 p2)
(< (distance (car p1) (cadr p1))
(distance (car p2) (cadr p2))
)
)
)
)
(setq p(car lst2)
pa (car p)
pb (cadr p)
pc (polar pa 0 500)
)
(command "dimlinear" pa pb pc)
)
)
做过管道平面布置图的自动标注功能,只要规则确定,是可以实现的. 本帖最后由 cable2004 于 2020-3-16 11:42 编辑
初稿,可能还有bug。
cable2004 发表于 2020-3-16 11:41
初稿,可能还有bug。
大神可以啊,是我想要的效果,你这个是对象只是圆心吗,可以是选择点吗,或者是一段线的端点,折点呢,可以实现吗 cable2004 发表于 2020-3-16 11:41
初稿,可能还有bug。
发来瞧瞧嘛 cable2004 发表于 2020-3-16 11:41
初稿,可能还有bug。
大佬加油啊!
学习一下喽 cable2004 发表于 2020-3-16 11:41
初稿,可能还有bug。
大佬你研究的咋样了 x_s_s_1 发表于 2020-3-17 19:08
随便搞了一下,不要悬赏,避让不好搞,您自己琢磨吧
感谢大佬支持,我先下载测试一下