import vtkPicker, { IPickerInitialValues } from 'vtk.js/Sources/Rendering/Core/Picker';
import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper';
import { Vector3 } from 'vtk.js/Sources/types';
import vtkProp3D from 'vtk.js/Sources/Rendering/Core/Prop3D';
import { Nullable } from 'vtk.js/Sources/types';

interface IPointPickerInitialValues extends IPickerInitialValues {
	pointId?: number;
	pointIJK?: number[];
	useCells?: boolean;
}

export interface vtkPointPicker extends vtkPicker {

	/**
	 * 
	 */
	getPointIJK(): number[];

	/**
	 * 
	 */
	getPointIJKByReference(): number[];

	/**
	 * Get the id of the picked point.
	 * If PointId = -1, nothing was picked.
	 */
	getPointId(): number;

	/**
	 * 
	 */
	getUseCells(): boolean;

	/**
	 * Specify whether the point search should be based on cell points or directly on the point list.
	 * @param useCells 
	 */
	setUseCells(useCells: boolean): boolean;
}

/**
 * Method use to decorate a given object (publicAPI+model) with vtkPointPicker characteristics.
 *
 * @param publicAPI object on which methods will be bounds (public)
 * @param model object on which data structure will be bounds (protected)
 * @param {IPointPickerInitialValues} [initialValues] (default: {})
 */
export function extend(publicAPI: object, model: object, initialValues?: IPointPickerInitialValues): void;

/**
 * Method use to create a new instance of vtkPointPicker
 * @param {IPointPickerInitialValues} [initialValues] for pre-setting some of its content
 */
export function newInstance(initialValues?: IPointPickerInitialValues): vtkPointPicker;

/** 
 * vtkPointPicker is used to select a point by shooting a ray into a graphics window 
 * and intersecting with actor's defining geometry - specifically its points. 
 * Beside returning coordinates, actor, and mapper, vtkPointPicker returns the id of the point
 * projecting closest onto the ray (within the specified tolerance). 
 * Ties are broken (i.e., multiple points all projecting within the tolerance along 
 * the pick ray) by choosing the point closest to the ray origin (i.e., closest to the eye).
 * 
 * @see [vtkPicker](./Rendering_Core_Picker.html)
 * @see [vtkCellPicker](./Rendering_Core_CellPicker.html)
 */
 export declare const vtkPointPicker: {
	newInstance: typeof newInstance,
	extend: typeof extend,
};
export default vtkPointPicker;
