将AutoCad与WPF C#应用程序集成

3
我有一个关于将AutoCad LT与WPF C#应用程序集成的问题。
我为一位客户开发ERP应用程序,该客户使用AutoCAD LT绘制他们生产的产品。他们针对自己的产品使用主图,不同的客户会订购不同尺寸的产品。
客户询问我是否可能将AutoCad与其订单流程集成和自动化。当他下订单时,希望打开所订购产品的绘图,对其进行修改,并将其以不同名称保存在特定文件夹下。
绘图的修改将由客户代表(CSR)完成,应用程序应在特定文件夹中自动保存具有参考特定订单的名称的绘图。之后,应用程序应打印绘图,然后关闭AutoCad实例。
因此,我有以下用例:
1. CSR:输入新订单并指定主图; 2. 应用程序:打开AutoCad绘图; 3. CSR:修改绘图; 4. CSR:提交订单(在应用程序中); 5. 应用程序:指示AutoCad打印修改后的绘图; 6. 应用程序:在特定文件夹下使用新名称保存绘图; 7. 应用程序:关闭AutoCad LT实例。
我的问题是,是否有适用于AutoCad的API可用于实现此功能,或者是否存在其他方法可以向AutoCad发送这些命令?
2个回答

1

看这里: AutoCad .Net 开发者指南

本介绍描述通过托管的.NET应用程序编程接口(API)公开AutoCAD®对象的概念。

顺便说一下:为什么要使用文件夹来存储图纸?我认为使用某种类型的数据库会更好。


我通常认为最好只在数据库中存储文件/文件夹的链接,而不是实际的二进制文件。但同意在这种情况下使用某种类型的数据库非常有用。 - GrahamMc
@Christian,我查看了你发送的链接,并在其他网站上阅读了相关内容。但据我所知,这只能在您的应用程序作为主机在AutoCAD中运行时使用。我无法在独立应用程序中使用它。我也了解了RealDWG,但是对于我的客户来说,许可证太昂贵了,希望有更便宜的解决方案。 - Marcel
@Marcel 可以研究一下Open Design Alliance库。阅读autoCAD标签的Wiki以获取更多信息。 - CAD bloke
@Marcel 顺便说一句,如果你的客户无法支付不到10,000美元的AutoCAD RealDWG许可证+ ADN,那么他们可能无法支付你的费用。这是你需要考虑的事情。 - CAD bloke

0
AutoCAD开发者指南的章节AutoCAD .NET API基础 -> 进程内与进程外中。
当您开发新应用程序时,它可以在进程内或进程外运行。AutoCAD .NET API 仅设计为在进程内运行,这与可在进程内或进程外使用的 ActiveX Automation 库不同。
进程内应用程序被设计为在与主机应用程序相同的进程空间中运行。在这种情况下,DLL 组件被加载到 AutoCAD 中,即主机应用程序。
进程外应用程序不在与主机应用程序相同的空间中运行。这些应用程序通常作为独立的可执行文件构建。
如果您需要创建一个独立的应用程序来驱动 AutoCAD,则最好创建一个使用 CreateObject 和 GetObject 方法创建 AutoCAD 应用程序的新实例或返回当前正在运行的实例之一的应用程序。一旦返回 AcadApplication 的引用,您就可以使用 AcadApplication 的 ActiveDocument 属性的 SendCommand 方法将您的进程内 .NET 应用程序加载到 AutoCAD 中。
有示例代码显示如何从独立应用程序访问正在运行的 AutoCAD 实例。基本上,您可以像这样做(插入您特定的 progId):
[CommandMethod("ConnectToAcad")]
public static void ConnectToAcad()
{

    AcadApplication acAppComObj = null;
    const string strProgId = "AutoCAD.Application.18";

    // Get a running instance of AutoCAD
    try
    {
        acAppComObj = (AcadApplication)Marshal.GetActiveObject(strProgId);
    }
    catch // An error occurs if no instance is running
    {
        try
        {
            // Create a new instance of AutoCAD
            acAppComObj = (AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true);
        }
        catch
        {
            // If an instance of AutoCAD is not created then message and exit
            System.Windows.Forms.MessageBox.Show("Instance of 'AutoCAD.Application'" +
                                                 " could not be created.");

            return;
        }
    }

    // Display the application and return the name and version
    acAppComObj.Visible = true;
    System.Windows.Forms.MessageBox.Show("Now running " + acAppComObj.Name +
                                         " version " + acAppComObj.Version);

    // Get the active document
    AcadDocument acDocComObj;
    acDocComObj = acAppComObj.ActiveDocument;

    // Optionally, load your assembly and start your command or if your assembly
    // is demandloaded, simply start the command of your in-process assembly.
    acDocComObj.SendCommand("(command " + (char)34 + "NETLOAD" + (char)34 + " " +
                            (char)34 + "c:/myapps/mycommands.dll" + (char)34 + ") ");

    acDocComObj.SendCommand("MyCommand ");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接