x_s_s_1
发表于 2020-3-17 21:03:56
vla方法稍微快点
(defun c:test2
(/ ss1 nen ent lst1a lst1b ss2 lst2 lst3 m p papb pc
adoc acspc)
(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))
)
)
)
)
(setq n (car lst3))
(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 acdoc(vla-get-activedocument (vlax-get-acad-object))
acspc(vlax-get-property
acdoc
(if (= 1 (getvar 'CVPORT))
'Paperspace
'Modelspace
)
)
)
(setq p(car lst2)
pa (car p)
pb (cadr p)
pc (polar pa (* 0.5 pi) 500)
)
(vla-AddDimRotated
acspc
(vlax-3d-point pa)
(vlax-3d-point pb)
(vlax-3d-point pc)
0
)
(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)
)
(vla-AddDimRotated
acspc
(vlax-3d-point pa)
(vlax-3d-point pb)
(vlax-3d-point pc)
(* 0.5 pi)
)
)
)
ddqzmpaxlozc
发表于 2020-3-17 21:15:33
x_s_s_1 发表于 2020-3-17 21:03
vla方法稍微快点
大佬,你能再帮着研究下标注之间避让的功能吗,你做的这个真是太合我心意了!!!
x_s_s_1
发表于 2020-3-17 21:18:34
不好定避让规则
ddqzmpaxlozc
发表于 2020-3-17 21:22:46
x_s_s_1 发表于 2020-3-17 21:18
不好定避让规则
麻烦您开动下脑筋想想呗,这个功能对我特别实用
ddqzmpaxlozc
发表于 2020-3-17 21:30:12
x_s_s_1 发表于 2020-3-17 21:18
不好定避让规则
大佬,我再追加50悬赏您看可以吗
x_s_s_1
发表于 2020-3-18 00:07:14
本帖最后由 x_s_s_1 于 2020-3-18 00:32 编辑
ddqzmpaxlozc 发表于 2020-3-17 21:30
大佬,我再追加50悬赏您看可以吗
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的
ddqzmpaxlozc
发表于 2020-3-18 00:17:40
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的
谢谢大佬,稍等一下,我编辑
ddqzmpaxlozc
发表于 2020-3-18 00:36:17
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的
一、可以实现标注线之间相互避让,例如同方向的标注尺寸线之间距离最少为标注字高的1.5倍以上,如图1,2二、同一点的横纵向标注也应该避让,如图3,4
ddqzmpaxlozc
发表于 2020-3-18 00:42:10
本帖最后由 ddqzmpaxlozc 于 2020-3-18 00:43 编辑
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的
需要不通过手工再调的,既是为了批量生成同轴线之间的定位标注,标注之间要避让开,这样确保打印出来可以看清楚,其实原则说白了就一点,标注线之间尽可能没有交叉,尺寸标注之间也互相避让。
mikewolf2k
发表于 2020-3-18 09:04:01
避让规则很简单,按顺序标注,标注时候检测原来是否已有标注,有的话就向外增长一个值再放、再检测,直到无重叠为止。
当然编起来就比较费劲了。
参看我的管线标注避让。
避让规则很简单,按顺序标注,标注时候检测原来是否已有标注,有的话就向外增长一个值再放、再检测,直到无重叠为止。
当然编起来就比较费劲了。
参看我的管线标注避让。