Module extra/OccUndoRedo

Contains implementation of undo/redo controller OccUndoRedoController, which uses OccUndoRedoParams to build stack of application states. Contains implementation of OccPropertyUndoableController which tracks objects property changes and store their states in OccUndoRedoController stack.

// Enable undo/redo
const anUndoRedo = new OccUndoRedoController(OccViewerModule);
// Add on selection change callbacks
let anOnSelectionChangeCallbacks = [];
OccViewerModule.eventManager.addEventListener('onSelectedObjectsChanged', function ()
{
let aSelObjects = this.selectionManager.selectedObjects;
for (let aCallback of anOnSelectionChangeCallbacks)
{
aCallback (aSelObjects);
}
return 0;
});

// Add on displayed change callbacks
let anOnDisplayedChangeCallbacks = [];
OccViewerModule.eventManager.addEventListener('onDisplayedObjectsChanged', function ()
{
let aDispObjects = OccViewerModule.interactiveContext.displayedObjects;
for (let aCallback of anOnDisplayedChangeCallbacks)
{
aCallback (aDispObjects);
}
return 0;
});

// Create property undo/redo tracker
const aPropertyUndoable = new OccPropertyUndoableController(anUndoRedo);


// Subscribe property tracker on selection and display changes
anOnSelectionChangeCallbacks.push (aPropertyUndoable.checkChanges.bind(aPropertyUndoable));
anOnDisplayedChangeCallbacks.push (aPropertyUndoable.checkChanges.bind(aPropertyUndoable));

...

// On undo button click
if(!anUndoRedo){
return;
}
anUndoRedo.undo();

...
// On redo button click
if(!anUndoRedo){
return;
}
anUndoRedo.redo();
...

Classes

OccPropertyUndoableController
OccUndoRedoController

Interfaces

OccUndoRedoParams