acad。lsp和阿卡多克。lsp带
我正在使用acad吗。lsp和阿卡多克。lsp差?我正在使用defun-q并附加S::STARTUP(根据帮助文件)。总的来说,这很管用。
唯一的问题是他们是否有局部变量。在autocad启动时,acad。lsp被添加到S::STARTUP。然后是阿卡多克。lsp被添加到S::STARTUP。为了便于论证,让我们假设acad。lsp是S::启动中的第一件事(之前什么都没有)。在这种情况下,acad。lsp函数将正常加载,然后S::启动将取消,因为它从acaddoc读取(/局部变量)行。lsp现在处于S::启动的中间位置,不再定义为局部变量。当然,误差是一个数字零,因为它将其视为除法。
我希望这一切都有意义。你们有什么建议或其他方法可以尝试吗?谢谢你的帮助。
p、 阿卡多克。启动后,当acad时,lsp在任何后续打开的图形上都可以正常加载。lsp未加载。。。所以我很肯定,是S::启动中间显示的局部变量导致了错误。 我觉得ACAD有问题。lsp,而不是S::Startup。。。除非你发代码,否则我不能确定。
也就是说,我也觉得你误解了如何正确使用ACAD。lsp,阿卡多克。lsp和S::启动。如果你同时控制两个ACAD,我不确定你为什么需要S::启动。lsp和阿卡多克。lsp文件。
很快,这里有一个总结:
ACAD。lsp-默认情况下,每个会话加载一次的用户定义的LISP文件(取决于ACADLSPASDOC系统变量的状态)。
阿卡多克。lsp-用户定义的LISP文件,每次打开图形时加载一次。
SS:启动-启动过程中的一个步骤
启动顺序:
来源
HTH公司 感谢您的回复和序列信息。我正在使用acad。lsp和阿卡多克。lsp,以防我们想要包括任何(命令…)电话。如我所知,如果我们添加其中任何一项,它需要在初始化之后运行。在任何情况下,这两个例程都有效。。。。。。如果我们包括局部变量,就不是这样了。我想我可以去掉局部变量,生成更长的代码行。。。。或者我可以在不附加S::STARTUP的情况下同时运行这两个命令,但我需要避免(命令…)代码中的行。
以下是acad。lsp和阿卡多克。我现在正在测试的lsp文件。在程序启动时,S::startup将从acad运行代码。lsp,然后在acaddoc的(/*error*loginlsp)处停止。lsp。如果我然后开始一个新的绘图,代码在阿卡多克。lsp加载良好,因为(/*error*loginlsp)现在位于S::STARTUP的顶部。有什么意见/想法吗?谢谢
;;acad.lsp
(defun-q acadSTART ( / *error* )
(defun *error* (msg)
(setvar "cmdecho" 1)
(princ (strcat "\n " msg))
(princ)
)
(setvar "cmdecho" 0)
(load "I:\\lja-std\\ACAD\\Lisp\\Check-Paths.lsp" "Check-Paths not loaded")
(prompt "\n acad.lsp loaded")
(setvar "cmdecho" 1)
(princ)
);end defun-q acadStart
(setq S::STARTUP (append S::STARTUP acadSTART)
;;acaddoc.lsp
(defun-q acaddocSTARTUP ( / *error* loginlsp )
;;error handler
(defun *error* (msg)
(setvar "cmdecho" 1)
(princ (strcat "\n " msg))
(princ)
)
(setvar "cmdecho" 0)
;;load commonly used standard lisp routines
(load "I:\\lja-std\\ACAD\\Lisp\\LID.lsp" "LID not loaded")
(load "I:\\lja-std\\ACAD\\Lisp\\RVIEW.lsp" "RVIEW not loaded")
(load "I:\\lja-std\\ACAD\\Lisp\\RVIEW2.lsp" "RVIEW2 not loaded")
(load "I:\\lja-std\\ACAD\\Lisp\\DVIEW2.lsp" "DVIEW2 not loaded")
;;User startup routine (user routine should be located in the User_Customizations
;;folder and named "userlogin".lsp - example rharenberg.lsp)
(setq loginlsp (strcat (getvar "loginname") ".lsp"))
(if
(not
(=
(findfile
(strcat "I:\\ljastd\\ACAD\\User_Customizations\\"(getvar"loginname")"\\"loginlsp)) nil
)
)
(load (strcat "I:\\lja-std\\ACAD\\User_Customizations\\"(getvar "loginname")"\\"loginlsp) "user lisp not loaded")
)
(prompt "\n acaddoc.lsp loaded")
(setvar "cmdecho" 1)
(princ)
);;end defun-q acaddocSTARTUP
(setq S::STARTUP (append S::STARTUP acaddocSTARTUP))
我不确定你从哪里得到“在ACAD期间不要使用命令调用”。lsp/阿卡多克。lsp加载位。。。在定义自定义函数(使用DEFUN)或在绘图打开时自动老化一系列步骤方面,我从来没有遇到过任何问题。
如果出于某种原因,您遇到特定命令调用的问题,请尝试在此处记录哪些命令,以便我们可以更好地帮助您推断问题。可能您调用的命令尚未初始化,因为关键MNL文件尚未加载?不太确定。你能提供的信息越多,获得解决方案的可能性就越大。
另外,如果需要在加载/初始化所有其他文件后调用命令,请考虑使用/B启动开关调用脚本文件。 我从帮助文件中获得了这些信息:
启动LISP文件(acad.lsp、acaddoc.lsp和MNL)在图形完全初始化之前都加载到内存中。通常,这不会造成问题,除非您想使用命令功能,该功能在图形初始化之前不能保证工作
在任何情况下,由于您没有或听说过仅使用defun的任何问题,我将遵循这条路线。我已经更改了例程,不再使用S::Startup-到目前为止没有问题。如果命令调用有任何问题,我会重新发布(很可能是我在阅读上面的帮助文件部分时担心未知的问题)。
再次感谢您的帮助。 别担心;我将尝试深入了解初始化,但这意味着什么(根据我的经验)与您编写的实际代码无关,代表了我在通过ACADDOC调用例程时遇到的一个问题。从图纸集管理器(SSM)而不是使用标准的“打开文件”对话框打开lsp时。
在这种情况下,我可以通过在绘图区域内单击鼠标成功地初始化绘图,然后触发例程按需运行。希望这是有道理的。
页:
[1]