2012-02-27 18 views
4

我需要通過C#插件將外部DWG插入到AutoCAD繪圖中。 我需要向用戶「詢問」插入點的插入點和旋轉。 到目前爲止,我總是使用一個lisp函數來調用命令「._- insert」,該命令給出了鼠標下方塊的縮略圖,允許用戶點擊圖形來設置插入點,並從該點開始用戶再次點擊一次來設置旋轉。 現在我想避免使用Lisp或使用AutoCAD的低級別API,因爲我需要一個可以在各種CAD環境下運行的解決方案。 我發現什麼是這樣的:鼠標下帶縮略圖的CAD插入塊

public static void InsertDwg(string dwgName) 
    { 
     CADAPI.ApplicationServices.Document doc = CADAPI.ApplicationServices.Application.DocumentManager.MdiActiveDocument; 
     CADDB.Database db = doc.Database; 
     CADAPI.EditorInput.Editor ed = doc.Editor; 
     CADDB.ObjectId ObjId; 
     using (CADDB.Transaction trx = db.TransactionManager.StartTransaction()) 
     { 
      CADDB.BlockTable bt = db.BlockTableId.GetObject(CADDB.OpenMode.ForRead) as CADDB.BlockTable; 
      CADDB.BlockTableRecord btrMs = bt[CADDB.BlockTableRecord.ModelSpace].GetObject(CADDB.OpenMode.ForWrite) as CADDB.BlockTableRecord; 
      using (CADDB.Database dbInsert = new CADDB.Database(false, true)) 
      { 
       dbInsert.ReadDwgFile(dwgName, CADDB.FileOpenMode.OpenForReadAndAllShare, true, string.Empty); 
       ObjId = db.Insert(Path.GetFileNameWithoutExtension(dwgName), dbInsert, true); 
      } 
      CADAPI.EditorInput.PromptPointOptions ppo = new CADAPI.EditorInput.PromptPointOptions("\nInsertion Point"); 
      CADAPI.EditorInput.PromptAngleOptions ppa = new CADAPI.EditorInput.PromptAngleOptions("\nInsert Rotation"); 
      CADAPI.EditorInput.PromptPointResult ppr; 
      ppr = ed.GetPoint(ppo); 
      CADAPI.EditorInput.PromptDoubleResult ppd = ed.GetAngle(ppa); 
      if (ppr.Status == CADAPI.EditorInput.PromptStatus.OK) 
      { 
       CADGEOM.Point3d insertPt = ppr.Value; 
       CADDB.BlockReference bref = new CADDB.BlockReference(insertPt, ObjId); 
       btrMs.AppendEntity(bref); 
       trx.AddNewlyCreatedDBObject(bref, true); 
       trx.Commit(); 
      } 
     } 
    } 

但在這裏我有兩個問題: 最主要的一條是,有老鼠在任何預覽。 第二個是用戶需要點擊3次而不是2來設置插入點和旋轉。

是否有任何方式不使用某種SendCommand並且做所有這些東西? TIA

+0

請標記C#而不是在標題中使用它 – 2012-02-27 16:01:26

回答

1

看起來Jigging是一種允許預覽的方式。我有三個鏈接給你。

首先是創建與折線的簡單夾具的一例 - 你可以擴展這對塊。

第二個鏈接是相似的,但將旋轉應用於混音。這適用於一個矩形,但可以修改以適應一個塊。

第三個鏈接描述了一種不同的方法 - AutoCAD的瞬態圖形界面。您必須使用AutoCAD 2009或更高版本才能使用此方法。

最後兩條鏈接來自Through the Interface博客,您可以在其中找到更多示例,如果您遇到問題,這是一個非常好的起點,尤其是對於C#編碼。

+0

謝謝,從簡單的概述來看,它似乎解決了這個問題,但我不能使用這個解決方案,因爲其他CAD環境(特別是BricsCAD)沒有Jig邏輯。我想知道爲這兩種環境提供的獨特解決方案,但現在我認爲可能避免SendCommands是不可能的。無論如何謝謝你的建議。 – 2012-02-29 14:20:53

0

您將需要使用AcEdJig類。它提供預覽。您將必須編寫代碼來收集插入點和旋轉並相應地轉換塊。

Here是我的谷歌搜索示例使用代碼的第一個鏈接。

+0

你知道一些.NET包裝器嗎? – 2012-02-29 14:15:38