UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

79 lines (75 loc) 2.39 kB
import { m as macro } from '../../../macros2.js'; function widgetBehavior(publicAPI, model) { model.classHierarchy.push('SeedWidgetProp'); const moveHandle = model.widgetState.getMoveHandle(); moveHandle.setVisible(true); model._isDragging = false; function isValidHandle(handle) { return handle === moveHandle; } function isPlaced() { return !!moveHandle.getOrigin(); } function currentWorldCoords(e) { const manipulator = model.activeState?.getManipulator?.() ?? model.manipulator; return manipulator.handleEvent(e, model._apiSpecificRenderWindow).worldCoords; } // Update the handle's center. Example: // handle.setCenter([1,2,3]); publicAPI.setCenter = newCenter => { moveHandle.setOrigin(newCenter); model._widgetManager.enablePicking(); }; publicAPI.handleLeftButtonPress = e => { if (!isValidHandle(model.activeState)) { model.activeState = null; return macro.VOID; } const worldCoords = currentWorldCoords(e); if (model.activeState === moveHandle) { if (!moveHandle.getOrigin() && worldCoords) { moveHandle.setOrigin(worldCoords); } } model._isDragging = true; model._apiSpecificRenderWindow.setCursor('grabbing'); publicAPI.invokeStartInteractionEvent(); return macro.EVENT_ABORT; }; publicAPI.handleLeftButtonRelease = e => { if (!model._isDragging) { model.activeState = null; return macro.VOID; } if (isPlaced()) { model._widgetManager.enablePicking(); model._apiSpecificRenderWindow.setCursor('pointer'); model._isDragging = false; model.activeState = null; model.widgetState.deactivate(); } publicAPI.invokeEndInteractionEvent(); return macro.EVENT_ABORT; }; publicAPI.handleMouseMove = e => { if (!model._isDragging) { model.activeState = null; return macro.VOID; } if (!model.activeState) throw Error('no activestate'); const worldCoords = currentWorldCoords(e); model.activeState.setOrigin(worldCoords); return macro.VOID; }; publicAPI.grabFocus = () => { moveHandle.setVisible(true); model._isDragging = true; model.activeState = moveHandle; model._interactor.render(); }; publicAPI.loseFocus = () => { model._isDragging = false; model.activeState = null; }; } export { widgetBehavior as default };