Добрый день. Недавно стал писать библиотеку для AutoCAD. Вкратце суть задачи: Пользователь выбирает полилинии и над ними появляется MText. Блок с MText мне необходимо запомнить для дальнейших операций. Поэтому пытаюсь переименовать BlockTableRecord:
[CommandMethod("КОД_ДЕТАЛИ")]
public void DetailCode()
{
if (doc == null)
return;
Database db = doc.Database;
Editor edt = doc.Editor;
do
{
PromptSelectionResult selRes = SetPromptSelectionResult(edt);
if (selRes.Status != PromptStatus.OK)
{
if (!detailList.Any())
edt.WriteMessage("\nНичего не выбрано!");
else
WriteDataToFile(SetTempFile());
return;
}
else
{
ObjectId obj = selRes.Value.GetObjectIds().FirstOrDefault();
using (var tr = db.TransactionManager.StartTransaction())
{
try
{
Polyline pl = tr.GetObject(obj, OpenMode.ForRead) as Polyline;
if (pl != null)
{
Detail detail = SetNewDetail(form, detailCode);
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
btr.Name = "SomeName";//в данной строке ошибка
MText mtxt = SetNewMText(detail, point);
btr.AppendEntity(mtxt);
tr.AddNewlyCreatedDBObject(mtxt, true);
tr.Commit();
}
}
catch (System.Exception ex)
{
edt.WriteMessage($"Exception: {ex.Message}\n");
edt.WriteMessage($"{ex.GetBaseException()}\n");
tr.Abort();
}
finally
{
tr.Dispose();
}
}
}
} while (true);
}
, но в ответ получаю ошибку:
Exception: eInvalidInput
Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
в Autodesk.AutoCAD.DatabaseServices.SymbolTableRecord.set_Name(String name)
в AutoCADClassLibrary.AutoCADPlugin.DetailCode() в C:\Users\SQLUser2\source\repos\AutoCADClassLibrary\AutoCADPlugin.cs:строка 299
Подскажите, что делаю не так?