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


  1. (defun c:gg()
  2.   (setq blocks(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object))))
  3.   (setq en(car(entsel "选取一个图元:")))
  4.   (setq obj(vlax-ename->vla-object en))
  5.   (if(setq blkDef(vla-Item blocks(vla-get-Name obj)))
  6.     (vlax-for x blkDef
  7.       (if(equal(get_rgb x)'(0 0 0))
  8.         (progn
  9.           (vla-put-Color x 2)
  10.           (vla-GetBoundingBox x 'minp 'maxp)
  11.           (setq box(list(vlax-safearray->list minp)(vlax-safearray->list maxp)))
  12.         )
  13.       )
  14.     )
  15.   )
  16.   (entmakex(list '(0 . "LINE")(cons 10 (car box))(cons 11(cadr box))))
  17.   (print a)
  18.   (princ)
  19. )
  20. ;---获取对象RGB值表
  21. (defun get_rgb(obj / c)
  22.   (setq c(vla-get-TrueColor obj))
  23.   (list
  24.     (vla-get-Red c)
  25.     (vla-get-Green c)
  26.     (vla-get-Blue c)
  27.   )
  28. )



网友答: 本帖最后由 你有种再说一遍 于 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
;; 一炸解千愁

动态块就没得炸了... 炸了没法还原
  • 上一篇:读取图块尺寸
  • 下一篇:没有了