写好了, 试试
处理了你2.rar里面的第一个图,都炸开后,执行TT,总共210个标注。执行命令前,记得把你们那个尺寸标注样式1-30给拷贝到图中来,否则生成的尺寸没有圆箭头。
附件是处理好的图
(defun c:tt (/ #endpoint #startpoint ang bdim box center dstyle eline height
k p1 p2 pnts ss ss1 ss2 ss3 ss5 strpnts tf txt v1 v2 x
xdimpnt xdims y
)
(defun _ssadd (ss5 ss)
(mapcar
'(lambda (x)
(ssadd x ss5)
)
(xdrx_pickset->ents ss)
)
)
(defun _process1 (ss3)
(mapcar
'(lambda (x)
(setq pnts (xdrx_getpropertyvalue x "vertices")
v2 (mapcar
'-
(cadr pnts)
(car pnts)
)
v2 (xdrx_vector_normalize v2)
)
(if (equal (/ pi 2.0) (abs (xd::geom:angleformat
(xdrx_vector_angle v1 v2)
)
) 1e-3
)
(progn
(if (and
(xdrx_entity_intersectwith x ss2)
(< (length xdimpnt) 2)
(vl-every '(lambda (y)
(xdrx_getpropertyvalue y "startpoint"
"endpoint"
)
(and
(not (equal (xdrx_point_dist2line
(car pnts) #startpoint #endpoint
) 0 1
)
)
(not (equal (xdrx_point_dist2line
(cadr pnts) #startpoint #endpoint
) 0 1
)
)
)
) xdims
)
)
(progn
(setq xdims (cons x xdims))
(if (vl-position (car pnts) (list p1 p2))
(setq xdimpnt (cons (cadr pnts) xdimpnt)
)
(setq xdimpnt (cons (car pnts) xdimpnt))
)
)
)
)
)
)
(xdrx_pickset->ents ss3)
)
xdimpnt
)
(defun _process (x)
(setq box (xdrx_entity_box x)
center (xd::geom:get9pt x 5)
height (xdrx_getpropertyvalue x "textheight")
txt (xdrx_getpropertyvalue x "textstring")
box (xdrx_points_offset 30.0 (xd::pnts:close box))
eline nil
)
(if (and
(if (xdrx_string_regexps "^[0-9.]+$" txt)
(setq ss1 (ssget "cp" box '((0 . "LINE"))))
)
)
(progn
(mapcar
'(lambda (x)
(if (equal (xdrx_getpropertyvalue x "length") (atof txt) 1)
(setq eline x)
)
)
(xdrx_pickset->ents ss1)
)
(if eline
(progn
(setq p1 (xdrx_getpropertyvalue eline "startpoint")
p2 (xdrx_getpropertyvalue eline "endpoint")
v1 (mapcar
'-
p2
p1
)
v1 (xdrx_vector_normalize v1)
ang (xd::geom:angleformat (angle p1 p2))
)
(if (setq ss2 (ssget "f" (list p1 p2) '((0 . "CIRCLE"))))
(progn
(if (setq ss3 (ssget "f" (list p1 p2) '((0 . "LINE"))))
(progn
(ssdel eline ss3)
(setq xdimpnt nil
xdims nil
)
(setq xdimpnt (_process1 ss3))
(if (= (length xdimpnt) 2)
(progn
(_ssadd ss5 ss2)
(ssadd x ss5)
(_ssadd ss5 ss3)
(if (xdrx_object_get "dimstyle" "1-30")
(setq dstyle "1-30")
(setq dstyle "iso-25")
)
(xdrx_dimension_makerotate (car xdimpnt)
(cadr xdimpnt) p1 ang
dstyle
)
(setq k (1+ k))
(setq bdim t)
(setq strpnts (xdrx_entity_getstretchpoint
(entlast)
)
)
(if (> (distance (last strpnts) center) (/ height
2.0
)
)
(xdrx_entity_movestretchpoint (entlast)
(mapcar
'-
center
(last strpnts)
) 4
)
)
)
)
)
)
)
)
)
)
)
)
)
(xdrx_begin)
(xdrx_initssget "\n选取组合成标注的数字<全选>:")
(if (or
(setq ss (xdrx_ssget '((0 . "*TEXT") (1 . "*[0-9]*"))))
(setq ss (xdrx_ssget "X" '((0 . "*TEXT") (1 . "*[0-9]*"))))
)
(progn
(setq ss5 (ssadd)
bdim nil
)
(setq tf (xd::doc:safezoom ss))
(setq k 0 kk 0)
(xdrx_statusbar_begin "处理中" (sslength ss))
(mapcar
'(lambda (x)
(_process x)
(setq kk (1+ kk))
(xdrx_statusbar_setpos kk)
)
(xdrx_pickset->ents ss)
)
(xdrx_statusbar_end)
(xdrx_entity_delete ss5)
(xdrx_prompt "\n生成了" k "个尺寸标注.")
(if tf
(xdrx_document_zoomprevious)
)
)
(xdrx_prompt "\n图中没有符合条件的数字文本.")
)
(xdrx_end)
(princ)
)
|