fools 发表于 2018-12-19 16:17:33

本帖最后由 fools 于 2018-12-19 16:20 编辑

提供两种方法,第一种是通过矩形嵌套几何关系判断
;;几何关系判断
(defun c:tt1 (/ box e i ss lst bound rects)
(defun ebox (e / pa pb)
    (and (= 'ename (type e)) (setq e (vlax-ename->vla-object e)))
    (vlax-invoke-method e 'GetBoundingBox 'pa 'pb)
    (setq pa (trans (vlax-safearray->list pa) 0 1)
          pb (trans (vlax-safearray->list pb) 0 1)
    )
    (list pa pb)
)
(defun area (pts) (apply '* (cdr (reverse (apply 'mapcar (cons '- pts)))))) ;_求面积
(defun pt4 (pt2)
    (list (car pt2) (list (caadr pt2) (cadar pt2)) (cadr pt2) (list (caar pt2) (cadadr pt2)))
) ;_对角点生成四角点
(defun PtInPoly (pt pts)
    (equal pi
         (abs
             (apply '+ (mapcar '(lambda (x y) (rem (- (angle pt x) (angle pt y)) pi)) (cons (last pts) pts) pts))
         )
         1e-6
    )
) ;_点是否在凸多边形内(角度法)
;;
(setq ss (ssget '((0 . "INSERT"))))
(repeat (setq i (sslength ss))
    (setq e (ssname ss (setq i (1- i))))
    (setq lst (cons (ebox e) lst)) ;_提取边界对角点,不生产矩形
)
(setq lst (vl-sort lst '(lambda (x1 x2) (> (area x1) (area x2))))) ;_按面积大小排序
(while lst
    (setq rects (cons (car lst) rects)) ;_矩形对角点集
    (setq bound (pt4 (car lst))) ;_矩形边界
    (setq lst (vl-remove-if '(lambda (x) (and (PtInPoly (car x) bound) (PtInPoly (cadr x) bound))) (cdr lst))) ;_移除大矩形边界内的小矩形
)
(mapcar '(lambda (x) (command-s "rectang" (car x) (cadr x))) rects) ;_批量生成矩形
(princ)
)
第二种方法是将所有矩形转换成面域后,再进行并集运算后,炸开重新生成矩形,源代码在附件中,收一点零花钱:lol

依然小小鸟 发表于 2018-12-19 16:37:16

fools 发表于 2018-12-19 16:17
提供两种方法,第一种是通过矩形嵌套几何关系判断

第二种方法是将所有矩形转换成面域后,再进行并集运算 ...

不知道可行不 你这是经过测试吧要是可行 我就破费下载了:lol:lol

fools 发表于 2018-12-19 18:08:21

依然小小鸟 发表于 2018-12-19 16:37
不知道可行不 你这是经过测试吧要是可行 我就破费下载了

有多种方法可以实现你的需求,提供两种方法只是为了丰富解决问题的思路。
你如果画图规范的话,画一个大框,再用BOUNDARY命令一次性就能生成所有外框PLINE

依然小小鸟 发表于 2018-12-20 08:50:26

fangmin723 发表于 2018-12-19 17:27
先点选要添加外框的块,然后在框选所有图元

亲测 此楼可以实现我想要的结果

依然小小鸟 发表于 2018-12-20 09:06:44

fools 发表于 2018-12-19 16:17
提供两种方法,第一种是通过矩形嵌套几何关系判断

第二种方法是将所有矩形转换成面域后,再进行并集运算 ...

此楼也可以解决问题 而且此楼的通用性更强一些 即使图框不是图块也可以   好想也给你一些明经币

lg328084985 发表于 2018-12-27 10:35:46

fools 发表于 2018-12-19 16:17
提供两种方法,第一种是通过矩形嵌套几何关系判断

第二种方法是将所有矩形转换成面域后,再进行并集运算 ...

谢谢老师的分享

softbird 发表于 2019-1-16 13:49:18

fangmin723 发表于 2018-12-18 09:18
先点选要添加外框的块,然后在框选所有图元

点选的块名字有好多个,就需要操作好几次,能否在程序中指定处理某几个块名,分别对每个块操作一次,完成所有的块加外框?

fangmin723 发表于 2019-1-16 14:01:04

softbird 发表于 2019-1-16 13:49
点选的块名字有好多个,就需要操作好几次,能否在程序中指定处理某几个块名,分别对每个块操作一次,完成 ...

可以啊,自己可以在我那个基础上进行修改!

softbird 发表于 2019-1-16 18:13:10

fangmin723 发表于 2019-1-16 14:01
可以啊,自己可以在我那个基础上进行修改!

不会修改,能否麻烦你帮忙修改成A1、A2两个块名,然后我就会依样画葫芦了,谢谢

mokson 发表于 2019-9-19 15:45:25

这个功能,平时都用得到,收藏了,谢谢楼主
页: 1 [2] 3 4
查看完整版本: 批量图框加外框源码求完善!!!