(defun c:test ()
(setq lmss (ssget))
(repeat (setq idx (sslength lmss))
(setq obj (vlax-ename->vla-object (ssname lmss (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))
)
(princ)
)
Leemac님의 리습입니다.
원본
(defun LM:ssboundingbox ( lmss / idx llp ls1 ls2 obj urp )
(vl-load-com)
(repeat (setq idx (sslength lmss))
(setq obj (vlax-ename->vla-object (ssname lmss (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:test ()
(setq lmss (ssget))
(setq $minmax (LM:ssboundingbox lmss))
)
;;이걸 원하시는건지 도통..$minmax 변수에 (좌하점, 우상점) 좌표가 저장됩니다.