hbgsw 发表于 2015-9-17 10:38:00

如何取图框块的范围


之前公司用的图框是标准的块,插入中心点在图框中间,现在发现一些老图纸插入点跑到别的地方了,所以通过块的中心点计算范围不行了,还有什么办法选择块后可以得到图框的对角呢?请各位大神帮帮忙,谢谢!

zctao1966 发表于 2015-9-17 12:22:57

;;;;通用函数开始

(defun minmm_ss->enlist (ss / lst n en)
(setq n -1)
(while (setq en (ssname ss (setq n (1+ n))))
    (setq lst (cons en lst))
)
)
(defun minmm_objBox (obj / minpoint maxpoint)
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
                                        ;取得包容图元的最大点和最小点
(setq minpoint (vlax-safearray->list minpoint)) ;把变体数据转化为表
(setq maxpoint (vlax-safearray->list maxpoint)) ;把变体数据转化为表
;;;;GetBoundingBox返回的是WCS,需转换为用户坐标系ucs
;;;2011.08.22 08:30修改此通用函数
;;;感谢明经通道的caoyin版主,xshrimp大侠的指点!
(setq minpoint (trans minpoint 0 1))
(setq maxpoint (trans maxpoint 0 1))
(setq obj (list minpoint maxpoint));;;组合成点表
)
(defun minmm_ssbox (ss / boxlst maxlst minlst objlst)
(setq objlst (mapcar 'vlax-ename->vla-object (minmm_ss->enlist ss)))
(setq boxlst (mapcar 'minmm_objBox objlst))
(setq minlst (mapcar 'car boxlst))
(setq maxlst (mapcar 'cadr boxlst))
(list
   (apply 'mapcar (cons 'min minlst))
   (apply 'mapcar (cons 'max maxlst))
)
)
;;;通用函数结束


(setq ss (SSGET '((0 . "insert"))));;;选择对象

(setq shulist (minmm_ssbox ss))
(setq p1 (car shulist ));;;左下角
(setq p2 (cadr shulist ));;;右上角
;;;mx┏━a━━━┓p2
;;;┃         ┃
;;;   b          b
;;;┃         ┃
;;;┃         ┃
;;;p1┗━a━━━┛my
(setq px1 (car p1))                     ; 取得p1坐标的x值
(setq py1 (cadr p1))                     ; 取得p1坐标的y值
(setq px2 (car p2))                     ; 取得p2坐标的x值
(setq py2 (cadr p2))                     ; 取得p2坐标的y值

(setq mx (list px1 py2))             ; 求得mx坐标值
(setq my (list px2 py1))             ; 求得my坐标值
(setq a(distance mx p2));;;mx点 ,p2点之间的距离:横向的距离值
(setq b(distance p1 mx));;;p1点 ,mx点之间的距离:纵向的距离值

yoyoho 发表于 2015-9-17 16:14:51

感谢 zctao1966 分享程序!

lucas_3333 发表于 2015-9-17 16:27:17

yoyoho 发表于 2015-9-17 16:14 static/image/common/back.gif
感谢 zctao1966 分享程序!

总是这一句,专业收集器啊

海盗曹 发表于 2015-9-18 08:50:21

学习一下程序

ygp820601 发表于 2015-11-18 14:02:43

如何使包围盒中不包含动态块中隐藏对象?

llsheng_73 发表于 2015-11-18 14:10:13

zctao1966 发表于 2015-9-17 12:22 static/image/common/back.gif


有的图元对象不支持vla-GetBoundingBox,比如直接插入一个DWG文件进来,经常会得不到任何东东,不知道该如何解决,另外,对于MTEXT,它得到的范围好象也不是所显示文字内容部分的范围,也是一直不知道如何解决

xiaolong1487 发表于 2015-11-19 07:54:11

llsheng_73 发表于 2015-11-18 14:10 static/image/common/back.gif
有的图元对象不支持vla-GetBoundingBox,比如直接插入一个DWG文件进来,经常会得不到任何东东,不知道该如 ...

vla-GetBoundingBox 我感觉缺少字体会有点影响!

llsheng_73 发表于 2015-11-19 11:42:42

xiaolong1487 发表于 2015-11-19 07:54 static/image/common/back.gif
vla-GetBoundingBox 我感觉缺少字体会有点影响!

这个倒没太注意过

zctao1966 发表于 2016-1-28 23:56:51

llsheng_73 发表于 2015-11-18 14:10 static/image/common/back.gif
有的图元对象不支持vla-GetBoundingBox,比如直接插入一个DWG文件进来,经常会得不到任何东东,不知道该如 ...

有范例文件吗、
页: [1] 2
查看完整版本: 如何取图框块的范围