遇到一个问题,块内对象的包围盒居然获取异常,请教下大佬们如何解决?

网友答: 本帖最后由 你有种再说一遍 于 2025-5-16 21:39 编辑
如果你是敲C#我会建议你去看IFox,
包围盒错误无非就是类型需要单独处理,
不处理就直接try了之后动态收集类型名称存set上面,
再用set直接过滤下次类型名,已达不反复发生异常信息.
可是你敲Lisp,那就肉眼保证类型.
常出现异常的类型:
点,射线,参照线,0长度多段线,无内容文字,天正...以及利用这些成员组块...
这种不具备包围盒的图元网友答: 块属性直接获取包围盒,其它对象的包围盒坐标网友答:
块属性直接获取包围盒,其它对象的包围盒坐标分别乘xyz比例再分别+块参照插入点坐标网友答:
谢谢回复,感觉有点复杂了,我换个思路解决吧网友答:
lisp:所见即所得
网友答:
;; 一炸解千愁
网友答: 炸开后 去包围盒 再返回去 这样的确是最简单的网友答:
(command "undo" "be");存档开始
(command "undo" "e");存档结束
也对,用这招,巧妙!网友答:
动态块就没得炸了... 炸了没法还原

- (defun c:gg()
- (setq blocks(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))))
- (setq en(car(entsel "选取一个图元:")))
- (setq obj(vlax-ename->vla-object en))
- (if(setq blkDef(vla-Item blocks(vla-get-Name obj)))
- (vlax-for x blkDef
- (if(equal(get_rgb x)'(0 0 0))
- (progn
- (vla-put-Color x 2)
- (vla-GetBoundingBox x 'minp 'maxp)
- (setq box(list(vlax-safearray->list minp)(vlax-safearray->list maxp)))
- )
- )
- )
- )
- (entmakex(list '(0 . "LINE")(cons 10 (car box))(cons 11(cadr box))))
- (print a)
- (princ)
- )
- ;---获取对象RGB值表
- (defun get_rgb(obj / c)
- (setq c(vla-get-TrueColor obj))
- (list
- (vla-get-Red c)
- (vla-get-Green c)
- (vla-get-Blue c)
- )
- )
网友答: 本帖最后由 你有种再说一遍 于 2025-5-16 21:39 编辑
如果你是敲C#我会建议你去看IFox,
包围盒错误无非就是类型需要单独处理,
不处理就直接try了之后动态收集类型名称存set上面,
再用set直接过滤下次类型名,已达不反复发生异常信息.
可是你敲Lisp,那就肉眼保证类型.
常出现异常的类型:
点,射线,参照线,0长度多段线,无内容文字,天正...以及利用这些成员组块...
这种不具备包围盒的图元网友答: 块属性直接获取包围盒,其它对象的包围盒坐标网友答:
wzg356 发表于 2025-5-16 23:32
块属性直接获取包围盒,其它对象的包围盒坐标
块属性直接获取包围盒,其它对象的包围盒坐标分别乘xyz比例再分别+块参照插入点坐标网友答:
wzg356 发表于 2025-5-16 23:35
块属性直接获取包围盒,其它对象的包围盒坐标分别乘xyz比例再分别+块参照插入点坐标
谢谢回复,感觉有点复杂了,我换个思路解决吧网友答:
你有种再说一遍 发表于 2025-5-16 21:37
如果你是敲C#我会建议你去看IFox,
包围盒错误无非就是类型需要单独处理,
不处理就直接try了之后动态收集 ...
lisp:所见即所得
网友答:
;; 一炸解千愁网友答: 炸开后 去包围盒 再返回去 这样的确是最简单的网友答:
guosheyang 发表于 2025-5-20 21:54
炸开后 去包围盒 再返回去 这样的确是最简单的
(command "undo" "be");存档开始
(command "undo" "e");存档结束
也对,用这招,巧妙!网友答:
xyp1964 发表于 2025-5-20 10:03
;; 一炸解千愁
动态块就没得炸了... 炸了没法还原