Lisphk 发表于 2019-1-8 00:35:49

选择集的包围盒

返回选择集包围盒的左下点和右上点

(defun ss::boundingbox (sel / idx llp ls1 ls2 obj urp) ; Lee mac
    (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))
    )
)

hch8682005 发表于 2019-1-8 07:53:04

学习学习!!!

xudi1234 发表于 2019-1-8 09:23:18

怎么个用法?{:1_12:}

网事如尘 发表于 2020-3-16 17:25:31

学习了,感谢分享

lee3737 发表于 2020-3-19 12:25:55

本帖最后由 lee3737 于 2020-3-19 12:27 编辑

用法:

(defun c:test ()
         (setq ss (ssget))                         ;選擇一個或多個物件
         (setq obj (ss::boundingbox ss))
         (setq p1 (car obj))                      ;取左下點      
         (setq p2 (cadr obj))                  ;取右上點
         (command "_rectang" p1 p2)       ;畫出包圍框
)

bright516 发表于 2024-9-11 10:18:26

感谢分享{:1_1:}
页: [1]
查看完整版本: 选择集的包围盒