请各位大大改一下程序,实现批量循环执行
这程序是个对齐命令,只能单次执行,请帮忙加上循环,实现批量执行。框选完第一个实体后,再框选第二个封闭实体,将第一个实体居中放在后面选择的封闭实体内,封闭实体会有多个。(defun ss::boundingbox (sel / idx llp ls1 ls2 obj urp)
(repeat (setq idx (sslength sel))
(setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))
(if
(and
(vlax-method-applicable-p obj 'getboundingbox)
(not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'llp 'urp))))
)
(setq ls1 (cons (vlax-safearray->list llp) ls1)
ls2 (cons (vlax-safearray->list urp) ls2)
)
)
)
(if (and ls1 ls2)
(mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2))
)
)
(defun c:dq () (setvar "OSMODE" 0)
(princ "\n选择要移动的对象")
(while (setq ss1 (ssget))
(setq obj1 (ss::boundingbox ss1))
(setq x (/ (+ (caar obj1) (caadr obj1)) 2))
(setq y (/ (+ (cadar obj1) (cadadr obj1)) 2))
(setq mid1 (list x y 0.0))
(princ "\n选择对齐的对象")
(setq ss2 (ssget))
(setq obj2 (ss::boundingbox ss2))
(setq x1 (/ (+ (caar obj2) (caadr obj2)) 2))
(setq y1 (/ (+ (cadar obj2) (cadadr obj2)) 2))
(setq mid2 (list x1 y1 0.0))
(princ "\n中心对齐")
(command "_.move" ss1 "" mid1 mid2))
(setvar "OSMODE" 11)
(princ)
)
(defun c:dq (/ en i mid1 mid2 obj1 obj2 ss1 ss2 ss3 x x1 y y1)
(setvar "OSMODE" 0)
(princ "\n选择要移动的对象")
(while (setq ss1 (ssget))
(setq obj1 (ss::boundingbox ss1))
(setq x (/ (+ (caar obj1) (caadr obj1)) 2))
(setq y (/ (+ (cadar obj1) (cadadr obj1)) 2))
(setq mid1 (list x y 0.0))
(princ "\n选择对齐的对象")
(setq ss2 (ssget))
(setq i -1)
(while (setq en (ssname ss2 (setq i (1+ i))))
(setq ss3 (ssadd) ss3 (ssadd en ss3))
(setq obj2 (ss::boundingbox ss3))
(setq x1 (/ (+ (caar obj2) (caadr obj2)) 2))
(setq y1 (/ (+ (cadar obj2) (cadadr obj2)) 2))
(setq mid2 (list x1 y1 0.0))
(command "copy" ss1 "" mid1 mid2)
)
(princ "\n中心对齐")
)
(setvar "OSMODE" 11)
(princ)
) 感谢大大的出手相助,问题解决,我得研究研究怎么把赏分给你:dizzy:
页:
[1]