sunny_8848 发表于 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)
)


kucha007 发表于 2022-9-25 16:49:17

本帖最后由 kucha007 于 2022-9-25 16:54 编辑

试试这个




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



nyistjz 发表于 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)
)

nyistjz 发表于 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)

sunny_8848 发表于 2022-9-25 12:31:40

看到信息的挺多的,有能帮忙的吗

sunny_8848 发表于 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))

sunny_8848 发表于 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 ...

谢谢帮忙,效果很好

sunny_8848 发表于 2022-9-25 16:59:59

kucha007 发表于 2022-9-25 16:49
试试这个

谢谢帮忙,代码简单效果好

nyistjz 发表于 2022-9-25 17:13:46

kucha007 发表于 2022-9-25 16:49
试试这个

你这个牛逼plus

kucha007 发表于 2022-9-25 17:50:11

nyistjz 发表于 2022-9-25 17:13
你这个牛逼plus

互相学习
页: [1] 2
查看完整版本: 打开指定文档并设置为当前