yxh1202 发表于 2013-5-28 14:59:36

块参照选择集中最大最小坐标问题

本帖最后由 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:54

这能行吗?看不出是两个块的插入点的坐标比较啊

yxh1202 发表于 2013-5-28 17:21:31

zyhandw 发表于 2013-5-28 17:00 static/image/common/back.gif
这能行吗?看不出是两个块的插入点的坐标比较啊

是很多个块,请指点一下

zyhandw 发表于 2013-5-28 17:23:25

yxh1202 发表于 2013-5-28 17:21 static/image/common/back.gif
是很多个块,请指点一下

我知道是很多个块!
可是你的程序,怎么是拿块的插入点的坐标与0,0比较呢?

x_s_s_1 发表于 2013-5-28 17:41:55

本帖最后由 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:01:48

本帖最后由 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

gzxl 发表于 2013-5-29 12:28:39

取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst))

yxh1202 发表于 2013-5-31 10:17:57

gzxl 发表于 2013-5-29 12:28 static/image/common/back.gif
取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst))

你好,按照楼上的代码,最大最小值不符,求指点

Gu_xl 发表于 2013-5-31 10:35:21

;; 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)
)
)

lilq_78 发表于 2016-6-28 12:18:32

有没有办法获取实体上最靠右或最左的点?
页: [1]
查看完整版本: 块参照选择集中最大最小坐标问题