lfe011969 发表于 2022-7-6 10:40:07

从模板fi开始绘制

有谁能告诉我为什么下面的代码无法基于模板启动新图形?
 
(defun msc_elec (templateName)
(setq templateName ("L:/MSC/Templates/msc_elec.dwt")
(vla-activate (vla-add (vla-get-documents (vlax-get-acad-object)) templateName))
(princ)
)
 
我从这段代码中得到的错误是:“错误:参数太少”
 
我从h t p://hyperpics获得了这段代码。博客。com/beyond\u the\u ui/autolispvisual\u lisp,并将其放在另一个lisp例程中,该例程接受用户输入,从列表框中选择正确的项目,然后触发调用模板文件的此函数。这是在AutoCAD 2009上。
 
另外,如果有更好的方法开始基于模板的绘图,那么我洗耳恭听。我甚至尝试在lisp例程中传递基本命令:
 
(defun msc_elec()
(command "new" "msc_elec.dwt")
(princ)
 
在本例中,它试图将“msc\u elec.dwt”作为命令传递,因此我得到“未知命令”msc\u elec.dwt。按F1键可获取帮助。”
 
谢谢
 
朗尼

The Buzzard 发表于 2022-7-6 10:46:22

(vl load com)在哪里?

lfe011969 发表于 2022-7-6 10:50:07

我在我的阿卡多克里面。lsp,所以它总是加载的。这不对吗?

The Buzzard 发表于 2022-7-6 10:52:28

我只是仔细检查了一下。

The Buzzard 发表于 2022-7-6 10:54:40

(setq templateName(findfile“L:/MSC/Templates/MSC\u elec.dwt”)
 
我想你错过了这个。但我不确定。

lfe011969 发表于 2022-7-6 10:58:09

谢谢我试试看。

lpseifert 发表于 2022-7-6 11:02:33

未经测试。。。但是试试看

(defun msc_elec (/ templateName)
(setq templateName "L:/MSC/Templates/msc_elec.dwt")
(vla-activate (vla-add (vla-get-documents (vlax-get-acad-object)) templateName))
(princ)
)

lfe011969 发表于 2022-7-6 11:06:51

lpseifert,你的代码成功了!!非常感谢。秃鹰,也谢谢你的帮助,我很感激。
 
因为我试图学习而不是仅仅复制代码,所以我看到您的代码之间的两个差异是这行中的反斜杠(我的代码中缺少):
 
(defun msc_elec (/ templateName)
 
这一行中模板路径周围的括号(我包含了它们,您没有):
 
(setq templateName "L:/MSC/Templates/msc_elec.dwt")
 
你能告诉我在第一部分中反斜杠是什么意思吗?为什么在第二部分中不需要用括号括住路径?我真的很感激。
 
顺便说一句,我在比较我的代码和你的代码时发现了一个错误。路径后缺少右括号。所以,即使我的代码逻辑很好,它仍然不会工作,我会在这里一整天,哈哈。

lpseifert 发表于 2022-7-6 11:08:51

也许不是最好的解释,但依我看。。。
 
/后面的参数是局部变量;之前的参数(或如果/不存在)是要传递给函数的参数(在运行函数之前预定义)
这会管用的
但是必须运行函数才能将变量传递给函数
不需要括号,因为您正在将变量templateName设置为字符串(由开引号和闭引号定义)。Lisp希望开括号后的第一件事是函数。

alanjt 发表于 2022-7-6 11:14:24

此选项已经存在,只需设置新的临时路径。
页: [1] 2
查看完整版本: 从模板fi开始绘制