乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 80|回复: 1

[编程交流] LISP代码异常

[复制链接]

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-6 06:19:45 | 显示全部楼层 |阅读模式
我有一个非常简洁的LISP,我在不久前发现它可以将所有外部参照绑定到图形。这一直在起作用,或者至少我认为它在起作用。我知道我可以确认它曾经是有效的。我还可以确认,如果我手动运行它,它将工作。。。刚刚测试过。但当它运行时,就会出现问题。
 
  1. (defun bind_xrefs ( / CMD)
  2. (setq oldBnType(getvar "bindtype"))
  3. (setq CMD (getvar "CMDECHO"))
  4. (setvar "CMDECHO" 0)
  5. (setvar "bindtype" 0)
  6. (setq XLIST (xref-status))
  7. (if XLIST
  8.    (progn
  9.      (prompt "\nBinding all Xrefs...")
  10.      (foreach n XLIST (rem-xref n))  
  11.      (command "-xref" "b" "*" )
  12.      (prompt "...done")(terpri)
  13.    )  
  14. )
  15. (setvar "CMDECHO" CMD)
  16. (setvar "bindtype" oldBnType)
  17. (princ)
  18. )
  19. (defun rem-xref ( XL / XNAME XSTATUS )
  20. (setq XNAME (nth 0 XL))
  21. (setq XSTATUS (nth 2 XL))
  22. (if (= XSTATUS "UNLOADED")
  23.    (rem_unload)
  24. )
  25. (if (= XSTATUS "UNRESOLVED")
  26.    (rem_unload)
  27. )
  28. )
  29. (defun xref-status ( / d n f r)
  30. (while (setq d (tblnext "block" (null d)))
  31.    (cond
  32.      (
  33.        (eq 4 (logand 4 (cdr (assoc 70 d))))
  34.        (setq
  35.          d (entget (tblobjname "block" (cdr (assoc 2 d))))
  36.          n (cdr (assoc 2 d))
  37.          p (cdr (assoc 3 d))
  38.          f (cdr (assoc 70 d))
  39.        )
  40.        (setq r
  41.          (cons
  42.            (list n p
  43.              (cond
  44.                ( (eq 32 (logand 32 f)) "LOADED")
  45.                ( (assoc 71 d) "UNLOADED")
  46.                ( t "UNRESOLVED")
  47.              )
  48.            )
  49.            r
  50.          )
  51.        )
  52.      )
  53.    )
  54. )
  55. (reverse r)
  56. )
  57. (defun rem_unload ( / )
  58. (setq DFILE (findfile "dummy.dwg"))
  59. (if (not DFILE)
  60.    (prompt "\nCannot find dummy_xref drawing ")
  61.    (progn
  62.      (command "-xref" "p" XNAME DFILE)
  63.      (command "-xref" "r" XNAME)
  64.    )
  65. )
  66. ); end bind_xrefs function

 
我的主LISP程序使用以下代码加载并运行此程序:
 
  1.      (load "//long_novell_path/ACAD_Enterprise/VLISP/bind_xrefs.lsp")
  2.      (bind_xrefs)

 
当主程序执行时,所有的事情都按计划发生,除了最后两行代码在它的末尾附近运行。当主程序结束时,我进行了检查,所有四个外部参照仍插入到图形中,未绑定。我在这些行附近切换了一个断点,并观察它逐步通过load命令和bind\u xrefs函数中的每一行。但显然它并没有绑定外部参照。
 
奇怪的是,如果我在命令窗口中手动输入最后两个命令,效果很好。但从主程序全速运行时,情况并非如此。更奇怪的是,在某个时刻,我可以用一品脱的吉尼斯黑啤酒发誓它奏效了。我们在过去检查了很多次,在文件保存并自动关闭之前,外部参照被动态绑定。几天前,一位用户来找我,抱怨她的客户看不到标题栏,反而看到了一条丢失的外部参照信息。所以我今天又开始测试了一次,如果我能弄清楚发生了什么变化,那我就该死了。
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-6 07:36:22 | 显示全部楼层
好的,我想我可能发现了一些与原来不同的东西。在执行绑定操作之前,LISP程序会删除两个布局选项卡。起初,这些布局选项卡只是空白页,上面有一个简单的边框。不久前,另一个外部参照(标题栏)被添加到两个布局中。删除这些选项卡时,其上的外部参照将变为未参照,因此在尝试绑定其他外部参照时,这两个选项卡会导致某种冲突。因此,为什么它曾经有效,但现在不再有效。我刚刚测试并证实了这个假设。为了解决这个问题,我切换了命令的顺序,首先绑定,然后删除两个布局选项卡。
 
这一点很长时间都没有被注意到,因为只有在99%的时间里只请求PDF的web用户才会受到影响。当用户突然想要更多的DWG文件除了PDF的,它变得引人注目。
 
生活和学习!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 18:37 , Processed in 0.383903 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表