明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 983|回复: 11

[提问] 打开指定文档并设置为当前

[复制链接]
发表于 2022-9-25 09:49:20 | 显示全部楼层 |阅读模式
请教大家修改下面代码,在论坛看到下面代码打开指定文件,但没有判断已经打开的情形,会重复打开。
(defun c:tt ()
  (vl-load-com)
  (setq acadobject(vlax-get-acad-object))
  (setq acaddocument(vla-get-activedocument acadobject))
  (setq documents(vla-get-documents(vla-get-application acaddocument)))
    (vla-open documents"D:\\1\\Drawing1.dwg")
  (princ)
  )


发表于 2022-9-25 16:49:17 | 显示全部楼层
本帖最后由 kucha007 于 2022-9-25 16:54 编辑

试试这个

  1. (defun c:TT nil
  2.     (vl-load-com)(setvar "cmdecho" 0)
  3.     (vlax-invoke (vlax-get-or-create-object "Wscript.Shell") 'RUN
  4.         "C:\\Test.dwg" ;这里替换为指定文件的路径
  5.     )
  6.     (setvar "cmdecho" 1)(princ)
  7. )



评分

参与人数 2明经币 +2 收起 理由
nyistjz + 1 很给力!
sunny_8848 + 1 强大!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-25 16:00:10 | 显示全部楼层
本帖最后由 nyistjz 于 2022-9-25 16:03 编辑



(setq *ACAD* (vlax-get-acad-object ))
(setq *DOC* (vla-get-ActiveDocument *ACAD* ))
(setq *docs* (vla-get-Documents *ACAD*))

(defun av:gotodwg(file / activate ext fname name)
        (defun Activate (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
        )
        (cond
                ((setq file (findfile file))
                        (setq name (vl-filename-base file))
                        (setq ext (vl-filename-extension file))
                        (setq fname (strcat name ext))
                        (while (null (Activate fname)) (vla-open *docs* file))
                )
                (t (princ "没有找到此文件!"))
        )
)

(defun c:tt(/ file)
        (setq file "d:\\1\\1.dwg")
        ;(setq file "MyA3.dwg")
        (av:gotodwg file)
)

评分

参与人数 1明经币 +1 收起 理由
sunny_8848 + 1 很给力!

查看全部评分

发表于 2022-9-25 13:30:56 | 显示全部楼层
本帖最后由 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 12:31:40 | 显示全部楼层
看到信息的挺多的,有能帮忙的吗
 楼主| 发表于 2022-9-25 14:08:21 | 显示全部楼层
nyistjz 发表于 2022-9-25 13:30
;激活特定文档 (ActivateDwg "abc.dwg")
(defun ActivateDwg (dwgname / lst)
  (vlax-for a *docs*

谢谢帮忙,会不停的打开指定文档,需要判断是否已经打开。
下面的代码只打开一个文档,但不知道怎么激活为当前文档:

(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))
 楼主| 发表于 2022-9-25 16:57:15 | 显示全部楼层
nyistjz 发表于 2022-9-25 16:00
(setq *ACAD* (vlax-get-acad-object ))
(setq *DOC* (vla-get-ActiveDocument *ACAD* ))
(setq *doc ...

谢谢帮忙,效果很好
 楼主| 发表于 2022-9-25 16:59:59 | 显示全部楼层

谢谢帮忙,代码简单效果好
发表于 2022-9-25 17:13:46 | 显示全部楼层

你这个牛逼plus
发表于 2022-9-25 17:50:11 | 显示全部楼层

互相学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 19:36 , Processed in 0.194125 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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