2013-04-25 33 views
3

我有一个关于将AutoCad LT与WPF C#应用程序集成的问题。 我有一个客户为他开发ERP应用程序,此客户使用AutoCAD LT绘制他们生产的产品。他们使用主要图纸为他们的产品,不同的顾客命令这个产品以不同的大小。将AutoCad与WPF C#应用程序集成

客户问我是否可以通过他的订单流程来集成和自动化AutoCad。当他发出新订单时,他希望打开订购的产品图纸,对其进行更改,并将其保存在特定文件夹中的不同名称下。

图形的变更将由客户代表(CSR)完成,应用程序应该自动将图形保存在具有引用特定顺序的名称的特定文件夹中。之后,应用程序应该打印图纸,然后关闭AutoCad实例。

所以,我有以下的用例:

  1. CSR:输入新的订单,并指定主图;
  2. 应用:打开AutoCad绘图;
  3. CSR:改变绘图;
  4. CSR:提交订单(在申请中);
  5. 应用:指示AutoCad打印修改过的图纸;
  6. 应用程序:将图形以新名称保存在特定文件夹中;
  7. 应用程序:关闭AutoCad LT实例。

我的问题是,是否有AutoCad的API,我可以用它来实现此功能,或者有其他方法可以将这些命令传递给AutoCad?

回答

1

来看: AutoCad .Net Developers Guide

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

作为便笺:为什么使用文件夹作为图纸?我认为某种数据库会更好。

+0

我通常会发现它最好只是存储在数据库中的一个链接到一个文件/文件夹,而不是实际的二进制 - 但他们的一些一个DB kind在这种情况下会非常有用 – GrahamMc 2013-04-25 08:20:57

+0

@Christian,我查看了你发送的链接,并在其他网站上阅读了此链接。但据我所知,这只能在你的应用程序在autocad内运行(作为主机)时才能使用。我不能在独立的应用程序中使用它。我还阅读了关于RealDWG的许可证,但是对于我的客户来说,这个许可证的价格昂贵,希望有更便宜的解决方案。 – Marcel 2013-04-25 15:34:34

+0

@Marcel查看开放式设计联盟库。阅读Wiki获取更多信息的autoCAD标签。 – 2013-05-01 23:22:25

0

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

当你开发新的应用程序,它可以运行或退出的进程。 AutoCAD .NET API旨在仅在进程内运行,这与ActiveX Automation库不同,后者可用于进程或进程外。 进程内应用程序设计为与主机应用程序在相同的进程空间中运行。在这种情况下,DLL程序集将加载到作为宿主应用程序的AutoCAD中。 进程外应用程序不会与主机应用程序在相同的空间中运行。这些应用程序通常构建为独立的可执行文件。 如果您需要创建独立应用程序来驱动AutoCAD,最好创建一个应用程序,该应用程序使用CreateObject和GetObject方法创建AutoCAD应用程序的新实例或返回当前正在运行的实例之一。一旦返回了对AcadApplication的引用,您就可以加载您的进程。通过使用属于AcadApplication的ActiveDocument属性的SendCommand方法,将.NET应用程序转换为AutoCAD。

有展示如何从一个独立的应用程序访问一个运行AutoCAD实例示例代码。基本上你可以做这样的事情(插入您的具体进程id):

[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 "); 
} 
相关问题