Заново открыть объект для записи после отработки Commit()

Автор Тема: Заново открыть объект для записи после отработки Commit()  (Прочитано 3510 раз)

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

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

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Вот фрагмент кода, после которого мне вновь нужно открыть acSol3D для записи. Как это сделать не прибегая к повторному указанию объекта на экране?
Код - C# [Выбрать]
  1.  ObjectId acSol3DId = ed.GetEntity("\nSelect solid to bend: ").ObjectId;
  2.  DBObject obj0 = acTrans.GetObject(acSol3DId, OpenMode.ForWrite);
  3.  Solid3d acSol3D = obj0 as Solid3d;
  4.  acSol3D.TransformBy(ed.CurrentUserCoordinateSystem.Inverse());
  5.  acTrans.Commit();
Заранее благодарен.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Балиев,
После Transaction.Commit нужно повторно создать транзакцию и в ней снова открыть объект (Transaction.GetObject).
Хотя возможно не нужно вызывать Transaction.Commit и всё можно сделать в одной транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Хотя возможно не нужно вызывать Transaction.Commit и всё можно сделать в одной транзакции.
Я вызываю Transaction.Commit для того, чтобы на экране корректно отобразился объект после выполнения TransformBy. А нельзя ли это сделать по-другому, без вызова Transaction.Commit?

Отмечено как Решение Балиев 22-04-2020, 18:31:52

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я вызываю Transaction.Commit для того, чтобы на экране корректно отобразился объект после выполнения TransformBy.
Но ты же потом всё равно собираешься его модифицировать, раз снова хочешь открыть его для записи. Тогда зачем в этом момент отображать его?
Можешь попробовать TransactionManager.QueueForGraphicsFlush для обновления графики.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Но ты же потом всё равно собираешься его модифицировать, раз снова хочешь открыть его для записи. Тогда зачем в этом момент отображать его?
Из-за того, что в последствии мне нужно извлекать из этого объекта координаты точек.
Можешь попробовать TransactionManager.QueueForGraphicsFlush для обновления графики.
Все работает. Спасибо!

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

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

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Не вижу взаимосвязи. Отображение на экране и координаты точек объекта никак не связаны.
Зато работа системы привязок связана с реальными координатами точек. Поэтому если не перерисовать, то привязки срабатывают вне точек, что, очевидно, не гуд.

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

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

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

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
ОК. Попробую.