明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1551|回复: 3

写晕了,迷路了,请各位高人指点迷津

[复制链接]
发表于 2006-11-26 18:18:00 | 显示全部楼层 |阅读模式

自己正写一个lsp,遇到了问题,百思不得其解,请请各位高人指点迷津。

就是如何在所有打开的图纸中调用xref命令实现所有打开图纸的外部引用文件自动reload

然后再调用一次,实现邦定所有引用文件。

好像vlr函数能实现,但是小弟用不好,请指教

发表于 2006-11-27 22:58:00 | 显示全部楼层

(defun c:test ()
  (setq doc (vla-get-activeDocument (vlax-get-acad-object))
 n   0
  )
  (while (< n (vla-get-count (vla-get-blocks doc)))
    (setq block (vla-item (vla-get-blocks doc) n))
    (if
      (= (vla-get-isxref block) :vlax-true)
       (vla-reload block)
    )
    (setq n (1+ n))
  )
)

上面代码可一次更新当前图档中所有外部参照,稍加修改就可以实现你所说的功能!

 楼主| 发表于 2006-11-29 18:01:00 | 显示全部楼层

谢谢楼上的兄弟

谢谢楼上的兄弟

还记得这个吧,

(defun c:test ()
  (setq docs (vla-get-Documents (vlax-get-acad-object))
  )
  (vlax-for cendoc docs
    (vla-purgeall cendoc)
    (vla-save cendoc)
  )
)

大侠能否辛苦一下,把这两个lisp的功能整合一下,就是可以实现下面的功能:

在已经打开的所有dwg文件中自动循环完成:重载所有引用文件再邦定所有引用,然后purge一下,并原名保存,最后自动关闭,直到autocad中没有已经打开的图纸为止。

拜托大侠了,小弟最近一直在做这个工作,没有进展。

发表于 2006-11-29 22:36:00 | 显示全部楼层

(defun c:test ()
      (setq docs (vla-get-Documents (vlax-get-acad-object))
      )
      (vlax-for cendoc docs
 (vla-purgeall cendoc)
 (vla-save cendoc)
 (if (= (vla-get-active cendoc) :vlax-true)
   (vlax-for block (vla-get-blocks cendoc)
     (if
       (= (vla-get-isxref block) :vlax-true)
        (vla-reload block)
     )
   )
   (vla-close cendoc)
 )
      )
    )

这是我提供的代码,不过有下面两个限制:

1.只能重载当前活动窗口中的外部引用,本人试过很多次都无法重载其他窗口中的外部引用,不知道是本人的水平问题,还是ACAD本身的局限!

2.无法关闭当前活动窗口,我试过很多方法,都无法实现,除非直接退出ACAD,不知道还有没有其他方法!

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

本版积分规则

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

GMT+8, 2025-9-19 03:52 , Processed in 0.203168 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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