明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 烟盒迷唇

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

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

使用道具 举报

 楼主| 发表于 2021-10-27 16:14 | 显示全部楼层
ssyfeng 发表于 2021-10-27 15:12
如果外框矩形和里面的矩形有不同之处:比如矩形面积、边长等等,再进行判断得到;如果外框矩形和里面的矩形 ...

最终目的获得大小不一样的矩形最外框,然后进行批量打印,不用图层、颜色区分筛选。
发表于 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-27 16:36 | 显示全部楼层

不在SSGET里面过滤颜色,因为实际情况比这个复杂,不能靠过滤颜色、封闭、图层之类的来区分。
发表于 2021-10-27 16:48 | 显示全部楼层
;函数:inorout
;功能:判断一点是否在多边形内
;函数代码:
;;By Xiao_longxin 明经通道
(defun inorout (pt_list pt / e1 n i j va va_count)
  (setq i  0
          va_count 0
          n  (length pt_list)
          pt_list  (append pt_list (list (car pt_list)))
  )
  (repeat n
    (setq va (- (angle pt (nth i pt_list))
            (angle pt (nth (1+ i) pt_list))
      )
    )
    (cond ((> va pi) (setq va (- va pi)))
          ((< va (* -1 pi)) (setq va (+ va pi)))
    )
    (setq va_count (+ va_count va)
            i    (1+ i)
    )
  )
  (if (< (abs (- (abs va_count) pi)) 0.000001) 't  'nil)
)
发表于 2021-10-27 17:03 | 显示全部楼层
本帖最后由 lee50310 于 2021-10-27 17:16 编辑
烟盒迷唇 发表于 2021-10-27 16:36
不在SSGET里面过滤颜色,因为实际情况比这个复杂,不能靠过滤颜色、封闭、图层之类的来区分。

顏色,封閉,圖層,這些都不能拿來做過濾的依據.....

那就 指剩下 面積 了  若紅色矩形外框都相等 或是 他們都是圖檔內最大的面積

只能用這個 面積 當過濾條件 應可找出這些外圍框   
假設這些紅色矩形框 面積都是已知定值 例  Rec_area = 719040.24
那麼就可從ssget裏面去 比對 物體面積 >=  Rec_area  面積符合就將物體加入另一個新選集中

发表于 2021-10-27 17:29 | 显示全部楼层
本帖最后由 wzg356 于 2021-10-27 18:28 编辑

接15楼
多个不自交多边形lst==(list 点集1 点集2.....)
排除包含或相交的多边形
返回剩余的多边形lst1

(defun getpl( / ss lst lst1)
(if(setq ss (ssget '((0 . "*POLYLINE"))));矩形选择集
        (progn
                (setq ss(vl-remove-if '(lambda(x)(/= (type x) 'ENAME))(mapcar 'cadr (ssnamex ss))))
                ;矩形图元名表
                (setq lst(mapcar '(lambda(l)(mapcar 'cdr(vl-remove-if '(lambda(x)(/= 10 (car x)))(entget l))))ss))
                ;一子表一点集组成的表
                (setq lst1 nil)
                (foreach l0 lst
                        (if  (apply 'or(mapcar '(lambda(p)(vl-every 'not (mapcar '(lambda(l)(inorout l p))lst)))l0))
                        (setq lst1(cons l0 lst1));互不相交或包含的点集组成的表
                        )
                )
        )
)lst1)

貌似满足要求
 楼主| 发表于 2021-10-27 18:42 | 显示全部楼层
wzg356 发表于 2021-10-27 17:29
接15楼
多个不自交多边形lst==(list 点集1 点集2.....)
排除包含或相交的多边形

谢谢,有空我试试看
 楼主| 发表于 2021-10-27 18:42 | 显示全部楼层
lee50310 发表于 2021-10-27 17:03
顏色,封閉,圖層,這些都不能拿來做過濾的依據.....

那就 指剩下 面積 了  若紅色矩形外框都相等 或是  ...

面积更不是不确定
发表于 2021-10-27 19:01 来自手机 | 显示全部楼层
面积+长度最简单,为什么不可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-1 23:41 , Processed in 0.145955 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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