_Levin 发表于 2022-5-26 13:46:40

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

本帖最后由 _Levin 于 2023-5-23 20:46 编辑

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

已解决~




vectra 发表于 2022-5-26 14:28:20

;;;_$ (documents)
;;;(#<VLA-OBJECT IAcadDocument 0000020466025508> #<VLA-OBJECT IAcadDocument 000002046a090ac8>)
(defun documents (/ r)
(vlax-for d (vla-get-documents
                (vla-get-application (vlax-get-acad-object))
              )
    (setq r (cons d r))
)
(reverse r)
)
;;;_$ (document-getbyname "Drawing1.dwg")
;;;#<VLA-OBJECT IAcadDocument 0000020466025508>
(defun document-getbyname (name / docs r)
(setq docs (documents))
(while docs
    (if        (= name (vla-get-name (car docs)))
      (setq r       (car docs)
          docs nil
      )
    )
    (setq docs (cdr docs))
)
r
)

(vla-activate (document-getbyname "Drawing1.dwg"))

自贡黄明儒 发表于 2022-5-26 15:27:41

本帖最后由 自贡黄明儒 于 2022-5-26 15:56 编辑

打开了多个文件(defun MJ:ActivateDrawing (),使一个文件当前,相当于

xyp1964 发表于 2022-5-27 00:02:21


;; (ActivateDwg "abc.dwg")
(defun ActivateDwg (dwgname / lst)
(vlax-for a (vla-get-documents
                (vla-get-application (vlax-get-acad-object))
              )
    (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))
)
)

陨落 发表于 2022-5-27 18:42:23

(vla-activate (vla-item (vla-get-documents (vlax-get-acad-object)) "MyA3.dwg"))

sunny_8848 发表于 2022-9-25 09:33:00

请教大家,怎么做到先检测是否已经打开了这个文件,否则会重复打开多个

nyistjz 发表于 2022-9-25 13:36:42

本帖最后由 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 13:55:56

nyistjz 发表于 2022-9-25 13:36
;激活特定文档 (ActivateDwg "abc.dwg")
(defun ActivateDwg (dwgname / lst)
(vlax-for a *docs*


谢谢帮忙,比如D:\1\1.dwg,运行后会不停的打开这个文件

sunny_8848 发表于 2022-9-25 14:04:58

下面的代码可以判读并打开指定文档,不知道怎么激活为当前文档
(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))
页: [1]
查看完整版本: 当有n个dwg文件与MyA3.dwg打开时,如何实现输入命令让MyA3.dwg文件成为当前窗口