明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2101|回复: 28

[提问] 如何求得多个矩形框坐标

[复制链接]
发表于 2021-10-26 17:55 | 显示全部楼层 |阅读模式
各位大神,如何通过框选获得多个挨着或者不挨着的矩形框的外形框坐标列表?

(defun c:tt (/ a lst n ss)
        (setq ss (ssget '((0 . "*POLYLINE"))))
        (if ss
                (progn
                        (repeat (setq n (sslength ss))
                                (if (setq a (try-getbox (ssname ss (setq n (1- n)))))
                                        (setq lst (cons a lst))
                                )
                        )
                        ;接下来该怎么写?
                       
                       
                                               
                )
        )
        (princ)
)

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-10-27 23:57 | 显示全部楼层
;(qdjdzb (setq ss(ssget'((0 . "LWPOLYLINE")))) )
(defun qdjdzb(ss / DYG ENLIST E_IN GS GS2 LSS LST12 LST23 SS2 TYMB TYMB2 TYMB2_CP)
  (setq tymb(ss2tym ss)tymb2 tymb)
(repeat(setq gs(length tymb))
   (setq enlist (entget (setq dyg(car tymb)))
         lss (mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) enlist)));提取多边形节点
   (if(and (setq ss2(ssget "W" (last lss)(cadr lss) ))(>(sslength ss2)1))
      (progn
        (setq e_in(ss2tym ss2))
        (repeat(setq gs2(length e_in))
          (if(not(equal(car e_in)(car tymb)))
             (setq tymb2(vl-remove(car e_in)tymb2))
          )
          (setq e_in(cdr e_in))
        )
       )
   )
    (setq tymb(cdr tymb))
)
  (setq tymb2_cp tymb2)
  (while(car tymb2)
    (setq lst12(mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) (entget (car tymb2))))
          lst23(cons (list(last lst12)(cadr lst12))lst23)
          tymb2(cdr tymb2))
  )
  (list tymb2_cp lst23)
)
;;;自定义函数功能:选择集转图元名表
(defun ss2tym (ss)
  (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
)

评分

参与人数 1明经币 +1 收起 理由
lee50310 + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-27 15:12 | 显示全部楼层
如果外框矩形和里面的矩形有不同之处:比如矩形面积、边长等等,再进行判断得到;如果外框矩形和里面的矩形都没有特殊的地方,很难确定哪些是你需要的包围盒角点。
或者直接说出你的最终目的
回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-27 16:31 | 显示全部楼层
本帖最后由 lee50310 于 2021-10-28 03:33 编辑
烟盒迷唇 发表于 2021-10-27 14:53
框选怎么获得呢?不用图层、颜色筛选的。
  1. ;by lee50310
  2. ;--------------------------------------------------------------------------
  3. (defun c:tt2( / ss lst oLL oUR)
  4.      (setq wel nil)
  5.      (setq ss(ssget (list (cons 62 1)(cons 70 1)))) ;過濾封閉紅色框
  6.      (setq lst (change_list ss))                    
  7.          (foreach  x lst         
  8.                        (obb x)
  9.                        (setq wel (cons (list oLL oUR) wel))         
  10.          )
  11. )
  12. ;;------------------------------------------------------------------------
  13. ;;物體最小邊界框
  14. (defun obb (ent); = Object's Bounding Box corners
  15.     (vla-getboundingbox (vlax-ename->vla-object ent) 'minpt 'maxpt)
  16.     (setq
  17.       oLL (vlax-safearray->list minpt); Object's Lower Left
  18.       oUR (vlax-safearray->list maxpt); Object's Upper Right
  19.     ); setq
  20.   ); defun -- obb

  21. ;;------------------------------------------------------------------------
  22. ;將集合物轉圖元名稱表
  23. (defun change_list (ss)
  24.   (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  25. )
  26. ;;------------------------------------------------------------------------
发表于 2021-10-26 20:18 | 显示全部楼层
本帖最后由 guosheyang 于 2021-10-26 21:20 编辑

红色矩形的对角坐标吗   ssget  w    和ssget wp 都可以
发表于 2021-10-27 09:28 | 显示全部楼层
接下来你要干嘛,不是已经获取了矩形坐标了吗
 楼主| 发表于 2021-10-27 10:05 | 显示全部楼层
cghdy 发表于 2021-10-27 09:28
接下来你要干嘛,不是已经获取了矩形坐标了吗

我想排除掉不合格的坐标,只保留最外层矩形的坐标
发表于 2021-10-27 10:21 | 显示全部楼层
如果是最外面红色框的坐标,直接加个过滤就可以只选中红色框了。
(setq ss (ssget '((0 . "*POLYLINE") (62 . 1))))
发表于 2021-10-27 11:10 | 显示全部楼层
本帖最后由 lee50310 于 2021-10-27 14:00 编辑


;   wel = 最外層矩形框 點串列
;例:wel=(((1844.57 1003.68 0.0) (2914.55 1675.69 0.0))
               ((2914.55 1003.68 0.0)  (3984.53 1675.69 0.0))
               ((3984.53 1003.68 0.0)  (5054.52 1675.69 0.0))
               ((1844.57 -22.7736 0.0) (2914.55 649.238 0.0))
               ((3028.82 -22.7736 0.0) (4098.8 649.238 0.0))
               ((4447.96 -22.7736 0.0) (5517.94 649.238 0.0)))







发表于 2021-10-27 11:50 | 显示全部楼层
烟盒迷唇 发表于 2021-10-27 10:05
我想排除掉不合格的坐标,只保留最外层矩形的坐标

有现成的函数,获取选择集包围盒
 楼主| 发表于 2021-10-27 14:50 | 显示全部楼层
ssyfeng 发表于 2021-10-27 10:21
如果是最外面红色框的坐标,直接加个过滤就可以只选中红色框了。
(setq ss (ssget '((0 . "*POLYLINE") (6 ...

不一定是红色的,红色只是为了突出而已。
 楼主| 发表于 2021-10-27 14:50 | 显示全部楼层
cghdy 发表于 2021-10-27 11:50
有现成的函数,获取选择集包围盒

看过了,没找到合适的。
 楼主| 发表于 2021-10-27 14:53 | 显示全部楼层
lee50310 发表于 2021-10-27 11:10
;   wel = 最外層矩形框 點串列
;例:wel=(((1844.57 1003.68 0.0) (2914.55 1675.69 0.0))
         ...

框选怎么获得呢?不用图层、颜色筛选的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-29 20:18 , Processed in 0.219400 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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