计算选择集外围矩形框的函数
近日写了一个计算选择集外围矩形框的函数,觉得有点意思,所以发上来让大家看看,如果大家有兴趣,再发源码函数调用方式: (get-ss-side)
运行后,提示输入两点框选实体
返回值为一列表: (选择集外框左下角坐标 外框右上角坐标)
使用条件:
1.需要ET工具支持
2.选择为单选模式,并且要选择的实体必须全部在两点拉出的矩形框内部,不能有交叉的情况
3.该函数在计算大选择集时有优势,比如成千上万个实体
4.目前只考虑了在世界坐标系下进行计算
5.计算时间与实体的分布有关系
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))
)
)
选择集包围框哈leemac 也有类似函数 建议自己写一个四叉树,然后就知道其中原理了,如果懒得写,可以来ifox 这个函数主要用在选择集中实体数量比较大的情况,数量越大,优势越大. liuhe 发表于 2023-12-24 18:08
这个函数也见过,但效率有点低,如果有10万个实体,估计要等上好一会才能出结果,一楼的函数估计不会超过2秒 本帖最后由 bonny 于 2023-12-25 14:40 编辑
lijiao 发表于 2023-12-25 12:29
这个函数也见过,但效率有点低,如果有10万个实体,估计要等上好一会才能出结果,一楼的函数估计不会超过2秒
前提剧情强制设定:选择范围2点,如果是空集添加的选集或角点区域无分布的情况下,那就oyymd了,使用场景有限。
页:
[1]