LISP运行良好,除非它被调用。网
我正试图追踪这只虫子,我想问问船员们是否有人见过这种东西。我有一个LISP程序,可以创建图形。多年来一直运转良好。我最近添加了一个C#。NET项目,该项目启动AutoCAD,然后加载并运行此LISP。这似乎很有效,但今天早上我遇到了一个问题。图形开始创建,但突然停止。如果我单击鼠标,它会再次拾取。但这不好,因为这应该是一个完全自动化的过程,不允许用户输入因此,我打开AutoCAD,设置所需的变量,并观察LISP的运行。它一直运行得很完美。然后我在上面尝试C#程序,它再次在同一点暂停。我在LISP代码中找到了它暂停的地方,但我没有看到任何类似于在过去导致类似问题的额外的“”。
**** Hidden Message ***** 不知道我是否会有所帮助,但是我已经用一个点击按钮的非模态表单加载和启动了大量的lisp文件一段时间了,没有遇到任何问题。 public static void make directory()。
{。
Document doc = AcadApp,document manager . MdiActiveDocument;。
数据库db = doc,数据库;。
doc,SendStringToExecute("(load \ " make _ D2 \ ")(make _ D2)",true,false,true);。
}。
。
这是我反复检查过的。它似乎不在AutoCAD的启动或我传递给它的send命令中。在执行lisp时,AutoCAD会停止绘制。“停止”是指在我单击鼠标之前,它不会在模型空间窗口上生成更多的线。然后它又恢复了。我已经用其他LISP测试了这个设置,效果很好。这个问题有点让我难堪,因为我无法确定LISP代码中的哪些内容只有在涉及到.NET时才会停止。但为了以防万一,下面是如何从C#中的类调用AutoCAD。我的第一个想法是SendCommand中有一个额外的空间,但我已经仔细检查过了。我认为在LISP代码中一定有一个额外的“”,但如果是这样的话,它隐藏得非常隐蔽。
class LaunchAutoCAD
{
private static IAcadApplication vAcadApp = null;
private static IAcadDocument vAcadDoc = null;
private static string vAcadID = "AutoCAD.Application.20";
public static void StartAutoCAD()
{
try
{
// Check for instance of AutoCAD
vAcadApp = (IAcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(vAcadID);
}
catch (Exception) // None found so start a new instance of AutoCAD
{
Type AcadProg = Type.GetTypeFromProgID(vAcadID);
vAcadApp = (IAcadApplication)System.Activator.CreateInstance(AcadProg);
}
if (vAcadApp != null)
{
vAcadApp.Visible = true;
vAcadDoc = vAcadApp.Documents.Open(myDrawingTemplate.dwg", true);
vAcadDoc.SendCommand("(load \"" + LispPath + "myLisp.lsp\" \"The load failed\") ");
vAcadDoc.SendCommand(LISPVariables.PrepareAcadCmd() + " ");
vAcadDoc.SendCommand("(setq svPath \"" + (ReadDefaults.vsSaveAutoDwgPath).Replace("\\", "/") + "\") ");
vAcadDoc.SendCommand("(setq *erp 1) ");
vAcadDoc.SendCommand("startLisp ");
}
else
{
Console.WriteLine("ERROR: The drawing file is missing.");
}
}
}
}
页:
[1]