При создании выравнивания Civil 3D в .Net возникает ошибка «Идентификатор выравнивания недействителен».

Я разрабатываю надстройку импорта/экспорта IFC (Industry Foundation Classes) для Civil 3D, которую я опубликую позже в этом месяце. Функция экспорта уже работает отлично. Однако я до сих пор не совсем понимаю, как создавать объекты в Civil 3D с помощью .NET. Моя надстройка написана на C#.

Я попробовал следующее, что является официальным примером 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

Однако всякий раз, когда я пытаюсь запустить свой код, я получаю следующее сообщение об ошибке: "Недопустимый идентификатор выравнивания". Мой код выглядит следующим образом:

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");

Я также пытался заменить "", который дает сайт для выравнивания, на null или ObjectID.Null, оба не работают и заменяют его с ObjectID.Null даже не позволяет мне компилироваться.

Кто-нибудь знает, откуда эта ошибка?


person FlixFix    schedule 15.08.2017    source источник


Ответы (2)


Просмотр документации по Выравнивание методы, в частности после перегрузки:

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

В нем говорится:

System.ArgumentException

Недопустимое имя чертежа, слоя, стиля, набора меток или сайта. Название выравнивания уже существует.

Так что, кажется, некоторые имена неверны. Для более надежного подхода вы можете перечислить стили и получить оттуда имя или objectId. Для выравнивания без сайта вы можете передать string.empty в качестве параметра siteName.

person Augusto Goncalves    schedule 15.08.2017

Спасибо за ответ, Аугусто! Я тоже так думал, потому что ошибка действительно указывала на это направление.

Тем не менее, Джефф из Autodesk смог помочь мне и предложил рабочее решение. Очевидно, это было частью более серьезной проблемы с моим основным кодом или моим подходом к делу. С решением Джеффа, представленным в следующем посте, у меня все заработало:

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

person FlixFix    schedule 16.08.2017