Конфликт с SPDS Extension - полилинии и Extension Dictionary

Автор Тема: Конфликт с SPDS Extension - полилинии и Extension Dictionary  (Прочитано 6654 раз)

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

Оффлайн Роман МалютинАвтор темы

  • ADN Club
  • Сообщений: 15
  • Карма: 3
  • Инженер
    • lep10.ru
Здравствуйте!

При попытке добавить запись в Extension Dictionary полилинии - код отрабатывает без ошибок, но запись не появляется!
Такое поведение замечено только при установленном SPDS Extension в версиях AutoCAD 2018-2019.
Без СПДС всё работает как надо.

Вот простой пример:
Код - C# [Выбрать]
  1. [Rt.CommandMethod("TEST")]
  2.                 public static void Test()
  3.                 {
  4.                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor;
  5.                         Ed.PromptEntityResult result = ed.GetEntity("\nВыберите объект:");
  6.  
  7.                         if (result.Status != Ed.PromptStatus.OK)
  8.                                 return;
  9.  
  10.                         SaveTxtToCADEntity("testText", result.ObjectId);
  11.                 }
  12.  
  13.                 protected static void SaveTxtToCADEntity(string text, Db.ObjectId id)
  14.                 {
  15.                         Ap.Document dwg = cad.DocumentManager.MdiActiveDocument;
  16.  
  17.                         using (Ap.DocumentLock doclock = dwg.LockDocument())
  18.                         {
  19.                                 using (Db.Transaction tr = dwg.Database.TransactionManager.StartTransaction())
  20.                                 {
  21.                                         try
  22.                                         {
  23.                                                 // Открываем объект на запись
  24.                                                 Db.Entity ent = (Db.Entity)tr.GetObject(id, Db.OpenMode.ForWrite, false, true);
  25.  
  26.                                                 if (ent.ExtensionDictionary.IsNull)
  27.                                                         ent.CreateExtensionDictionary(); // Cоздаём, если нету
  28.  
  29.                                                 // Открываем ExtensionDictionary для записи
  30.                                                 Db.DBDictionary extensionDict =
  31.                                                         (Db.DBDictionary)tr.GetObject(ent.ExtensionDictionary, Db.OpenMode.ForWrite, false, true);
  32.  
  33.                                                 // Если запись уже есть - удаляем
  34.                                                 if (extensionDict.Contains("TESTXRECORD"))
  35.                                                         extensionDict.Remove("TESTXRECORD");
  36.  
  37.                                                 // Создаём новую Xrecord
  38.                                                 Db.Xrecord newXrecord = new Db.Xrecord();
  39.                                                 newXrecord.Data = new Db.ResultBuffer(
  40.                                                         new Db.TypedValue((int)Db.DxfCode.Text, text));
  41.  
  42.                                                 // Создаём запись в ExtensionDictionary.
  43.                                                 extensionDict.SetAt("TESTXRECORD", newXrecord);
  44.  
  45.                                                 // Сообщим транзакции о новом объекте Xrecord для его «автозакрытия»
  46.                                                 tr.AddNewlyCreatedDBObject(newXrecord, true);
  47.                                                 tr.Commit(); // Завершим транзакцию
  48.                                         }
  49.                                         catch (Rt.Exception ex)
  50.                                         {
  51.                                                 dwg.Editor.WriteMessage(Environment.NewLine + ex.Message);
  52.                                         }
  53.                                         finally
  54.                                         {
  55.                                                 tr.Dispose();
  56.                                         }
  57.                                 }
  58.                         }
  59.                 }
  60.  
Чертим отрезок, полилинию и круг.
Вызываем команду "TEST" на всех трех объектах и в ArxDbg видим, что тестовая запись есть только в словарях отрезка и круга. Словарь полилинии пустой.
Я использую LWPOLYLINE, на других не проверял.

Это баг SPDS Extension или я что-то делаю не так?
« Последнее редактирование: 04-08-2018, 15:45:22 от Александр Ривилис »

Отмечено как Решение Роман Малютин 04-08-2018, 15:59:59

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Прочитай у меня в подписи про правило форматирование кода на форуме и соблюдай его!
2. Это безусловно одни из багов SPDS Extension.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Роман МалютинАвтор темы

  • ADN Club
  • Сообщений: 15
  • Карма: 3
  • Инженер
    • lep10.ru
Спасибо!
Грустные новости тоже информация.
А авторы СПДС обитают на этом форуме? Хотелось бы донести до них информацию, багрепорт написать...

Этот SPDS Extension входит в дистрибутив AutoCAD, а у моего плагина на полилиниях половина функционала держится.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Этот SPDS Extension входит в дистрибутив AutoCAD
Не входит. 100%. Это значит, что дистрибутив или взят не с официального сайта Autodesk, или он кем-то собран в вашей организации и туда добавлен SPDS Extension.
Претензии к Autodesk СПДС Модуль можно написать по ссылке. Но это не значит, что кто-то будет их исправлять. Это бесплатное приложение к AutoCAD без никакой ответственности за его работу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение