VTK
dox/Rendering/Core/vtkScenePicker.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkScenePicker.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00045 #ifndef __vtkScenePicker_h
00046 #define __vtkScenePicker_h
00047 
00048 #include "vtkRenderingCoreModule.h" // For export macro
00049 #include "vtkObject.h"
00050 
00051 class vtkRenderer;
00052 class vtkProp;
00053 class vtkHardwareSelector;
00054 class vtkRenderWindowInteractor;
00055 class vtkScenePickerSelectionRenderCommand;
00056 
00057 class VTKRENDERINGCORE_EXPORT vtkScenePicker : public vtkObject
00058 {
00059   //BTX
00060   friend class vtkRenderer;
00061   friend class vtkScenePickerSelectionRenderCommand;
00062   //ETX
00063 public:
00064   static vtkScenePicker* New();
00065   vtkTypeMacro(vtkScenePicker, vtkObject);
00066   void PrintSelf(ostream& os, vtkIndent indent);
00067 
00069 
00070   virtual void SetRenderer(vtkRenderer*);
00071   vtkGetObjectMacro(Renderer, vtkRenderer);
00073 
00076   vtkIdType GetCellId(int displayPos[2]);
00077 
00080   vtkIdType GetVertexId(int displayPos[2]);
00081 
00084   vtkProp* GetViewProp(int displayPos[2]);
00085 
00087 
00090   vtkSetMacro(EnableVertexPicking, int);
00091   vtkGetMacro(EnableVertexPicking, int);
00092   vtkBooleanMacro(EnableVertexPicking, int);
00094 
00095 protected:
00096   vtkScenePicker();
00097   ~vtkScenePicker();
00098 
00099   // Pick render entire viewport
00100   // Automatically invoked from vtkRenderer at the end of a still render.
00101   void PickRender();
00102 
00103   // Pick render a region of the renderwindow
00104   void PickRender(int x0, int y0, int x1, int y1);
00105 
00106   // Internal update method retrieves info from the Selector
00107   void Update(int displayPos[2]);
00108 
00109   // The RenderWindowInteractor must be set, so that avoid scene picks (which
00110   // involve extra renders) during interaction. This is done by observing the
00111   // RenderWindowInteractor for start and end interaction events.
00112   void SetInteractor(vtkRenderWindowInteractor *);
00113 
00114   int EnableVertexPicking;
00115   vtkHardwareSelector* Selector;
00116   vtkRenderer* Renderer;
00117   vtkRenderWindowInteractor* Interactor;
00118   vtkIdType VertId;
00119   vtkIdType CellId;
00120   vtkProp* Prop;
00121   bool NeedToUpdate;
00122   int LastQueriedDisplayPos[2];
00123   vtkScenePickerSelectionRenderCommand* SelectionRenderCommand;
00124 
00125   vtkTimeStamp PickRenderTime;
00126 private:
00127   vtkScenePicker(const vtkScenePicker&); // Not implemented.
00128   void operator=(const vtkScenePicker&); // Not implemented.
00129 };
00130 
00131 #endif