明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3699|回复: 8

一直困扰着我的关于删除vl选择集的问题,请各位高手支招

[复制链接]
发表于 2010-12-18 20:50:46 | 显示全部楼层 |阅读模式
请见以下程序代码
   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)
  )
发表于 2010-12-18 22:56:40 | 显示全部楼层
本帖最后由 masterlong 于 2010-12-18 23:08 编辑

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


 楼主| 发表于 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)
  )

发表于 2010-12-21 02:16:01 | 显示全部楼层
这是因为你已经在主程序的外部重定义过*error*
所以后续的出错都将执行(vla-delete vlssetObj)这一句
请允许我大胆的猜测一下
你用的是笔记本而且只待机不关机

关闭CAD再打开
确定你其它的程序里
没有在主程序外部定义*error*
再加载这个程序看看
发表于 2010-12-21 07:24:15 | 显示全部楼层
路过,看看学习了
谢谢楼上
发表于 2010-12-22 10:56:11 | 显示全部楼层
路过,看看学习
发表于 2010-12-22 11:13:13 | 显示全部楼层
(defun *error*(msg)
  (setq *error* olderr)  
  (vla-delete vlssetObj)
)
发表于 2010-12-22 16:54:24 | 显示全部楼层
估计有一件事应该作,就是执行vla-delete之前,对vlssetobj进行检查,看是否是选择集对象,是否已经删除?
 楼主| 发表于 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 程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 18:22 , Processed in 0.165899 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表