Силь Мультивыноски, ошибка после его удаления вручную

Автор Тема: Силь Мультивыноски, ошибка после его удаления вручную  (Прочитано 2953 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Добрый день всем!
Подскажите, пожалуйста, как победить вот такую ошибку: "Autodesk.AutoCAD.Runtime.Exception: eNullObjectId"?.
Описание того, как она появляется: программно создается новый стиль мультивыноски, все работает без ошибок. Далее заходим через меню или ленту (Аннотоции) в Диспетчер стилей мультивыносок и удаляем этот стиль мультивыноски, который был создан программно. Далее опять вызываем команду плагина создать новый стиль мультивыноски (с тем же именем что и в первый раз) и сразу возникает вышеуказанная ошибка.
В коде наличие стиля с таким именем проверяется. Может еще что-то проверять надо? При ручном удалении удаляется только из списка стилей, из таблицы чертежа не удаляется?
Код - C# [Выбрать]
  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2. {
  3.  DBDictionary mleaderStylesDict = tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForRead) as DBDictionary;
  4.  const String mleaderStyleName = "Мультивыноски";
  5.  MLeaderStyle mleaderStyle;
  6.  if (mleaderStylesDict.Contains(mleaderStyleName))
  7.  {
  8.      mleaderStyle = (MLeaderStyle)tr.GetObject((ObjectId)mleaderStylesDict[mleaderStyleName], OpenMode.ForWrite);
  9.      mleaderStyleId = mleaderStylesDict.GetAt(mleaderStyleName);    
  10.  }
  11.  else
  12.  {
  13.  .....
  14.  mleaderStyleId = mleaderStyle.PostMLeaderStyleToDb(db, mleaderStyleName);
  15.  tr.AddNewlyCreatedDBObject(mleaderStyle, true);
  16.  }
  17. ....
  18. tr.Commit();
  19. }
  20.  

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Это как так удается - снести описание стиля мультивыноски, если есть объекты, его использующие? Сейчас сильно далеко от ACAD'a, так что проверить не могу.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Забыл указать, что мультивыноску с таким стилем сначала удалил, а потом в диспетчере сменил текущий стиль мультивыноски и уже потом удалил сам стиль, созданный плагином.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А перед строкой 14 назначение mleaderStyle где-нибудь выполняется?
Наверняка выполняется, туплю.
---
Добавлено:
Я попробовал создать стиль, но у меня элементарно не хватает ни знаний, ни умений, ни (на данный момент) времени - надо бежать. Я получил ошибку выполнения в момент настройки стиля. Понятно, что сделано было на коленке, и по идее надо разбираться - но не сейчас.
Извините, вам запрещён просмотр содержимого спойлеров.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Отмечено как Решение zr74 16-12-2022, 20:40:39

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

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Ошибку оказывается давала строчка:
Код - C# [Выбрать]
  1. db.Textstyle = textStyle.ObjectId;
  2.  
Исправил таким образом:
Код - C# [Выбрать]
  1. if (!tst.Has(textStyle.Name))
  2. {
  3.     tst.Add(textStyle);
  4.     tr.AddNewlyCreatedDBObject(textStyle, true);
  5.     db.Textstyle = textStyle.ObjectId;
  6. }
  7.  

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А разве нельзя обойтись без того, чтобы менять активный текстовый стиль? И просто его назначить в стиль мультивыноски?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!