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?

4

2 回答 2

1

看看这个: AutoCad .Net 开发人员指南

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

附带说明:您为什么使用文件夹来保存图纸?我认为某种数据库会更好。

于 2013-04-25T07:21:21.693 回答
0

AutoCAD 开发人员指南中的 AutoCAD .NET API 基础部分-> 进程外与进程内

当您开发一个新应用程序时,它可以在进程内运行或在进程外运行。AutoCAD .NET API 设计为仅在进程内运行,这与可在进程内或进程外使用的 ActiveX 自动化库不同。进程内应用程序设计为在与主机应用程序相同的进程空间中运行。在这种情况下,DLL 程序集被加载到作为主机应用程序的 AutoCAD 中。进程外应用程序不会在与宿主应用程序相同的空间中运行。这些应用程序通常构建为独立的可执行文件。如果您需要创建一个独立的应用程序来驱动 AutoCAD,最好创建一个使用 CreateObject 和 GetObject 方法来创建 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 ");
}
于 2016-05-26T14:31:21.717 回答