Shoey 发表于 2022-7-5 18:24:03

自动加载和CUI问题

大家好
 
我有一个局部CUI菜单,其中有一个补充MNL文件。MNL文件包含一系列“自动加载”功能,例如:。
(自动加载“AddObjectsToBlockV1-1”(“ADD2BLOCK”“REMOVE”))
 
启动AutoCAD 2013及更早版本后,自动加载工作正常。
 
但在AutoCAD 2014中使用此功能时,有一个小问题,这让我感到困扰。
 
加载CUI后,命令行上会出现错误。此错误为-
; 错误:无函数定义:自动加载
 
我已经为此寻找了一个解决方案,但没有找到一个可以继续使用MNL文件的答案。
我发现的是使用阿卡多克。lsp/ACAD。lsp文件。
我还发现ACAD2014doc可能存在问题。lsp是否包含自动加载功能?
 
上述操作不会影响功能的加载,并且在从CUI的功能区激活命令时,这些功能都会起作用。
 
除此之外,我的MNL中还有大约80个自动加载功能。
如果这对AutoCAD性能有影响,有人能告诉我吗。是否推荐?我似乎没有注意到任何问题,但我的一位同事说,他的AutoCAD 2014和使用CUI/MNL存在性能问题。
 
此外,如果我将MNL文件中的所有自动加载函数复制并粘贴到命令行中,则不会出现上述错误。
 
感谢您的帮助。
 
当做
Shoey鞋

Lee Mac 发表于 2022-7-5 18:34:54

嗨Shoey,
 
随附的是我的AutoLISP自动加载函数版本(该函数的本机版本在acad20##doc.lsp的第178行定义)。
 
我的版本使用与内置函数完全相同的语法(因此您不需要更改现有的自动加载表达式),但与内置自动加载函数相比有几个优点:
 
[列表]
[*]我的版本处理正斜杠和双反斜杠文件路径分隔符。
(内置函数只能使用正斜杠分隔符)。
[/列表]
 
[列表]
[*]如果给定的应用程序文件中未定义命令列表参数中列出的命令,则我的版本不会导致无限递归循环(当达到堆栈限制时返回硬错误)。
[/列表]
自阿卡多克以来。lsp在任何MNL文件之前加载,在acad20##doc之后加载。lsp已加载,我建议从acaddoc加载附加功能。lsp,或将代码直接复制到您的acaddoc中。lsp。
 
我希望这有帮助;欢迎提出意见/建议。
自动加载。lsp

Shoey 发表于 2022-7-5 18:37:51

嗨,李
 
感谢您的回复、建议和代码。
 
我不知道如何将我现有的自动加载代码应用到您的代码中。
我是否放置此代码(自动加载“AddObjectsToBlockV1-1”(“ADD2BLOCK”“REMOVE”))
进入你的??
 
我要废除MNL吗?
 
一如既往,我们感谢您的帮助。
 
Shoey鞋

Lee Mac 发表于 2022-7-5 18:44:58

嗨Shoey,
 
我的代码旨在作为标准自动加载功能的替换定义,因此不需要以任何方式更改MNL文件中包含的现有代码。
 
因为所有MNL文件都是在阿卡多克之后加载的。lsp已加载,您可以保留现有MNL文件,并保持其包含的所有自动加载表达式不变。
 
只需执行以下操作:
 
[列表]
[*]将上述附加文件(autoload.lsp)保存到AutoCAD支持路径。
[/列表]
 
[列表]
[*]在AutoCAD命令行中,键入:(findfile "acaddoc.lsp")如果以上返回有效的文件路径,请导航到此文件路径,并在接下来的操作中修改现有的acaddoc。lsp文件。
[/列表]
 
[列表]
[*]如果上述表达式返回nil,请打开记事本并将文件另存为acaddoc。到AutoCAD支持路径的lsp
(确保将“另存为类型”设置为“所有文件”,就像处理任何其他LISP文件一样)。
[/列表]
 
[列表]
[*]在新的/现有的acaddoc中。lsp,键入以下内容:(load "autoload.lsp" "Unable to load autoload.lsp")并保存文件。
[/列表]
 
[列表]
[*]重新启动AutoCAD。
[/列表]

Shoey 发表于 2022-7-5 18:53:25

嗨,李
 
我已按照您的指示进行操作,但仍会显示错误消息。
我已将ACAD2014DOC重命名。lsp,使其不加载,并使用您的替换自动加载。lsp
 
如前所述,这不是一个问题,因为MNL中的程序确实加载和运行。
这只是一条令人讨厌的错误消息!
 
干杯,朋友。
 
Shoey鞋

Lee Mac 发表于 2022-7-5 18:59:33

 
我明白了-从您的报告中,似乎acad2014doc中未定义(或错误定义)标准自动加载功能。lsp,或启动时(在MNL文件之后)的后续代码加载正在覆盖或使自动加载定义无效。
 
我不建议重命名acad2014doc。lsp,因为该文件将包含AutoCAD所需的其他功能的定义。
 
但是,您有几个选择:
 
如果acad2014doc中未定义自动加载功能,则为真。lsp文件,你可以加载我的自动加载。acad中的lsp文件。lsp(如果该文件不存在,则创建该文件),因为它在acad20##文档之前加载。启动加载顺序中的lsp。但是,您还需要确保ACADLSPASDOC系统变量设置为1,以确保acad。为每个图形加载lsp文件。
 
或者,您可以将以下内容添加到acad2014doc中。lsp,定义标准自动加载功能后
(我相信在313号线上):
这将确保自动加载功能可用。
 
但是,对于阅读此线程的其他人,我要声明,不建议修改acad20。lsp或acad20##doc。lsp,因为任何修改都可以在Autodesk更新后覆盖。

Shoey 发表于 2022-7-5 19:01:32

我意识到不触摸或重命名任何定义的acad*的重要性。lsp功能。我重新命名了acad21014doc。lsp只是为了测试你的代码,我在测试时立即重新命名了它!
 
李,我向你道歉,因为你不得不花时间强调不重命名任何内置acad*的重要性。lsp启动文件发送给阅读此线程的其他用户。
我应该仔细考虑并重新阅读我的回复,以后的帖子也会这样做。
 
我会试试你的其他选择。
 
助教
Shoey鞋

Lee Mac 发表于 2022-7-5 19:07:44

一点问题都没有!

Shoey 发表于 2022-7-5 19:15:54

大家好
 
 
已离开,因此回复迟。
多亏了一位同事,最终解决了这个问题。
我们将自动加载函数附加到S::STARTUP函数中。
 
代码通常如下所示。。
 
 
(defun-q s::启动()
(自动加载“命令”(“CMD1”“CMD2”))
(普林斯)
)
 
 
错误消息-;错误:没有函数定义:自动加载现已消失!
 
 
助教
Shoey鞋
 
 
Ps-很抱歉没有按照论坛协议将代码放在上面的代码标签中。我似乎无法让他们工作时张贴。

rkmcswain 发表于 2022-7-5 19:19:54

 
李,你好!
 
我可以建议在您的网页上添加上述警告吗?
 
谢谢
页: [1] 2
查看完整版本: 自动加载和CUI问题