明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 742|回复: 8

[讨论] 当有n个dwg文件与MyA3.dwg打开时,如何实现输入命令让MyA3.dwg文件成为当前窗口

[复制链接]
发表于 2022-5-26 13:46 | 显示全部楼层 |阅读模式
本帖最后由 _Levin 于 2023-5-23 20:46 编辑

上传的lsp文件实现了打开MyA3.dwg文件
那么当有n个dwg文件与MyA3.dwg打开时,如何实现输入命令让MyA3.dwg文件成为当前窗口;在MyA3.dwg没有打开时,则是打开MyA3.dwg文件

已解决~




"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-5-26 14:28 | 显示全部楼层
  1. ;;;_$ (documents)
  2. ;;;(#<VLA-OBJECT IAcadDocument 0000020466025508> #<VLA-OBJECT IAcadDocument 000002046a090ac8>)
  3. (defun documents (/ r)
  4.   (vlax-for d (vla-get-documents
  5.                 (vla-get-application (vlax-get-acad-object))
  6.               )
  7.     (setq r (cons d r))
  8.   )
  9.   (reverse r)
  10. )
  11. ;;;_$ (document-getbyname "Drawing1.dwg")
  12. ;;;#<VLA-OBJECT IAcadDocument 0000020466025508>
  13. (defun document-getbyname (name / docs r)
  14.   (setq docs (documents))
  15.   (while docs
  16.     (if        (= name (vla-get-name (car docs)))
  17.       (setq r         (car docs)
  18.             docs nil
  19.       )
  20.     )
  21.     (setq docs (cdr docs))
  22.   )
  23.   r
  24. )

  25. (vla-activate (document-getbyname "Drawing1.dwg"))
回复 支持 1 反对 0

使用道具 举报

发表于 2022-5-26 15:27 | 显示全部楼层
发表于 2022-5-27 00:02 | 显示全部楼层
  1. ;; (ActivateDwg "abc.dwg")
  2. (defun ActivateDwg (dwgname / lst)
  3.   (vlax-for a (vla-get-documents
  4.                 (vla-get-application (vlax-get-acad-object))
  5.               )
  6.     (setq lst (cons (list a (vla-get-name a)) lst))
  7.   )
  8.   (if (setq lst (vl-remove-if '(lambda (x) (/= (cadr x) dwgname)) lst))
  9.     (vla-activate (caar lst))
  10.   )
  11. )
发表于 2022-5-27 18:42 | 显示全部楼层
(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "MyA3.dwg"))
发表于 2022-9-25 09:33 | 显示全部楼层
请教大家,怎么做到先检测是否已经打开了这个文件,否则会重复打开多个
发表于 2022-9-25 13:36 | 显示全部楼层
本帖最后由 nyistjz 于 2022-9-25 13:45 编辑

;激活特定文档 (ActivateDwg "abc.dwg")
(defun ActivateDwg (dwgname / lst)
  (vlax-for a *docs*
                (setq lst (cons (list a (vla-get-name a)) lst))
        )
  (if (setq lst (vl-remove-if '(lambda (x) (/= (cadr x) dwgname)) lst))
    (vla-activate (caar lst))
  )
        lst
)
(setq *ACAD* (vlax-get-acad-object ))
(setq *DOC* (vla-get-ActiveDocument *ACAD* ))
(setq *docs* (vla-get-Documents *ACAD*))
;激活或打开
(setq name "MyA3.dwg")
(if (setq file (findfile name))
        (while (null (ActivateDwg name)) (vla-open *docs* file))
        (princ "没有找到此文件!")
)
(princ)
发表于 2022-9-25 13:55 | 显示全部楼层
nyistjz 发表于 2022-9-25 13:36
;激活特定文档 (ActivateDwg "abc.dwg")
(defun ActivateDwg (dwgname / lst)
  (vlax-for a *docs*

谢谢帮忙,比如D:\1\1.dwg,运行后会不停的打开这个文件
发表于 2022-9-25 14:04 | 显示全部楼层
下面的代码可以判读并打开指定文档,不知道怎么激活为当前文档
(defun c:stl ()
(setq acadApp (vlax-get-acad-object)
     acadDocs (vla-get-documents acadApp)
)
     (if (= (VL-FILE-SYSTIME "d:/1/1.dwg") nil)
(alert "文件正在使用 ")
(vla-open acadDocs "d:/1/1.dwg"))
(princ))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 09:13 , Processed in 0.791125 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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