乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 111|回复: 3

[编程交流] 通过AUTOLISP打开DWG文件

[复制链接]

2

主题

2

帖子

0

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 17:32:35 | 显示全部楼层 |阅读模式
大家好
我有一个简单的任务要做:
-打开dwg文件,在特定点粘贴一个文本
-关闭文件
对于很多文件,我们可以再次这样做。
 
我用简单的autolisp代码尝试了很多不同的方法,但都奏效了。
 
谢谢你的帮助!
回复

使用道具 举报

48

主题

657

帖子

33

银币

限制会员

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

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 18:21:41 | 显示全部楼层
像这样未测试保存为脚本。
 
打开dwg1
(加载“mylisp”)
关闭y
打开dwg2
(加载“mylisp”)
关闭y
打开dwg3
(加载“mylisp”)
关闭y
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 18:45:31 | 显示全部楼层
这是可行的。我做过这样的事。
 
但有几件事你必须安排。
-您需要有一个lisp文件,该文件在图形打开时自动加载,然后自动执行该功能。
因此,您必须以某种方式区分哪些文件应该自动执行该功能,哪些不应该。例如,您可以给出一个文件夹列表。如果图形位于该文件夹中,则执行该功能。
自动加载lisp文件:
https://knowledge.autodesk.com/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/Automatically-load-AutoLISP-routines.html
 
这就像:
  1. ;; file "paste_text.lsp"
  2. (setq folders_to_autolaud (list
  3.   "c:\\myAutocadfiles\\demo\"
  4.   "c:\\myAutocadfiles\\demo2\"
  5. ))
  6. (defun paste_text (/)
  7.   ;; do the pasting here
  8.   ;; finish by closing the file
  9.   (command-s "._close" "_y")
  10. )
  11. (if (member (getvar "dwgprefix") folders_to_autolaud)
  12.   (paste_text)
  13. )

然后使用主文件加载该文件并执行命令OFPT
  1. ;; file "open_files_and_paste_text.lsp"
  2. (setq files_path "c:\\myAutocadfiles\\demo\")
  3. (setq list_of_files (list
  4.   "file1.dwg"
  5.   "file2.dwg"
  6.   "file3.dwg"
  7. ))
  8. (defun open_file (FileName ReadOnly / )
  9.     (vla-Open
  10.      (vla-get-Documents
  11.       (vlax-get-Acad-Object)
  12.      )
  13.      FileName
  14.      (if ReadOnly
  15.       :vlax-true
  16.       :vlax-false
  17.      )
  18.     )
  19. )
  20. (defun c:OFPT ( / i)
  21.   (setq i 0)
  22.   (repeat (length list_of_files)
  23.     ;; iterate over all files
  24.           (open_file (nth i list_of_files) nil)
  25.           (setq i (+ i 1))
  26.   )
  27.   (princ)
  28. )

这只是总体思路。这不是一个完整的、有效的例子。
 
您可能需要一些机制来减缓文件的打开速度,或者分批执行。你不希望100个打开的标签都在同一时间积极地做事情。
 
任何人,请随意对此进行扩展。
如果我有时间的话,我会看看完整的例子
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 13:35 , Processed in 0.490727 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表