发布于:2004-02-28 16:25:28
来自:建筑设计/CAD下载及教程
[复制转发]
;;程序名称:对象水平对齐程序
;;执行命令:ao
;;程序功能:将选定的对象左对齐、右对齐或对中。
;;
;;
(defun c:ao (/ selobjs oldcmdecho)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq selobjs (ssget '((0 . "TEXT"))))
(process selobjs)
(setvar "cmdecho" oldcmdecho)
(princ)
)
(defun process (selobjs / amode apnt apnt_x
apnt_y count objname vlaxobj MinPoint
MaxPoint minext maxext ext_l ext_r
ext_m tpnt
)
(initget "L M R")
(setq amode (getkword
"\n选择对齐方式
<左对齐(l) 中(m) 对齐(r)>
<居中>
:"
)
)
(if (not amode)
(setq amode "M")
)
(initget 1)
(setq apnt (getpoint "\n选择水平对齐方向的对齐点:"))
(setq apnt_x (car apnt)
apnt_y (cadr apnt)
)
(vl-load-com)
(setq count 0)
(repeat (sslength selobjs)
(setq objname (ssname selobjs count))
(setq vlaxobj (vlax-ename->vla-object objname))
(setq MinPoint (vlax-make-variant))
(setq MaxPoint (vlax-make-variant))
(vla-GetBoundingBox vlaxobj 'MinPoint 'MaxPoint)
(setq minext (vlax-safearray->list MinPoint))
(setq maxext (vlax-safearray->list MaxPoint))
(setq ext_l (car minext))
(setq ext_r (car maxext))
(setq ext_m (+ (/ (abs (- ext_l ext_r)) 2) ext_l))
(cond
((= amode "L")
(setq tpnt (list ext_l apnt_y))
)
((= amode "M")
(setq tpnt (list ext_m apnt_y))
)
((= amode "R")
(setq tpnt (list ext_r apnt_y))
)
)
(if tpnt
(command "_move" objname "" "non" tpnt "non" apnt)
)
(setq count (1+ count))
)
)
居中>
左对齐(l)>
全部回复(7 )
只看楼主 我来说两句-
bsb112233520okok
沙发
下载试试看
2015-04-08 10:14:08
赞同0
-
bsb112233520okok
板凳
谢谢,不错的程序
2015-04-08 10:11:08
赞同0
加载更多回复 举报
回复 举报