明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2345|回复: 9

[讨论] 块参照选择集中最大最小坐标问题

[复制链接]
发表于 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)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-5-28 17:00:54 | 显示全部楼层
这能行吗?看不出是两个块的插入点的坐标比较啊
 楼主| 发表于 2013-5-28 17:21:31 | 显示全部楼层
zyhandw 发表于 2013-5-28 17:00
这能行吗?看不出是两个块的插入点的坐标比较啊

是很多个块,请指点一下
发表于 2013-5-28 17:23:25 | 显示全部楼层
yxh1202 发表于 2013-5-28 17:21
是很多个块,请指点一下

我知道是很多个块!
可是你的程序,怎么是拿块的插入点的坐标与0,0比较呢?
发表于 2013-5-28 17:41:55 | 显示全部楼层
本帖最后由 x_s_s_1 于 2013-5-28 17:44 编辑

试试,这个是最大,最小的您自己将MAX改为MIN,测试图结果(461027.0 3.63835e+006)
  1. (defun c:ttt(/ ss lst x y n)
  2. (setq ss (ssget'((0 . "INSERT"))) n 0)
  3.   (repeat(sslength ss)(setq lst(cons (ssname ss n)lst) n (1+ n)))
  4.   (setq x(mapcar '(lambda(x)(car(cdr(assoc 10 (entget x)))))lst))
  5.   (setq y(mapcar '(lambda(x)(cadr(cdr(assoc 10 (entget x)))))lst))
  6.   (list(eval (cons 'max x))(eval (cons 'max y)))
  7.   )
 楼主| 发表于 2013-5-29 12:01:48 | 显示全部楼层
本帖最后由 yxh1202 于 2013-5-29 12:02 编辑
x_s_s_1 发表于 2013-5-28 17:41
试试,这个是最大,最小的您自己将MAX改为MIN,测试图结果(461027.0 3.63835e+006)

你好,通过测试仿佛最小值X对,最大值X不对. 最大X应当为  460941

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-5-29 12:28:39 | 显示全部楼层
取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst))
 楼主| 发表于 2013-5-31 10:17:57 | 显示全部楼层
gzxl 发表于 2013-5-29 12:28
取得插入点点集lst后
就(apply 'max (mapcar '(lambda (x) (cadr x)) lst))

你好,按照楼上的代码,最大最小值不符,求指点
发表于 2013-5-31 10:35:21 | 显示全部楼层
  1. ;; gxl-GetssBox 取得选择集的实体外矩形框/
  2. (defun gxl-GetssBox (ss / i l1 l2 ll ur e)
  3.   (repeat (setq i (sslength ss))
  4.     (if        (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  5.       (progn
  6.         (setq r
  7.                (VL-CATCH-ALL-APPLY
  8.                  'vla-getboundingbox
  9.                  (list
  10.                    e
  11.                    'll
  12.                    'ur
  13.                  )
  14.                )
  15.         )
  16.         (if (not (VL-CATCH-ALL-ERROR-P r))
  17.           (setq        l1 (cons (vlax-safearray->list ll) l1)
  18.                 l2 (cons (vlax-safearray->list ur) l2)
  19.           )
  20.         )
  21.       )
  22.     )
  23.   )
  24.   (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
  25.           '(min max)
  26.           (list l1 l2)
  27.   )
  28. )
发表于 2016-6-28 12:18:32 | 显示全部楼层
有没有办法获取实体上最靠右或最左的点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-20 08:37 , Processed in 0.240122 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表