Cloned library of VTK-5.0.0 with extra build files for internal package management.
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

/*=========================================================================
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