Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions Sources/Widgets/Widgets3D/SeedWidget/behavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,23 @@ export default function widgetBehavior(publicAPI, model) {
.worldCoords;
}

// Update the handle's center. Example:
// handle.setCenter([1,2,3]);
publicAPI.setCenter = (newCenter) => {
moveHandle.setOrigin(newCenter);
model._interactor.render();
};

publicAPI.startInteract = () => {
model._widgetManager.enablePicking();
publicAPI.grabFocus();
model._apiSpecificRenderWindow.setCursor('grabbing');
publicAPI.invokeStartInteractionEvent();
};

publicAPI.endInteract = () => {
publicAPI.loseFocus();
model._apiSpecificRenderWindow.setCursor('pointer');
model.widgetState.deactivate();
publicAPI.invokeEndInteractionEvent();
};

publicAPI.handleLeftButtonPress = (e) => {
Expand All @@ -38,12 +50,10 @@ export default function widgetBehavior(publicAPI, model) {

if (model.activeState === moveHandle) {
if (!moveHandle.getOrigin() && worldCoords) {
moveHandle.setOrigin(worldCoords);
publicAPI.setCenter(worldCoords);
}
}
model._isDragging = true;
model._apiSpecificRenderWindow.setCursor('grabbing');
publicAPI.invokeStartInteractionEvent();
publicAPI.startInteract();
return macro.EVENT_ABORT;
};

Expand All @@ -53,13 +63,8 @@ export default function widgetBehavior(publicAPI, model) {
return macro.VOID;
}
if (isPlaced()) {
model._widgetManager.enablePicking();
model._apiSpecificRenderWindow.setCursor('pointer');
model._isDragging = false;
model.activeState = null;
model.widgetState.deactivate();
publicAPI.endInteract();
}
publicAPI.invokeEndInteractionEvent();
return macro.EVENT_ABORT;
};

Expand All @@ -78,7 +83,6 @@ export default function widgetBehavior(publicAPI, model) {
moveHandle.setVisible(true);
model._isDragging = true;
model.activeState = moveHandle;
model._interactor.render();
};

publicAPI.loseFocus = () => {
Expand Down
18 changes: 14 additions & 4 deletions Sources/Widgets/Widgets3D/SeedWidget/example/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,10 @@ renderer.resetCamera();

fullScreenRenderer.addController(controlPanel);

document.querySelector('#addWidget').addEventListener('click', () => {
widgetManager.releaseFocus(widget);
function createWidget(eventOrCenter = null) {
if (widgetHandle) {
widgetHandle.endInteract();
}
widget = vtkSeedWidget.newInstance();

// Important: set the manipulator of the widget to constrain movement to the actor
Expand All @@ -77,15 +79,23 @@ document.querySelector('#addWidget').addEventListener('click', () => {
// Start placement interaction
widget.placeWidget(cone.getOutputData().getBounds());
widgetHandle = widgetManager.addWidget(widget);
widgetManager.grabFocus(widget);
});
if (Array.isArray(eventOrCenter)) {
widgetHandle.setCenter(eventOrCenter);
} else {
widgetHandle.startInteract();
}
}

document.querySelector('#addWidget').addEventListener('click', createWidget);

document.querySelector('#removeWidget').addEventListener('click', () => {
const widgets = widgetManager.getWidgets();
if (!widgets.length) return;
widgetManager.removeWidget(widgets[widgets.length - 1]);
});

createWidget([0.5, 0, 0]);

// -----------------------------------------------------------
// globals
// -----------------------------------------------------------
Expand Down
19 changes: 18 additions & 1 deletion Sources/Widgets/Widgets3D/SeedWidget/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,26 @@ export interface vtkSeedWidgetState {
getMoveHandle(): ISeedWidgetHandleState;
}

// The type of object returned by vtkWidgetManager.addWidget()
// Object returned by vtkWidgetManager.addWidget().
// One instance per view.
export interface vtkSeedWidgetHandle {
/**
* Place the seed position.
* @param center Vector3 3D position
*/
setCenter(center: Vector3): void;

/**
* Turn the seed widget as interactive.
* @see vtkSeedWidgetHandle.endInteract
*/
startInteract(): void;

/**
* Stop the seed widget to be interactive.
* @see vtkSeedWidgetHandle.endInteract
*/
endInteract(): void;
}

export interface vtkSeedWidget {
Expand Down