gpt4 book ai didi

autocad - SaveAs in COM挂AutoCAD

转载 作者:行者123 更新时间:2023-12-02 00:41:53 32 4
gpt4 key购买 nike

我正在实现一个应用程序,该应用程序在 AutoCAD 的 ObjectARX 界面中使用 COM 来自动执行绘图操作,例如打开和另存为。

根据文档,我应该能够调用 AcadDocument.SaveAs() 并传入文件名、“保存类型”和安全参数。该文档明确指出,如果安全性为 NULL,则不会尝试任何与安全性相关的操作。但是,它没有给出任何正确对象类型的指示以作为“另存为类型”参数传递。

我已尝试使用文件名调用 SaveAs,其余参数为 null,但我的应用程序在调用该方法时挂起,AutoCAD 似乎崩溃了 - 您仍然可以使用功能区,但不能对工具栏执行任何操作,并且可以'关闭 AutoCAD。

我感觉是我的 NULL 参数导致了这里的问题,但 COM/VBA 部门严重缺乏文档。事实上,它说 AcadDocument 类甚至没有 SaveAs 方法,而它显然有。

这里有没有人实现过同样的事情?有什么指导吗?

另一种方法是我使用 SendCommand() 方法发送 _SAVEAS 命令,但我的应用程序正在管理一批绘图并且需要知道 a) 保存是否失败,以及 b) 保存何时完成(我'我通过监听 EndSave 事件来完成。)

编辑

这是请求的代码 - 它所做的只是启动 AutoCAD(或连接到正在运行的实例,如果它已经在运行),打开现有图形,然后将文档保存到新位置 (C:\Scratch\Document01B.dwg .)

using (AutoCad cad = AutoCad.Instance)
{
// Launch AutoCAD
cad.Launch();

// Open drawing
cad.OpenDrawing(@"C:\Scratch\Drawing01.dwg");

// Save it
cad.SaveAs(@"C:\Scratch\Drawing01B.dwg");
}

然后在我的 AutoCad 类中(this._acadDocument 是 AcadDocument 类的一个实例。)

public void Launch()
{
this._acadApplication = null;
const string ProgramId = "AutoCAD.Application.18";

try
{
// Connect to a running instance
this._acadApplication = (AcadApplication)Marshal.GetActiveObject(ProgramId);
}
catch (COMException)
{
/* No instance running, launch one */

try
{
this._acadApplication = (AcadApplication)Activator.CreateInstance(
Type.GetTypeFromProgID(ProgramId),
true);
}
catch (COMException exception)
{
// Failed - is AutoCAD installed?
throw new AutoCadNotFoundException(exception);
}
}

/* Listen for the events we need and make the application visible */
this._acadApplication.BeginOpen += this.OnAcadBeginOpen;
this._acadApplication.BeginSave += this.OnAcadBeginSave;
this._acadApplication.EndOpen += this.OnAcadEndOpen;
this._acadApplication.EndSave += this.OnAcadEndSave;

#if DEBUG
this._acadApplication.Visible = true;
#else
this._acadApplication.Visible = false;
#endif

// Get the active document
this._acadDocument = this._acadApplication.ActiveDocument;
}

public void OpenDrawing(string path)
{
// Request AutoCAD to open the document
this._acadApplication.Documents.Open(path, false, null);

// Update our reference to the new document
this._acadDocument = this._acadApplication.ActiveDocument;
}

public void SaveAs(string fullPath)
{
this._acadDocument.SaveAs(fullPath, null, null);
}

最佳答案

来自 Autodesk discussion groups , 看起来第二个参数是要另存为的类型,可能是必需的:


app = new AcadApplicationClass();<br/>
AcadDocument doc = app.ActiveDocument;
doc.SaveAs("d:\Sam.dwg",AcSaveAsType.acR15_dwg,new Autodesk.AutoCAD.DatabaseServices.SecurityParameters());

由于您使用的是 AutoCAD 2010,类型应增加到 acR17_dwg 或 acR18_dwg。

关于autocad - SaveAs in COM挂AutoCAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287864/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com