简单写了个,可以批量全图处理相同连续的标注合并到一起。这东西不批量就不值得写了。
想要纯LISP改写朋友,参考下算法思路和里面的函数,用LISP模拟下里面的代码。核心是尺寸分组函数,开源函数库有代码
XD::DIM:GROUP http://bbs.xdcad.net/thread-704531-1-1.html
(defun c:tt ()
(defun _process (el)
(while (cdr el)
(setq e1 (car el)
e2 (cadr el)
)
(if (not first)
(setq first e1)
)
(setq Measurement1 (xdrx_getpropertyvalue e1 "Measurement")
Measurement2 (xdrx_getpropertyvalue e2 "Measurement")
)
(if (equal Measurement1 Measurement2 1e-3)
(progn
(setq second (cons e2 second))
)
(progn
(if second
(progn
(setq d1 (append
(mapcar
'car
(XD::Dim:xLine first)
)
(mapcar
'car
(XD::Dim:xLine (car second))
)
)
base (XD::Dim:BasePoints first)
d2 (xdrx_points_sortoncurve base d1)
d3 (mapcar
'cadr
d2
)
)
(xdrx_dimension_MakeRotate (car d3) (last d3) (car base)
(apply
'angle
base
)
)
(setq dtxt (xdrx_prompt (1+ (length second)) "X"
(rtos Measurement1 2 1) "="
(rtos (xdrx_getpropertyvalue
(entlast) "Measurement"
) 2 1
) t
)
)
(xdrx_setpropertyvalue (entlast) "dimtext" dtxt)
(xdrx_entity_setPropertiesFrom (entlast) first)
(xdrx_object_swapid (entlast) first)
(xdrx_entity_delete (cons (entlast) second))
)
)
(setq second nil
first nil
)
)
)
(setq el (cdr el))
)
)
(xdrx_initssget "\n选取要合并的同长度尺寸<退出>:")
(if (setq ss (xdrx_ssget '((0 . "dim*") (-4 . "&=")
(70 . 0)
)
)
)
(progn
(setq ents (xd::dim:group ss 0))
(mapcar
'(lambda (x)
(_process x)
)
ents
)
)
)
(princ)
)
|