Steparak 发表于 2022-7-6 17:32:35

通过AUTOLISP打开DWG文件

大家好
我有一个简单的任务要做:
-打开dwg文件,在特定点粘贴一个文本
-关闭文件
对于很多文件,我们可以再次这样做。
 
我用简单的autolisp代码尝试了很多不同的方法,但都奏效了。
 
谢谢你的帮助!

Steven P 发表于 2022-7-6 17:53:53

普通LISP的棘手之处在于,它在当前图形中运行,当该图形不再是当前图形时(例如,打开另一个图形),然后LISP停止。。。那么你可能已经打开了另一张图纸?没有粘贴文本。
 
如果你能编一个嘴唇把文字贴在你想要的地方,相当简单
(德芬。。。。
.. 创建文本或粘贴
).. 结束defun,几行
 
我想这对你来说需要一些时间
 
让它按您的意愿工作并避免VL:A命令,然后您可以查看核心控制台(它不做VLA,只做基本LISP)或脚本。
 
Lee Mac在他的网站上有一个很好的脚本编辑器,scriptpro(我想)-还有其他人也会这样做(我有一个类似的,永远还没有完成,其他事情会阻碍),运行脚本程序,指向LISP和文件,然后离开
 
与核心控制台类似,组成lisp并按此路线运行,它比脚本快一点
 
或把你写的Lisp程序的文字贴在下面,毫无疑问,你会得到建议,如何把它们结合在一起,进行大量的绘图

BIGAL 发表于 2022-7-6 18:21:41

像这样未测试保存为脚本。
 
打开dwg1
(加载“mylisp”)
关闭y
打开dwg2
(加载“mylisp”)
关闭y
打开dwg3
(加载“mylisp”)
关闭y

Emmanuel Delay 发表于 2022-7-6 18:45:31

这是可行的。我做过这样的事。
 
但有几件事你必须安排。
-您需要有一个lisp文件,该文件在图形打开时自动加载,然后自动执行该功能。
因此,您必须以某种方式区分哪些文件应该自动执行该功能,哪些不应该。例如,您可以给出一个文件夹列表。如果图形位于该文件夹中,则执行该功能。
自动加载lisp文件:
https://knowledge.autodesk.com/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/Automatically-load-AutoLISP-routines.html
 
这就像:
;; file "paste_text.lsp"

(setq folders_to_autolaud (list
"c:\\myAutocadfiles\\demo\\"
"c:\\myAutocadfiles\\demo2\\"
))

(defun paste_text (/)
;; do the pasting here

;; finish by closing the file
(command-s "._close" "_y")
)

(if (member (getvar "dwgprefix") folders_to_autolaud)
(paste_text)
)
然后使用主文件加载该文件并执行命令OFPT
;; file "open_files_and_paste_text.lsp"

(setq files_path "c:\\myAutocadfiles\\demo\\")
(setq list_of_files (list
"file1.dwg"
"file2.dwg"
"file3.dwg"
))

(defun open_file (FileName ReadOnly / )
    (vla-Open
   (vla-get-Documents
      (vlax-get-Acad-Object)
   )
   FileName
   (if ReadOnly
      :vlax-true
      :vlax-false
   )
    )
)

(defun c:OFPT ( / i)
(setq i 0)
(repeat (length list_of_files)
    ;; iterate over all files
          (open_file (nth i list_of_files) nil)
          (setq i (+ i 1))
)
(princ)
)
这只是总体思路。这不是一个完整的、有效的例子。
 
您可能需要一些机制来减缓文件的打开速度,或者分批执行。你不希望100个打开的标签都在同一时间积极地做事情。
 
任何人,请随意对此进行扩展。
如果我有时间的话,我会看看完整的例子
页: [1]
查看完整版本: 通过AUTOLISP打开DWG文件