选择设定值-低
对于选择集(任何类型的实体),我想确定Y轴上具有最低值的实体上的点-如何确定?这个点应该位于我选择集中的一个实体上。 从Autocad帮助(vl-sort
'((1 3)
(2 2)
(3 1))
(function
(lambda (e1 e2)
(< (cadr e1) (cadr e2)))))
其中(cadr e1)(cadr e2)是列表的第二个元素
即
(setq ptlist '((259.81 1836.12 0.0)
(201.542 1955.57 0.0)
(395.77 1949.59 0.0)
(226.194 1754.74 0.0)
(187.348 1939.14 0.0)))
(car (vl-sortptlist
(function
(lambda (e1 e2)
(< (cadr e1) (cadr e2))))))
(226.194 1754.74 0.0)
由于实体的最低点可能存储在或不存储在其关联列表中(即圆形项目的最低象限),因此我要做的是创建一个包含要检查的项目的选择集,然后解析所述集,并应用Lee Mac的边界框例程。从中提取要排序的Y坐标列表。 哦,是的。。MSasu所说的,然后使用vl排序。。。。就是这样。 在谷歌上找到的东西和添加的东西。。。。似乎有效。。。
(defun c:GBB () (c:GetBoundingBox))
(defun c:GetBoundingBox (/ ss v mn mx lxs lys lxd lyd)
(vl-load-com)
(princ "\rGET BOUNDING BOX \n")
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
(vlax-method-applicable-p
(setq v (vlax-ename->vla-object (ssname ss i)))
'getboundingbox
) ;_ end of vlax-method-applicable-p
(vla-getboundingbox v 'mn 'mx)
(setq p (mapcar 'vlax-safearray->list (list mn mx)))
(setq xs (car (car p)))
(setq ys (cadr (car p)))
(setq xd (car (cadr p)))
(setq yd (cadr (cadr p)))
(setq lxs (cons xs lxs))
(setq lys (cons ys lys))
(setq lxd (cons xd lxd))
(setq lyd (cons yd lyd))
(setq mxs (apply 'min lxs))
(setq mys (apply 'min lys))
(setq mxd (apply 'max lxd))
(setq myd (apply 'max lyd))
(setq ps (list mxs mys))
(setq pd (list mxd myd))
(setq i (1+ i))
) ;_ end of repeat
(command "rectangle" ps pd)
(princ)
) ;_ end of defun 您可以通过一次排序来提高速度,而不是对每个项目进行排序:
...
(setq lxd (cons xd lxd))
(setq lyd (cons yd lyd))
(setq i (1+ i))
) ;_ end of repeat
(setq mxs (apply 'min lxs))
(setq mys (apply 'min lys))
(setq mxd (apply 'max lxd))
(setq myd (apply 'max lyd))
(setq ps (list mxs mys))
(setq pd (list mxd myd))
(command "rectangle" ps pd)
(princ)
) ;_ end of defun Reply Reply With Quote 内部重复
(defun c:demo ( / ss mn mx e _lowY)
(if (setq ss (ssget ))
(progn
(repeat (sslength ss)
(cond ((and
(not (vl-catch-all-error-p
(vl-catch-all-apply
'vla-getboundingbox
(list (vlax-ename->vla-object
(setq e (ssname ss 0)))
'mn 'mx))))
(setq mn (vlax-safearray->list mn))
(setq _lowY (if (or (null _lowY)
(< (cadr mn )(Cadar _lowY))) (list mne)
_lowY))
)
)
)
(ssdel e ss)
)(sssetfirst nil (ssadd (cadr _lowY)))
)
)
(princ)
)
但那只是我 很好,Pbe
谢谢brams,
代码实际上没有任何意义,尤其是当提示选择对象时,因为你实际上可以看到Y值最低的对象,那么告诉我们,rouitne的主要功能是什么?当然还有比这更重要的事吗?
页:
[1]