Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Балиев от 22-04-2020, 17:13:59

Название: Заново открыть объект для записи после отработки Commit()
Отправлено: Балиев от 22-04-2020, 17:13:59
Вот фрагмент кода, после которого мне вновь нужно открыть 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();
Заранее благодарен.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Александр Ривилис от 22-04-2020, 17:17:50
Балиев,
После Transaction.Commit нужно повторно создать транзакцию и в ней снова открыть объект (Transaction.GetObject).
Хотя возможно не нужно вызывать Transaction.Commit и всё можно сделать в одной транзакции.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Балиев от 22-04-2020, 17:25:06
Хотя возможно не нужно вызывать Transaction.Commit и всё можно сделать в одной транзакции.
Я вызываю Transaction.Commit для того, чтобы на экране корректно отобразился объект после выполнения TransformBy. А нельзя ли это сделать по-другому, без вызова Transaction.Commit?
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Александр Ривилис от 22-04-2020, 17:29:57
Я вызываю Transaction.Commit для того, чтобы на экране корректно отобразился объект после выполнения TransformBy.
Но ты же потом всё равно собираешься его модифицировать, раз снова хочешь открыть его для записи. Тогда зачем в этом момент отображать его?
Можешь попробовать TransactionManager.QueueForGraphicsFlush для обновления графики.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Балиев от 22-04-2020, 18:34:44
Но ты же потом всё равно собираешься его модифицировать, раз снова хочешь открыть его для записи. Тогда зачем в этом момент отображать его?
Из-за того, что в последствии мне нужно извлекать из этого объекта координаты точек.
Можешь попробовать TransactionManager.QueueForGraphicsFlush для обновления графики.
Все работает. Спасибо!
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Александр Ривилис от 22-04-2020, 19:24:46
Из-за того, что в последствии мне нужно извлекать из этого объекта координаты точек.
Не вижу взаимосвязи. Отображение на экране и координаты точек объекта никак не связаны.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Балиев от 22-04-2020, 19:31:25
Не вижу взаимосвязи. Отображение на экране и координаты точек объекта никак не связаны.
Зато работа системы привязок связана с реальными координатами точек. Поэтому если не перерисовать, то привязки срабатывают вне точек, что, очевидно, не гуд.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Александр Ривилис от 22-04-2020, 19:35:06
Не вижу взаимосвязи. Отображение на экране и координаты точек объекта никак не связаны.
Зато работа системы привязок связана с реальными координатами точек. Поэтому если не перерисовать, то привязки срабатывают вне точек, что, очевидно, не гуд.
Очень желательно перед обращением к пользователю (а привязки работают только в этом случае) закрывать транзакцию. Особенно если в ней примитивы модифицировались. Т.е. в этой ситуации я бы однозначно делал две транзакции.
Название: Re: Заново открыть объект для записи после отработки Commit()
Отправлено: Балиев от 22-04-2020, 19:41:48
ОК. Попробую.