- 积分
- 29191
- 明经币
- 个
- 注册时间
- 2003-9-30
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
刚刚随手编的一个相同文字连线的小程序
对某些同学或许有点用
现在的设备、工艺专业人员都挺偷懒
按规矩应该在设备编号旁边注明电功率等内容
现在是啥也不标就给个设备表
核对起来很费时
这个程序就是点设备表的文字
自动在所有相同的文字之间连上直线
程序很简单扩展空间很大
(setq *ent2obj* vlax-Ename->Vla-Object)
(defun c:tt()
(if (setq ss (ssget ":e:s" '((0 . "TEXT"))))
(progn
(setq ttent (ssname ss 0))
(command "layer" "m" "f_temp_文字连线" "c" "6" "" "")
(setq str (cdr (assoc 1 (entget ttent))))
(setq po (getmidpo (entbox ttent)))
(setq ss (ssget "x" (list '(0 . "TEXT")(cons 1 str))))
(if (< 1 (sslength ss))
(progn
(setq oldliness (ssget "x" '((0 . "line")(8 . "f_temp_文字连线"))))
(if oldliness (command "erase" oldliness ""))
(setq ss (vl-remove ttent (ss2list ss)))
(foreach x ss
(setq px (getmidpo (entbox x)))
(command "line" "non" po "non" px "")
)
)
(command "change" ttent "" "p" "co" "2" "")
)
)
)
(princ)
)
;;单个物体的最小(正交)包围框
(defun entbox ( ent / ll ur )
(vla-getboundingbox (*ent2obj* ent) 'll 'ur)
(mapcar 'vlax-safearray->list (list ll ur))
)
;;求两点中点
(defun getmidpo( pts / P1 P2 X Y )
(setq p1 (car pts) p2 (cadr pts))
(if (= (length p1) (length p2))
nil
(setq p1 (list (car p1) (cadr p1))
p2 (list (car p2) (cadr p2))
)
)
(mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) P1 P2)
)
;;选择集转为图元列表
(defun ss2list( ss )
(if (= 'PICKSET (type ss))
(reverse (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss))))
)
)
|
|