明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 601|回复: 10

[提问] 如何新建一个dwg文件并运行lisp函数呢

[复制链接]
发表于 2023-11-28 15:27 | 显示全部楼层 |阅读模式
大佬们,现在想用lisp新建一个dwg文件然后在新建的dwg里面生成一些图元,(这些图元可以使用写好的函数生成,也就是需要再新创建的文件中调用函数)但是现在新建之后调用不到这个函数



比如


  1. (defun run-lisp-in-new-dwg (new-dwg-name)
  2.   (setq app (vlax-get-acad-object))
  3.   (setq docs (vla-get-documents app))

  4.   ; 创建新文档并指定文件名
  5.   (setq doc_new (vla-add docs "acad.dwt"))
  6.   (vla-saveas doc_new new-dwg-name)

  7.   ; 在新文档中执行LISP代码
  8.   (vl-cmdf "(setq x 10)") ; 这里是一个简单的示例,你可以替换为你想要运行的LISP代码
  9.   ; 保存并关闭新文档
  10.   (vla-saveas doc_new)
  11.   (vla-close doc_new)
  12. )
这段代码前面创建没有问题,运行lisp代码报错
发表于 2023-11-28 16:32 | 显示全部楼层
用ap加载里面有启动项,是不是可以解决这个问题。
发表于 2023-11-28 16:49 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-11-28 16:54 编辑

变量 LISPINIT 和 SDI 也许可以
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188927&page=1#pid963431
这里用了这两个变量 可以跨图纸保留已加载函数
 楼主| 发表于 2023-11-28 16:59 | 显示全部楼层
飞雪神光 发表于 2023-11-28 16:49
变量 LISPINIT 和 SDI 也许可以
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188927&page=1#pid963 ...

函数是可以保留的,就是不能直接调用到,写的调用函数代码会作用在旧图纸上
 楼主| 发表于 2023-11-28 17:00 | 显示全部楼层
hhh454 发表于 2023-11-28 16:32
用ap加载里面有启动项,是不是可以解决这个问题。

启动项可以保留函数,但是调用的时候还是在旧图纸上调用
发表于 2023-11-28 17:02 | 显示全部楼层
这样做是不行的,因为lisp只在当前活动文档中运行,当你用lisp新建文档时,新文档就变成了活动文档,原来的lisp程序就停止运行了,直到你关闭了新文档,它才继续运行.
总之一句话,lisp是文档级别的,你需要用应用程序级别的语言(纯属个人揣摩出来的观点)
发表于 2023-11-28 17:59 | 显示全部楼层
都是程序生成,明显不需要人为干预和图形界面。直接DBX生成就是了,何必再折腾开个DWG?
 楼主| 发表于 2023-11-28 19:02 | 显示全部楼层
看来确实不好解决,那算了,想了个办法绕过去了
发表于 2023-12-3 02:09 来自手机 | 显示全部楼层
换到net,直接挂到全局
发表于 2023-12-3 11:04 | 显示全部楼层
不妨换种思路:
新建的文档,里面应该是空白无图元的吧?旧文档里面应该不是空白的吧?
那么就判断,如果无图元,就动作,有图元就不动作。论坛里有判断有无图元的代码…
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 20:33 , Processed in 0.378997 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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