Всем привет!
Сегодня поймал новую неприятную "особенность" Civil 3D API. Присутствует в Civil 3D 2019, в других пока не проверял. Вкратце, проблема такая: вручную, через пользовательский интерфейс в имени сети можно использовать вертикальную черту (символ |), а программно такое имя сети не задать!
Код тестовой команды:
using System.Linq;
using Autodesk.AutoCAD.ApplicationServices.Core;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
namespace CivilTest
{
public class TestNetworkNaming
{
[CommandMethod(nameof(SetNetworkNameTest))]
public void SetNetworkNameTest()
{
var civilDocument = CivilApplication.ActiveDocument;
var networkId = civilDocument.GetPipeNetworkIds().Cast<ObjectId>().FirstOrDefault();
if (networkId.IsValid)
{
SetNetworkName(networkId, "Test|Network");
}
}
/// <summary>
/// Присвоение названия сети
/// </summary>
/// <param name="networkId">ObjectId сети</param>
/// <param name="name">Название</param>
public static void SetNetworkName(ObjectId networkId, string name)
{
var database = networkId.Database;
var document = Application.DocumentManager.GetDocument(database);
using (document.LockDocument())
using (var transaction = database.TransactionManager.StartTransaction())
{
var network = transaction.GetObject(networkId, OpenMode.ForWrite, false, true) as Network;
if (network != null)
{
try
{
network.Name = name;
}
catch (System.Exception e)
{
document.Editor.WriteMessage("\nException: {0}", e.Message);
}
}
transaction.Commit();
}
}
}
}
Результат её работы:
Exception: Error: string contents for attribute 'Test|Network' contain invalid characters. The following characters are not valid in object names: <>/\":;=|,*?`
Видеозапись проверки с голосовыми комментариями (прошу прощения за тихий звук):
Может у кого-то есть идеи, как это попробовать обойти?