logoin 发表于 2010-12-18 20:50:46

一直困扰着我的关于删除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 22:56:40

本帖最后由 masterlong 于 2010-12-18 23:08 编辑

(defun c:vlss()
   (setq olderr *error*)
   (defun *error*(msg)
   ....
   )
   ....
   (setq *error* olderr)
)


logoin 发表于 2010-12-19 22:32:00

感谢楼上的回复,可是我按楼上的指点改程序,还会出现:后续所有其他程序的出错信息都变成"错误: *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)
)

masterlong 发表于 2010-12-21 02:16:01

这是因为你已经在主程序的外部重定义过*error*
所以后续的出错都将执行(vla-delete vlssetObj)这一句
请允许我大胆的猜测一下
你用的是笔记本而且只待机不关机

关闭CAD再打开
确定你其它的程序里
没有在主程序外部定义*error*
再加载这个程序看看

461045462 发表于 2010-12-21 07:24:15

路过,看看学习了
谢谢楼上

waterchen 发表于 2010-12-22 10:56:11

路过,看看学习

waterchen 发表于 2010-12-22 11:13:13

(defun *error*(msg)
(setq *error* olderr)
(vla-delete vlssetObj)
)

liu_kunlun 发表于 2010-12-22 16:54:24

估计有一件事应该作,就是执行vla-delete之前,对vlssetobj进行检查,看是否是选择集对象,是否已经删除?

logoin 发表于 2010-12-28 20:09:33

现在我在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]
查看完整版本: 一直困扰着我的关于删除vl选择集的问题,请各位高手支招