UndoContainer

Автор gabik, 25.03.13, 15:20:50

« назад - далее »

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

gabik

Макрообъект состоит из большого количества операций. Все операции в макрообъекте объединяю с помощью IKompasDocument3D::UndoContainer в одно действие. При удалении объект удалятеся мгновенно, но при использовании контейнера (Ctrl + Z) удаление происходит  ужасно долго и при том объект разрушается по кусочкам у нас на глазах. Как быть в этом случае?

Попробуйте использовать свойство EnableUndo.

gabik

EnableUndo отключает добавление команд в UndoContainer. Отключил добавление зависимых объектов. Теперь добовляю в контейнер только независимые объекты, отмена которых влечет удаление зависимых. Но все равно скорость разрушения остается запредельной...

Что и, как Вы разрушаете?

gabik

Я разрушаю макрообъект состоящий из большого количества пространственных кривых и поверхностей. Соответственно есть необходимость отмены действия, в данном случае создания этого макрообъекта. Перед самым созданием и наполнением макрообъекта устанавливаю флаг UndoContainer в положение true. В конце, после того как макрообъект создан и наполнен элементами устанавливаю флаг UndoContainer  соответственно в false. При выполнение отмены операции мой макрообъект удаляется ужасно долго, по частям, на глазах пользователя.

Удаляется за один шаг команды отмены действий?

gabik

Да, одно нажатие отмены - удаление всего построенного ранее объекта.

Уточните пожалуйста, большое количество объектов, сколько примерно в численном исчислении?

gabik

Даже при небольшом количестве объектвов уже удалятся долго. Уже при нескольких поверхностях и пространственных кривых. Если количество возврастает соответственно время пропорционально растет количеству операций затраченных на создание макрообъекта.

Возможна причина в перерисовке окон, но может время тратится ещё на пересчёт геометрии.
Можете один из вариантов посмотреть здесь http://forum.ascon.ru/index.php/topic,24115.msg172338.html#msg172338
Запрет прорисовки библиотечной панели инструментов и окна документа в библиотеке построения разверток, при добавлении в список для экспорта 3100 объектов, позволил сократить время с 3-4 минут до 4 секунд, а удаление до 2 секунд.

gabik

А как можно сказать UndoContainer`у о необходимости не перерисовывать окно когда отменяется команда создания моего макрообъекта? Я же не могу повсеместно запретить перерисовку...

#11
Нужно послать сообщение окну функцией SendMessage, сначала на запрет перерисовки окна, после выполнения разрушения, на разрешение перерисовки окна, UndoContainer здесь не участвует.
Сделал небольшой эксперимент, на видео первая часть добавление 1000 точек при открытом окне свойства, перерисовка которого была не заблокирована, процесс занял 32 секунды, затем заблокировал перерисовку окна свойства вторая часть видео, процесс добавления 11122 объектов занял 44 секунды, следующим экспериментом разблокировал перерисовку окна свойства и библиотечной панели свойств, процесс остановил после добавления 2600 объектов заняло 54 минуты, если добавлять все 11122 объекта, то процесс должен был занять 3 часа 50 минут.