AbstractPicker

Introduction

define API for picking subclasses

vtkAbstractPicker is an abstract superclass that defines a minimal API for its concrete subclasses.
The minimum functionality of a picker is to return the x-y-z global coordinate position of a pick (the pick itself is defined in display coordinates).

The API to this class is to invoke the Pick() method with a selection point (in display coordinates - pixels)
and a renderer. Then get the resulting pick position in global coordinates with the GetPickPosition() method.

See also

[vtkPointPicker]

pickPosition (get Array)

Get the picked position

pickFromList (set/get boolean)

Determine if the picking will be processed on all the actors of the renderer or
from a list of actors

pickList (set/get array)

Define the list of actors that will be tested for the picking (if pickFromList === true)

initializePickList

Reset the pick list to 0 element

addPickList(actor)

Add an actor to the pickList

deletePickList(actor)

Remove an actor to the pickList

Source

index.js
import macro from 'vtk.js/Sources/macro';

// ----------------------------------------------------------------------------
// vtkAbstractPicker methods
// ----------------------------------------------------------------------------

function vtkAbstractPicker(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkAbstractPicker');

publicAPI.initialize = () => {
model.renderer = null;

model.selectionPoint[0] = 0.0;
model.selectionPoint[1] = 0.0;
model.selectionPoint[2] = 0.0;

model.pickPosition[0] = 0.0;
model.pickPosition[1] = 0.0;
model.pickPosition[2] = 0.0;
};

publicAPI.initializePickList = () => {
model.pickList = [];
};

publicAPI.addPickList = (actor) => {
model.pickList.push(actor);
};

publicAPI.deletePickList = (actor) => {
const i = model.pickList.indexOf(actor);
if (i !== -1) {
model.pickList.splice(i, 1);
}
};
}

// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------

const DEFAULT_VALUES = {
renderer: null,
selectionPoint: [0.0, 0.0, 0.0],
pickPosition: [0.0, 0.0, 0.0],
pickFromList: 0,
pickList: [],
};

// ----------------------------------------------------------------------------

export function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, DEFAULT_VALUES, initialValues);

// Build VTK API
macro.obj(publicAPI, model);

macro.get(publicAPI, model, ['renderer']);
macro.getArray(publicAPI, model, ['selectionPoint', 'pickPosition']);
macro.setGet(publicAPI, model, ['pickFromList', 'pickList']);

vtkAbstractPicker(publicAPI, model);
}

// ----------------------------------------------------------------------------

export const newInstance = macro.newInstance(extend, 'vtkAbstractPicker');

// ----------------------------------------------------------------------------

export default { newInstance, extend };