一直困扰着我的关于删除vl选择集的问题,请各位高手支招
请见以下程序代码1.为了程序在中途退出后能再顺利执行程序,避免出现"Automation 错误。 命名选择集已存在"的错误,我加了这个error程序
2.但是加了error子程序后,后续所有其他程序的出错信息都变成"错误: *error* 函数中出错Automation 错误。 选择集已被删除"
不知各位高手在以上有没有更好的处理办法?
有没有办法在以下新建选择集前先判断选择集是否已存在,如存在就删掉选择集先,然后再新建选择集
(defun *error*(msg) ;为了程序在中途退出后能再顺利执行程序,避免出现"Automation 错误。 命名选择集已存在"的错误
(vla-delete vlssetObj);我加了这个error程序
)
(defun c:vlss()
(vl-load-com)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
mSpace (vla-get-ModelSpace AcadDocument))
(setq vlssetObj (vla-add (vla-get-SelectionSets AcadDocument) "vlss1"))
(setq mode acSelectionSetFence)
(setq pntarray (vlax-make-safearray vlax-vbDouble '(0 . 11)))
(vlax-safearray-fill pntarray '(10 10 0 20 20 0 30 30 0 40 40 0))
(vla-selectbypolygon vlssetObj mode pntarray)
(vlax-for vlaObj vlssetObj
(vla-put-color vlaObj acRed)
)
(getpoint) ;比如我在这里按了esc强行退出程序
(vla-delete vlssetObj)
(princ)
)
本帖最后由 masterlong 于 2010-12-18 23:08 编辑
(defun c:vlss()
(setq olderr *error*)
(defun *error*(msg)
....
)
....
(setq *error* olderr)
)
感谢楼上的回复,可是我按楼上的指点改程序,还会出现:后续所有其他程序的出错信息都变成"错误: *error* 函数中出错Automation 错误。 选择集已被删除"
(defun c:vlss()
(setq olderr *error*)
(defun *error*(msg)
(vla-delete vlssetObj)
)
(vl-load-com)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
mSpace (vla-get-ModelSpace AcadDocument))
(setq vlssetObj (vla-add (vla-get-SelectionSets AcadDocument) "vlss1"))
(setq mode acSelectionSetFence)
(setq pntarray (vlax-make-safearray vlax-vbDouble '(0 . 11)))
(vlax-safearray-fill pntarray '(10 10 0 20 20 0 30 30 0 40 40 0))
(vla-selectbypolygon vlssetObj mode pntarray)
(vlax-for vlaObj vlssetObj
(vla-put-color vlaObj acRed)
)
(getpoint)
(vla-delete vlssetObj)
(setq *error* olderr)
(princ)
)
这是因为你已经在主程序的外部重定义过*error*
所以后续的出错都将执行(vla-delete vlssetObj)这一句
请允许我大胆的猜测一下
你用的是笔记本而且只待机不关机
关闭CAD再打开
确定你其它的程序里
没有在主程序外部定义*error*
再加载这个程序看看 路过,看看学习了
谢谢楼上 路过,看看学习 (defun *error*(msg)
(setq *error* olderr)
(vla-delete vlssetObj)
)
估计有一件事应该作,就是执行vla-delete之前,对vlssetobj进行检查,看是否是选择集对象,是否已经删除? 现在我在acad.lsp里面加了一个error
(defun *error*(msg)
(princ "取消")
)
然后在其他程序里这样处理
(defun 程序()
(setq olderr *error*)
(defun *error*(msg)
(setq *error* olderr)
(vla-delete vlssetObj)
)
... ...
... ...
(vla-delete vlssetObj)
(setq *error* olderr)
);end of 程序
页:
[1]