@kitware/vtk.js
Version:
Visualization Toolkit for the Web
184 lines (154 loc) • 5.68 kB
JavaScript
import { m as macro } from '../../macros2.js';
import vtkRenderWindowInteractor from './RenderWindowInteractor.js';
const {
vtkErrorMacro,
VOID
} = macro;
// ----------------------------------------------------------------------------
// Global methods
// ----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Description:
// Transform from world to display coordinates.
function computeWorldToDisplay(renderer, x, y, z) {
const view = renderer.getRenderWindow().getViews()[0];
return view.worldToDisplay(x, y, z, renderer);
}
//----------------------------------------------------------------------------
// Description:
// Transform from display to world coordinates.
function computeDisplayToWorld(renderer, x, y, z) {
const view = renderer.getRenderWindow().getViews()[0];
return view.displayToWorld(x, y, z, renderer);
}
// ----------------------------------------------------------------------------
// Static API
// ----------------------------------------------------------------------------
const STATIC = {
computeWorldToDisplay,
computeDisplayToWorld
};
// ----------------------------------------------------------------------------
// vtkInteractorObserver methods
// ----------------------------------------------------------------------------
function vtkInteractorObserver(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkInteractorObserver');
const superClass = {
...publicAPI
};
//----------------------------------------------------------------------------
function unsubscribeFromEvents() {
while (model.subscribedEvents.length) {
model.subscribedEvents.pop().unsubscribe();
}
}
//----------------------------------------------------------------------------
// Check what events we can handle and register callbacks
function subscribeToEvents() {
vtkRenderWindowInteractor.handledEvents.forEach(eventName => {
if (publicAPI[`handle${eventName}`]) {
model.subscribedEvents.push(model._interactor[`on${eventName}`](callData => {
if (model.processEvents) {
return publicAPI[`handle${eventName}`](callData);
}
return VOID;
}, model.priority));
}
});
}
//----------------------------------------------------------------------------
// Public API methods
//----------------------------------------------------------------------------
publicAPI.setInteractor = i => {
if (i === model._interactor) {
return;
}
unsubscribeFromEvents();
model._interactor = i;
if (i && model.enabled) {
subscribeToEvents();
}
publicAPI.modified();
};
//----------------------------------------------------------------------------
publicAPI.setEnabled = enable => {
if (enable === model.enabled) {
return;
}
unsubscribeFromEvents();
if (enable) {
if (model._interactor) {
subscribeToEvents();
} else {
vtkErrorMacro(`
The interactor must be set before subscribing to events
`);
}
}
model.enabled = enable;
publicAPI.modified();
};
//----------------------------------------------------------------------------
// Description:
// Transform from display to world coordinates.
publicAPI.computeDisplayToWorld = (renderer, x, y, z) => {
if (!renderer) {
return null;
}
return model._interactor.getView().displayToWorld(x, y, z, renderer);
};
//----------------------------------------------------------------------------
// Description:
// Transform from world to display coordinates.
publicAPI.computeWorldToDisplay = (renderer, x, y, z) => {
if (!renderer) {
return null;
}
return model._interactor.getView().worldToDisplay(x, y, z, renderer);
};
//----------------------------------------------------------------------------
publicAPI.setPriority = priority => {
const modified = superClass.setPriority(priority);
if (modified && model._interactor) {
unsubscribeFromEvents();
subscribeToEvents();
}
};
}
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
const DEFAULT_VALUES = {
enabled: true,
// _interactor: null,
priority: 0.0,
processEvents: true,
subscribedEvents: []
};
// ----------------------------------------------------------------------------
function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);
// Object methods
macro.obj(publicAPI, model);
macro.event(publicAPI, model, 'InteractionEvent');
macro.event(publicAPI, model, 'StartInteractionEvent');
macro.event(publicAPI, model, 'EndInteractionEvent');
// Create get-only macros
macro.get(publicAPI, model, ['_interactor', 'enabled']);
// Create get-set macros
macro.setGet(publicAPI, model, ['priority', 'processEvents']);
macro.moveToProtected(publicAPI, model, ['interactor']);
// For more macro methods, see "Sources/macros.js"
// Object specific methods
vtkInteractorObserver(publicAPI, model);
}
// ----------------------------------------------------------------------------
const newInstance = macro.newInstance(extend, 'vtkInteractorObserver');
// ----------------------------------------------------------------------------
var vtkInteractorObserver$1 = {
newInstance,
extend,
...STATIC
};
export { STATIC, vtkInteractorObserver$1 as default, extend, newInstance };