2017-08-15 47 views
0

我正在開發一個用於Civil 3D的IFC(Industry Foundation Classes)導入/導出加載項,我將在本月晚些時候以開放源代碼的形式發佈)。導出功能已經完全正常。但是,我仍然不太瞭解如何使用.NET在Civil 3D中創建對象。我的加載項是用C#編寫的。在.Net中創建Civil 3D對齊會拋出「對齊ID無效」錯誤

我嘗試以下,這是Autodesk官方例子:

// Uses an existing Alignment Style named "Basic" and Label Set Style named "All Labels" (for example, from 
// the _AutoCAD Civil 3D (Imperial) NCS.dwt template. This call will fail if the named styles 
// don't exist. 
// Uses layer 0, and no site (ObjectId.Null) 
ObjectId testAlignmentID = Alignment.Create(doc, "New Alignment", ObjectId.Null, "0", "Basic", "All Labels"); 

來源:https://knowledge.autodesk.com/support/autocad-civil-3d/learn-explore/caas/CloudHelp/cloudhelp/2017/ENU/Civil3D-DevGuide/files/GUID-F620DF41-7DF3-450F-8C2A-A92DEB1F9E9E-htm.html

但是,每當我嘗試運行我的代碼,我得到了以下錯誤消息:「無效對齊ID「。。我的代碼如下所示:

var civilDatabase = Application.DocumentManager.MdiActiveDocument.Database; 
var civilDocument = CivilApplication.ActiveDocument; 
using (Transaction civilTransactionManager = 
     civilDatabase.TransactionManager.StartTransaction()) 
{ 
    ObjectId civilAlignment = Alignment.Create(civilDocument, "MyName", "" , "0", "Basic", "All Labels"); 

我也試圖替換給出了對齊現場與ObjectID.Null「」,都不起作用,用它替換ObjectID.Null甚至阻止我編譯。

任何人都知道錯誤來自哪裏?

回答

0

望着文檔Alignment methods,更具體的following過載:

public static ObjectId Create(
    CivilDocument document, 
    string alignmentName, 
    string siteName, 
    string layerName, 
    string styleName, 
    string labelSetName 
) 

它說:

System.ArgumentException

的繪製,層,樣式的名稱, labelSet或網站無效。對齊的名稱已經存在。

所以它似乎有些名稱是不正確的。爲了更健壯的方法,您可以列出樣式並從那裏獲取名稱或objectId。對於無位置對齊,您可以通過string.empty作爲siteName參數。

0

謝謝你的回答奧古斯都!我也這麼認爲,因爲錯誤確實指向了這個方向。

來自Autodesk的Hoever,Jeff能夠幫助我並提供了一個可行的解決方案。顯然這是我主要代碼的一個更大問題的一部分,或者我接觸事物的方式。 在以下職位提供傑夫的解決方案,我得到的一切工作:

https://forums.autodesk.com/t5/autocad-civil-3d-customization/creating-alignment-throws-quot-alignment-id-is-invalid-quot/m-p/7302387/highlight/false#M13831