本帖最后由 ZZXXQQ 于 2013-6-11 23:16 编辑
;主函数改了下,加上了对话框。
 - (defun process (amode / apnt apnt_x apnt_y count objname vlaxobj MinPoint MaxPoint
- minext maxext ext_l ext_r ext_m ext_vt ext_vd ext_vm tpnt)
- (setq oldcmdecho (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (setq selobjs (ssget))
- (if (or (not selobjs) (= (sslength selobjs) 1))
- (princ "\n你必须选定两个或两个以上的对象")
- )
- (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))
- (setq ext_vd (cadr minext))
- (setq ext_vt (cadr maxext))
- (setq ext_vm (+ (/ (abs (- ext_vt ext_vd)) 2) ext_vd))
- (cond
- ((= amode "HL") (setq tpnt (list ext_l apnt_y)))
- ((= amode "HM") (setq tpnt (list ext_m apnt_y)))
- ((= amode "HR") (setq tpnt (list ext_r apnt_y)))
- ((= amode "VT") (setq tpnt (list apnt_x ext_vt)))
- ((= amode "VM") (setq tpnt (list apnt_x ext_vm)))
- ((= amode "VD") (setq tpnt (list apnt_x ext_vd)))
- )
- (if tpnt (command "_move" objname "" "non" tpnt "non" apnt))
- (setq count (1+ count))
- )
- (setvar "cmdecho" oldcmdecho)
- )
- (defun c:dq ()
- (setq fp (open "dq.dcl" "w"))
- (foreach x
- '("dq:dialog{\n"
- " label=\"对齐物体 2013\";\n"
- " :row{\n"
- " :button{label=\" 左对齐 \";key=\"hl\";allow_accept=true;}\n"
- " :button{label=\"水平居中\";key=\"hm\";allow_accept=true;}\n"
- " :button{label=\" 右对齐 \";key=\"hr\";allow_accept=true;}\n"
- " }\n"
- " :row{\n"
- " :button{label=\" 上对齐 \";key=\"vt\";allow_accept=true;}\n"
- " :button{label=\"垂直居中\";key=\"vm\";allow_accept=true;}\n"
- " :button{label=\" 下对齐 \";key=\"vd\";allow_accept=true;}\n"
- " }\n"
- " cancel_button;\n"
- "}\n"
- )
- (princ x fp)
- )
- (close fp)
- (if (> (setq dcl_id (load_dialog (findfile "dq.dcl"))) 0) (progn
- (if (new_dialog "dq" dcl_id "") (progn
- (action_tile "hl" "(done_dialog 1)")
- (action_tile "hm" "(done_dialog 2)")
- (action_tile "hr" "(done_dialog 3)")
- (action_tile "vt" "(done_dialog 4)")
- (action_tile "vm" "(done_dialog 5)")
- (action_tile "vd" "(done_dialog 6)")
- (action_tile "cancel" "(done_dialog 0)")
- (setq re (start_dialog))
- )
- (princ "\n无法显示对话框!")
- )
- (unload_dialog dcl_id)
- )
- (princ "\n无法加载对话框!")
- )
- (cond
- ((= re 1) (process "HL"))
- ((= re 2) (process "HM"))
- ((= re 3) (process "HR"))
- ((= re 4) (process "VT"))
- ((= re 5) (process "VM"))
- ((= re 6) (process "VD"))
- )
- (princ)
- )
|