这是我反复检查过的。它似乎不在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.");
- }
- }
- }
- }
|