запись в XData

Автор Тема: запись в XData  (Прочитано 23678 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #30 : 14-02-2019, 23:40:04 »
я регистрирую его при открытии файла. даже ради интереса перед записью в XData проверил существует ли оно - существует.
говорю же записав это приложение по команде - работает

в очищенном файле может быть его уже не стало? может такое быть?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #31 : 14-02-2019, 23:41:21 »
в очищенном файле может быть его уже не стало? может такое быть?
Нет. _RECOVER говорит что именно оно удаляет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #32 : 14-02-2019, 23:43:45 »
я регистрирую его при открытии файла
В каком событии? С этим нужно быть еще более осторожным, чем с Close.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #33 : 14-02-2019, 23:46:32 »
Собираю их в коллекцию и потом уже обрабатываю, когда приложение переходит в состояние "ожидаю действий от пользователя" или "бездействую". Есть соответствующие этому события Editor.EnteringQuiescentState и Application.Idle.

я пробовал в EnteringQuiescentState

а регистрирую в DocumentActivated

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #34 : 14-02-2019, 23:48:25 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет. Зарегистрируй своё приложение, убедись что оно зарегистрировалось и сохрани чертеж. Закрой его и открой по новой. Затем уже запускай в работу свой модуль и проверяй портится чертеж или нет. Учись тестировать и находить из-за чего возникает ошибка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #35 : 14-02-2019, 23:50:41 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет.
в 19 сообщении

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #36 : 14-02-2019, 23:52:59 »
я пробовал в EnteringQuiescentState
Ты показал код, в котором этого нет.
в 19 сообщении

В 19 сообщении нет ни кода, где ты собираешь ObjectId, ни кода регистрации своего приложения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #37 : 14-02-2019, 23:58:46 »
Зарегистрируй своё приложение, убедись что оно зарегистрировалось и сохрани чертеж. Закрой его и открой по новой. Затем уже запускай в работу свой модуль и проверяй портится чертеж или нет.
все это проверял. приложение зарегистрировано. и без происшествий пишется по команде - значит с приложением все нормально...
по событию отладчиком прохожусь - приложение существует, в XData пишется, но после сохранения уже не открывается файл
попробую как нибудь иначе записать

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: запись в XData
« Ответ #38 : 15-02-2019, 10:42:06 »
что самое странное эффект тот же(
Ну я не знаю. У меня уже очень давно XData редактируются именно так - никаких проблем не возникает.
Единственное, что можно было бы попробовать сделать - ResultBuffer поместить в конструкцию using. Так правильнее. Вот как в примере: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-92D663FA-0452-44F4-BDAC-0EEF0AF3BD88-htm.html

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #39 : 15-02-2019, 14:53:00 »
Такое приложение в этом файле не зарегистрировано.
Вы были правы.
Ошибка оказалась очень глупой - не сохранил приложение в транзакции.

странно что regAppTable.Has(appName) выдавал true у меня... и командой данные записывались..

после исправления этой ошибки в методе Close пишется без ошибок и прочего криминала!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #40 : 15-02-2019, 16:12:47 »
Вы были правы.
Ошибка оказалась очень глупой - не сохранил приложение в транзакции.
Почему-то меня это не удивляет. :) Хорошо что докопался до причины.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: запись в XData
« Ответ #41 : 25-02-2019, 13:39:47 »
а можно ведь без транзакции регистрировать приложение?
как то так
Код - C# [Выбрать]
  1. using (RegAppTable rat = db.RegAppTableId.Open(OpenMode.ForWrite) as RegAppTable)
  2.                     {
  3.                         if (!rat.Has(nameApp))
  4.                             using (RegAppTableRecord regApp = new RegAppTableRecord() { Name = nameApp })
  5.                                 rat.Add(regApp);
  6.                     }

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: запись в XData
« Ответ #42 : 25-02-2019, 13:51:35 »
simson43,
Можно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: запись в XData
« Ответ #43 : 25-02-2019, 17:04:38 »
как то так
Лучше сперва открыть таблицу приложений просто для чтения, и если приложение не зарегистрировано - тогда уже UpgradeOpen для записи.

P.S. Вот в таких случаях я очень сожалею, что разработчики языка C# дали возможность использовать конструкции if и using без явного указания блока. И ещё эта убогая инициализация значения полей! Код ужасно читается! Ещё до кучи, тогда уж, надо было в одну строчку записать, чтобы совсем тяжко было разбираться  ;):
Код - C# [Выбрать]
  1. using (RegAppTable rat = db.RegAppTableId.Open(OpenMode.ForWrite) as RegAppTable) if (!rat.Has(nameApp)) using (RegAppTableRecord regApp = new RegAppTableRecord() { Name = nameApp }) rat.Add(regApp);