2013-04-25 66 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 "); 
} 
相關問題