You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.3 KiB
141 lines
5.3 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkAbstractPicker.h,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkAbstractPicker - define API for picking subclasses
|
|
// .SECTION Description
|
|
// 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.
|
|
//
|
|
// vtkPicker fires events during the picking process. These
|
|
// events are StartPickEvent, PickEvent, and EndPickEvent which are
|
|
// invoked prior to picking, when something is picked, and after all picking
|
|
// candidates have been tested. Note that during the pick process the
|
|
// PickEvent of vtkProp (and its subclasses such as vtkActor) is fired
|
|
// prior to the PickEvent of vtkPicker.
|
|
|
|
// .SECTION Caveats
|
|
// vtkAbstractPicker and its subclasses will not pick props that are
|
|
// "unpickable" (see vtkProp) or are fully transparent (if transparency
|
|
// is a property of the vtkProp).
|
|
//
|
|
// There are two classes of pickers: those that pick using geometric methods
|
|
// (typically a ray cast); and those that use rendering hardware. Geometric
|
|
// methods return more information but are slower. Hardware methods are much
|
|
// faster and return minimal information. Examples of geometric pickers
|
|
// include vtkPicker, vtkCellPicker, and vtkPointPicker. Examples of hardware
|
|
// pickers include vtkWorldPointPicker and vtkPropPicker.
|
|
|
|
// .SECTION See Also
|
|
// vtkPropPicker uses hardware acceleration to pick an instance of vtkProp.
|
|
// (This means that 2D and 3D props can be picked, and it's relatively fast.)
|
|
// If you need to pick cells or points, you might wish to use vtkCellPicker
|
|
// or vtkPointPicker. vtkWorldPointPicker is the fastest picker, returning
|
|
// an x-y-z coordinate value using the hardware z-buffer. vtkPicker can be
|
|
// used to pick the bounding box of 3D props.
|
|
|
|
#ifndef __vtkAbstractPicker_h
|
|
#define __vtkAbstractPicker_h
|
|
|
|
#include "vtkObject.h"
|
|
|
|
class vtkRenderer;
|
|
class vtkProp;
|
|
class vtkPropCollection;
|
|
|
|
class VTK_RENDERING_EXPORT vtkAbstractPicker : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkAbstractPicker,vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Get the renderer in which pick event occurred.
|
|
vtkGetObjectMacro(Renderer,vtkRenderer);
|
|
|
|
// Description:
|
|
// Get the selection point in screen (pixel) coordinates. The third
|
|
// value is related to z-buffer depth. (Normally should be =0.)
|
|
vtkGetVectorMacro(SelectionPoint,double,3);
|
|
|
|
// Description:
|
|
// Return position in global coordinates of pick point.
|
|
vtkGetVectorMacro(PickPosition,double,3);
|
|
|
|
// Description:
|
|
// Perform pick operation with selection point provided. Normally the
|
|
// first two values for the selection point are x-y pixel coordinate, and
|
|
// the third value is =0. Return non-zero if something was successfully
|
|
// picked.
|
|
virtual int Pick(double selectionX, double selectionY, double selectionZ,
|
|
vtkRenderer *renderer) = 0;
|
|
|
|
// Description: Perform pick operation with selection point
|
|
// provided. Normally the first two values for the selection point
|
|
// are x-y pixel coordinate, and the third value is =0. Return
|
|
// non-zero if something was successfully picked.
|
|
int Pick(double selectionPt[3], vtkRenderer *ren)
|
|
{return this->Pick(selectionPt[0],selectionPt[1],selectionPt[2],ren);};
|
|
|
|
// Description:
|
|
// Use these methods to control whether to limit the picking to this list
|
|
// (rather than renderer's actors). Make sure that the pick list contains
|
|
// actors that referred to by the picker's renderer.
|
|
vtkSetMacro(PickFromList,int);
|
|
vtkGetMacro(PickFromList,int);
|
|
vtkBooleanMacro(PickFromList,int);
|
|
|
|
// Description:
|
|
// Initialize list of actors in pick list.
|
|
void InitializePickList();
|
|
|
|
// Description:
|
|
// Add an actor to the pick list.
|
|
void AddPickList(vtkProp *);
|
|
|
|
// Description:
|
|
// Delete an actor from the pick list.
|
|
void DeletePickList(vtkProp *);
|
|
|
|
// Description:
|
|
// Return the list of actors in the PickList.
|
|
vtkPropCollection *GetPickList() {return this->PickList;}
|
|
|
|
protected:
|
|
vtkAbstractPicker();
|
|
~vtkAbstractPicker();
|
|
|
|
virtual void Initialize();
|
|
|
|
vtkRenderer *Renderer; //pick occurred in this renderer's viewport
|
|
double SelectionPoint[3]; //selection point in window (pixel) coordinates
|
|
double PickPosition[3]; //selection point in world coordinates
|
|
|
|
// use the following to control picking from a list
|
|
int PickFromList;
|
|
vtkPropCollection *PickList;
|
|
private:
|
|
vtkAbstractPicker(const vtkAbstractPicker&); // Not implemented.
|
|
void operator=(const vtkAbstractPicker&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|