一只傲娇喵 发表于 2023-11-28 15:27:12

如何新建一个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代码报错

hhh454 发表于 2023-11-28 16:32:44

用ap加载里面有启动项,是不是可以解决这个问题。

飞雪神光 发表于 2023-11-28 16:49:57

本帖最后由 飞雪神光 于 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:27

飞雪神光 发表于 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:34

hhh454 发表于 2023-11-28 16:32
用ap加载里面有启动项,是不是可以解决这个问题。

启动项可以保留函数,但是调用的时候还是在旧图纸上调用

lijiao 发表于 2023-11-28 17:02:45

这样做是不行的,因为lisp只在当前活动文档中运行,当你用lisp新建文档时,新文档就变成了活动文档,原来的lisp程序就停止运行了,直到你关闭了新文档,它才继续运行.
总之一句话,lisp是文档级别的,你需要用应用程序级别的语言(纯属个人揣摩出来的观点)

kozmosovia 发表于 2023-11-28 17:59:34

都是程序生成,明显不需要人为干预和图形界面。直接DBX生成就是了,何必再折腾开个DWG?

一只傲娇喵 发表于 2023-11-28 19:02:04

看来确实不好解决,那算了,想了个办法绕过去了

你有种再说一遍 发表于 2023-12-3 02:09:16

换到net,直接挂到全局

努.力 发表于 2023-12-3 11:04:35

不妨换种思路:
新建的文档,里面应该是空白无图元的吧?旧文档里面应该不是空白的吧?
那么就判断,如果无图元,就动作,有图元就不动作。论坛里有判断有无图元的代码…
页: [1] 2
查看完整版本: 如何新建一个dwg文件并运行lisp函数呢