块参照选择集中最大最小坐标问题
本帖最后由 yxh1202 于 2013-5-31 10:46 编辑选择集中全部是CASS展点中生成的 块。想找出这个选择集中块的最大最小X Y值,但提示语法错误,请指点:
;选择n个块,求块的插入点坐标中的最大最小 x y值
(defun C:maxin ()
(IF (SETQ S1 (SSGET))
(setq xx 0
yx 0
xd 0
yd 0
)
(setq I 0)
(repeat (sslength S1)
;取得对象属性列表
(setq s1_data (entget (ssname s1 i)))
(setq s1pt (assoc 10 s1_data))
(setq pts (cdr s1pt))
(setq x (car pts))
(setq y (cadr pts))
(cond
((> xx x) (setq xx x))
((> yx y) (setq yx y))
((< xd x) (setq xd x))
((< yd y) (setq yd y))
)
(setq I (1+ I))
)
)
(princ "\n" xx)
)
这能行吗?看不出是两个块的插入点的坐标比较啊 zyhandw 发表于 2013-5-28 17:00 static/image/common/back.gif
这能行吗?看不出是两个块的插入点的坐标比较啊
是很多个块,请指点一下 yxh1202 发表于 2013-5-28 17:21 static/image/common/back.gif
是很多个块,请指点一下
我知道是很多个块!
可是你的程序,怎么是拿块的插入点的坐标与0,0比较呢? 本帖最后由 x_s_s_1 于 2013-5-28 17:44 编辑
试试,这个是最大,最小的您自己将MAX改为MIN,测试图结果(461027.0 3.63835e+006)(defun c:ttt(/ ss lst x y n)
(setq ss (ssget'((0 . "INSERT"))) n 0)
(repeat(sslength ss)(setq lst(cons (ssname ss n)lst) n (1+ n)))
(setq x(mapcar '(lambda(x)(car(cdr(assoc 10 (entget x)))))lst))
(setq y(mapcar '(lambda(x)(cadr(cdr(assoc 10 (entget x)))))lst))
(list(eval (cons 'max x))(eval (cons 'max y)))
) 本帖最后由 yxh1202 于 2013-5-29 12:02 编辑
x_s_s_1 发表于 2013-5-28 17:41 static/image/common/back.gif
试试,这个是最大,最小的您自己将MAX改为MIN,测试图结果(461027.0 3.63835e+006)
你好,通过测试仿佛最小值X对,最大值X不对. 最大X应当为460941 取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst)) gzxl 发表于 2013-5-29 12:28 static/image/common/back.gif
取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst))
你好,按照楼上的代码,最大最小值不符,求指点 ;; gxl-GetssBox 取得选择集的实体外矩形框/
(defun gxl-GetssBox (ss / i l1 l2 ll ur e)
(repeat (setq i (sslength ss))
(if (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
(progn
(setq r
(VL-CATCH-ALL-APPLY
'vla-getboundingbox
(list
e
'll
'ur
)
)
)
(if (not (VL-CATCH-ALL-ERROR-P r))
(setq l1 (cons (vlax-safearray->list ll) l1)
l2 (cons (vlax-safearray->list ur) l2)
)
)
)
)
)
(mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
'(min max)
(list l1 l2)
)
) 有没有办法获取实体上最靠右或最左的点?
页:
[1]