如何新建一个dwg文件并运行lisp函数呢
大佬们,现在想用lisp新建一个dwg文件然后在新建的dwg里面生成一些图元,(这些图元可以使用写好的函数生成,也就是需要再新创建的文件中调用函数)但是现在新建之后调用不到这个函数比如
(defun run-lisp-in-new-dwg (new-dwg-name)
(setq app (vlax-get-acad-object))
(setq docs (vla-get-documents app))
; 创建新文档并指定文件名
(setq doc_new (vla-add docs "acad.dwt"))
(vla-saveas doc_new new-dwg-name)
; 在新文档中执行LISP代码
(vl-cmdf "(setq x 10)") ; 这里是一个简单的示例,你可以替换为你想要运行的LISP代码
; 保存并关闭新文档
(vla-saveas doc_new)
(vla-close doc_new)
)
这段代码前面创建没有问题,运行lisp代码报错
用ap加载里面有启动项,是不是可以解决这个问题。 本帖最后由 飞雪神光 于 2023-11-28 16:54 编辑
变量 LISPINIT 和 SDI 也许可以
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188927&page=1#pid963431
这里用了这两个变量 可以跨图纸保留已加载函数
飞雪神光 发表于 2023-11-28 16:49
变量 LISPINIT 和 SDI 也许可以
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=188927&page=1#pid963 ...
函数是可以保留的,就是不能直接调用到,写的调用函数代码会作用在旧图纸上 hhh454 发表于 2023-11-28 16:32
用ap加载里面有启动项,是不是可以解决这个问题。
启动项可以保留函数,但是调用的时候还是在旧图纸上调用 这样做是不行的,因为lisp只在当前活动文档中运行,当你用lisp新建文档时,新文档就变成了活动文档,原来的lisp程序就停止运行了,直到你关闭了新文档,它才继续运行.
总之一句话,lisp是文档级别的,你需要用应用程序级别的语言(纯属个人揣摩出来的观点) 都是程序生成,明显不需要人为干预和图形界面。直接DBX生成就是了,何必再折腾开个DWG? 看来确实不好解决,那算了,想了个办法绕过去了 换到net,直接挂到全局 不妨换种思路:
新建的文档,里面应该是空白无图元的吧?旧文档里面应该不是空白的吧?
那么就判断,如果无图元,就动作,有图元就不动作。论坛里有判断有无图元的代码…
页:
[1]
2