lijiao 发表于 2023-12-24 14:57:32

计算选择集外围矩形框的函数

近日写了一个计算选择集外围矩形框的函数,觉得有点意思,所以发上来让大家看看,如果大家有兴趣,再发源码

函数调用方式: (get-ss-side)
运行后,提示输入两点框选实体
返回值为一列表: (选择集外框左下角坐标   外框右上角坐标)
使用条件:
1.需要ET工具支持
2.选择为单选模式,并且要选择的实体必须全部在两点拉出的矩形框内部,不能有交叉的情况
3.该函数在计算大选择集时有优势,比如成千上万个实体
4.目前只考虑了在世界坐标系下进行计算
5.计算时间与实体的分布有关系

liuhe 发表于 2023-12-24 18:08:44

guosheyang 发表于 2023-12-24 15:26
选择集包围框哈leemac 也有类似函数

;; Selection Set Bounding Box-Lee Mac
;; Returns a list of the lower-left and upper-right WCS coordinates of a
;; rectangular frame bounding all objects in a supplied selection set.
;; sel - Selection set for which to return bounding box

(defun LM:ssboundingbox ( 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))
    )
)

guosheyang 发表于 2023-12-24 15:26:12

选择集包围框哈leemac 也有类似函数

你有种再说一遍 发表于 2023-12-24 15:42:59

建议自己写一个四叉树,然后就知道其中原理了,如果懒得写,可以来ifox

lijiao 发表于 2023-12-24 17:54:38

这个函数主要用在选择集中实体数量比较大的情况,数量越大,优势越大.

lijiao 发表于 2023-12-25 12:29:32

liuhe 发表于 2023-12-24 18:08


这个函数也见过,但效率有点低,如果有10万个实体,估计要等上好一会才能出结果,一楼的函数估计不会超过2秒

bonny 发表于 2023-12-25 14:38:22

本帖最后由 bonny 于 2023-12-25 14:40 编辑

lijiao 发表于 2023-12-25 12:29
这个函数也见过,但效率有点低,如果有10万个实体,估计要等上好一会才能出结果,一楼的函数估计不会超过2秒
前提剧情强制设定:选择范围2点,如果是空集添加的选集或角点区域无分布的情况下,那就oyymd了,使用场景有限。
页: [1]
查看完整版本: 计算选择集外围矩形框的函数