Ошибка при указании наименования BlockTableRecord

Автор Тема: Ошибка при указании наименования BlockTableRecord  (Прочитано 7713 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн oas301Автор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Добрый день. Недавно стал писать библиотеку для AutoCAD. Вкратце суть задачи: Пользователь выбирает полилинии и над ними появляется MText. Блок с MText мне необходимо запомнить для дальнейших операций. Поэтому пытаюсь переименовать BlockTableRecord:
Код - C# [Выбрать]
  1. [CommandMethod("КОД_ДЕТАЛИ")]
  2.         public void DetailCode()
  3.         {
  4.             if (doc == null)
  5.                 return;
  6.             Database db = doc.Database;
  7.             Editor edt = doc.Editor;
  8.             do
  9.             {
  10.                 PromptSelectionResult selRes = SetPromptSelectionResult(edt);
  11.                 if (selRes.Status != PromptStatus.OK)
  12.                 {
  13.                     if (!detailList.Any())
  14.                         edt.WriteMessage("\nНичего не выбрано!");
  15.                     else
  16.                         WriteDataToFile(SetTempFile());
  17.                     return;
  18.                 }
  19.                 else
  20.                 {
  21.                     ObjectId obj = selRes.Value.GetObjectIds().FirstOrDefault();
  22.                     using (var tr = db.TransactionManager.StartTransaction())
  23.                     {
  24.                         try
  25.                         {
  26.                             Polyline pl = tr.GetObject(obj, OpenMode.ForRead) as Polyline;
  27.                             if (pl != null)
  28.                             {
  29.                                 Detail detail = SetNewDetail(form, detailCode);
  30.                                 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
  31.                                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  32.                                 btr.Name = "SomeName";//в данной строке ошибка
  33.                                 MText mtxt = SetNewMText(detail, point);
  34.                                 btr.AppendEntity(mtxt);
  35.                                 tr.AddNewlyCreatedDBObject(mtxt, true);
  36.                                 tr.Commit();
  37.                             }
  38.                         }
  39.                         catch (System.Exception ex)
  40.                         {
  41.                             edt.WriteMessage($"Exception: {ex.Message}\n");
  42.                             edt.WriteMessage($"{ex.GetBaseException()}\n");
  43.                             tr.Abort();
  44.                         }
  45.                         finally
  46.                         {
  47.                             tr.Dispose();
  48.                         }
  49.                     }
  50.                 }
  51.             } while (true);
  52.         }
  53.  
, но в ответ получаю ошибку:
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

Подскажите, что делаю не так?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 167
    • Мои плагины к Автокаду
Вы пытаетесь переименовать ModelSpace

Оффлайн oas301Автор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
avc, пример переименования брал отсюда: https://www.keanw.com/2010/01/creating-an-autocad-block-using-net.html
разница только в том, что в BlockTableRecord затем необходимо разместить MText, поэтому нужно открыть объект для редактирования

Отмечено как Решение oas301 06-05-2021, 17:09:15

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 167
    • Мои плагины к Автокаду
Киан берет ModelSpace чтоб записать в него новый объект. А вы пытаетесь его переименовать. Блок ModelSpace переименовывать нельзя.

Оффлайн oas301Автор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
avc, я невнимательно изучил статью. Спасибо большое!