【问题标题】:Integrate AutoCad with a WPF C# appllication将 AutoCad 与 WPF C# 应用程序集成
【发布时间】:2013-04-18 23:15:01
【问题描述】:

我有一个关于将 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?

【问题讨论】:

    标签: c# wpf autocad


    【解决方案1】:

    看看这个: AutoCad .Net Developers Guide

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

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

    【讨论】:

    • 我通常发现最好只存储指向数据库中文件/文件夹的链接,而不是实际的二进制文件 - 但同意某种数据库在这种情况下会非常有用跨度>
    • @Christian,我检查了您发送的链接,并在其他网站上阅读过此内容。但据我了解,这只能在您的应用程序在 AutoCAD 中(作为主机)运行时使用。我不能在独立的应用程序中使用它。我还阅读了有关 RealDWG 的信息,但是对于我的客户来说,这个许可证太贵了,希望有更便宜的解决方案。
    • @Marcel 查看开放设计联盟库。阅读 Wiki 以获取 AutoCAD 标签以获取更多信息。
    • @Marcel 顺便说一句,如果您的客户付不起
    【解决方案2】:

    AutoCAD developers guide 下的Basics of the AutoCAD .NET API -> Out-of-Process versus In-Process 部分

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多