我有一个非常简洁的LISP,我在不久前发现它可以将所有外部参照绑定到图形。这一直在起作用,或者至少我认为它在起作用。我知道我可以确认它曾经是有效的。我还可以确认,如果我手动运行它,它将工作。。。刚刚测试过。但当它运行时,就会出现问题。
- (defun bind_xrefs ( / CMD)
- (setq oldBnType(getvar "bindtype"))
- (setq CMD (getvar "CMDECHO"))
- (setvar "CMDECHO" 0)
- (setvar "bindtype" 0)
- (setq XLIST (xref-status))
- (if XLIST
- (progn
- (prompt "\nBinding all Xrefs...")
- (foreach n XLIST (rem-xref n))
- (command "-xref" "b" "*" )
- (prompt "...done")(terpri)
- )
- )
- (setvar "CMDECHO" CMD)
- (setvar "bindtype" oldBnType)
- (princ)
- )
- (defun rem-xref ( XL / XNAME XSTATUS )
- (setq XNAME (nth 0 XL))
- (setq XSTATUS (nth 2 XL))
- (if (= XSTATUS "UNLOADED")
- (rem_unload)
- )
- (if (= XSTATUS "UNRESOLVED")
- (rem_unload)
- )
- )
- (defun xref-status ( / d n f r)
- (while (setq d (tblnext "block" (null d)))
- (cond
- (
- (eq 4 (logand 4 (cdr (assoc 70 d))))
- (setq
- d (entget (tblobjname "block" (cdr (assoc 2 d))))
- n (cdr (assoc 2 d))
- p (cdr (assoc 3 d))
- f (cdr (assoc 70 d))
- )
- (setq r
- (cons
- (list n p
- (cond
- ( (eq 32 (logand 32 f)) "LOADED")
- ( (assoc 71 d) "UNLOADED")
- ( t "UNRESOLVED")
- )
- )
- r
- )
- )
- )
- )
- )
- (reverse r)
- )
- (defun rem_unload ( / )
- (setq DFILE (findfile "dummy.dwg"))
- (if (not DFILE)
- (prompt "\nCannot find dummy_xref drawing ")
- (progn
- (command "-xref" "p" XNAME DFILE)
- (command "-xref" "r" XNAME)
- )
- )
- ); end bind_xrefs function
我的主LISP程序使用以下代码加载并运行此程序:
- (load "//long_novell_path/ACAD_Enterprise/VLISP/bind_xrefs.lsp")
- (bind_xrefs)
当主程序执行时,所有的事情都按计划发生,除了最后两行代码在它的末尾附近运行。当主程序结束时,我进行了检查,所有四个外部参照仍插入到图形中,未绑定。我在这些行附近切换了一个断点,并观察它逐步通过load命令和bind\u xrefs函数中的每一行。但显然它并没有绑定外部参照。
奇怪的是,如果我在命令窗口中手动输入最后两个命令,效果很好。但从主程序全速运行时,情况并非如此。更奇怪的是,在某个时刻,我可以用一品脱的吉尼斯黑啤酒发誓它奏效了。我们在过去检查了很多次,在文件保存并自动关闭之前,外部参照被动态绑定。几天前,一位用户来找我,抱怨她的客户看不到标题栏,反而看到了一条丢失的外部参照信息。所以我今天又开始测试了一次,如果我能弄清楚发生了什么变化,那我就该死了。 |