Как избежать затирание информации в Xdata

Автор Тема: Как избежать затирание информации в Xdata  (Прочитано 10949 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я по диагонали просмотрел твой код. У тебя есть несколько грубейших ошибок.
1. В методе SetDynamicBlockProperty (файл EntityProcessor.cs) ты открываешь BlockReference для чтения, а затем модифицируешь его динамические свойства. Это как???
2. В методе GetXData2 (файл Synchronizer.cs) ты открываешь транзакцию, но не вызываешь Commit. Соответственно происходит откат. И вообще этот метод бред в чистейшем виде. Ты передаешь в него DBObject, т.е. объект уже открыт. Но ты зачем-то решил стартовать еще транзакцию, и снова открыть этот же объект. В моей голове это не укладывается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Зачем мне тратить моё время на изучение логики твоей программы
Тут я прошу прощения, алгоритм и цель кода я действительно подробно не рассказал.
Мой код собирает в единый большой чертеж объекты из множества детализированных чертежей. Отбор идет по положению объектов чертежа-источника на специально предназначенных слоях и внутри замкнутой полилинии. Если два этих условия соблюдаются, то объект переносится(копируется из источника) в чертеж-сборку. При переносе в xdata записывается признак чертежа-источника(его номер) из которого получены объекты. Затем, при обновлении чертежа сборки, по данным из xdata происходит отбор и удаление объектов предыдущего поколения, чтобы в сборке не было наслоения объектов друг на друга.
Такая цель моего кода.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Обратил внимание, что ты копируешь между базами с флагом Ignore. Ты подумал что будет при наличии одноименных блоков, имеющих разное содержимое?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Ты подумал что будет при наличии одноименных блоков, имеющих разное содержимое
Последующие переопределятся на основе первого описания блока, которое было добавлено раньше.

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
что это будет корректно работать.
Возможны ошибки во время работы кода или потеря свойств самого блока?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
что это будет корректно работать.
Возможны ошибки во время работы кода или потеря свойств самого блока?
И то и другое. И у тебя еще и просто ошибка в коде при изменении свойства видимости блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
В методе SetDynamicBlockProperty (файл EntityProcessor.cs) ты открываешь BlockReference для чтения, а затем модифицируешь его динамические свойства. Это как???
2. В методе GetXData2 (файл Synchronizer.cs) ты открываешь транзакцию, но не вызываешь Commit. Соответственно происходит откат. И вообще этот метод бред в чистейшем виде. Ты передаешь в него DBObject, т.е. объект уже открыт.

За вложенностью транзакций действительно не уследил. Спасибо. Блок сделал ForWrite. Но проблема исчезновения ранее добавленных объектов не ушла - они исчезают. Причем те что имеют в xdata AcDbBlockRepETag и мной добавленные xdata как раз и исчезают. Но ошибку про AcDbRegAppTable(9) Invalid Entry Audit не дает. Вот такая непонятка.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Причем те что имеют в xdata AcDbBlockRepETag и мной добавленные xdata как раз и исчезают.
Ну это как раз очевидно. Ты сначала меняешь для BlockReference его XData, а затем меняешь динамические свойства. Изменение динамического свойства приводит к созданию нового BlockReference и добавленные тобой XData исчезают. Попробуй убрать строку
Код - C# [Выбрать]
  1. EntityProcessor.SetDynamicBlockProperty(destDb, blockNames);
Будут ли исчезать твои XData?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Но проблема исчезновения ранее добавленных объектов не ушла - они исчезают. Причем те что имеют в xdata AcDbBlockRepETag и мной добавленные xdata как раз и исчезают
Исчезают объекты или исчезает XData?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Исчезают объекты. Это и получается если использовать мой код и два dwg из архива, что я выкладывал как пример.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
Повторюсь.
Попробуй убрать строку
Код - C# [Выбрать]

    EntityProcessor.SetDynamicBlockProperty(destDb, blockNames);

Будут ли исчезать твои XData?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Попробуй убрать строку
Попробовал - объекты исчезают. Исчезает ли в них xdata никак не проверить - объект в чертеже отсутствует. Тут нужно наверно уточнить - пропадают не только блоки но и полилинии и другие объекты. Объекты я здесь применяю как широкий термин - все что отображается/нарисовано в чертеже.
AcDbBlockRepETag есть также у меня в свойствах полилинии при открытии MgdDbg.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
AcDbBlockRepETag есть также у меня в свойствах полилинии при открытии MgdDbg.
Бред какой-то. Эта RegApp должна быть только у динамических блоков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
Я вижу, что у тебя в чертеже следы NanoSPDS. Если он установлен, как и другие сторонние или твои приложения - всё снеси и проверяй на чистом AutoCAD со всеми установленными обновлениями. ARXDBG и MGDDBG можешь оставить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение