VTK
dox/Rendering/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 "vtkObject.h"
00049 
00050 class vtkRenderer;
00051 class vtkProp;
00052 class vtkHardwareSelector;
00053 class vtkRenderWindowInteractor;
00054 class vtkScenePickerSelectionRenderCommand;
00055 
00056 class VTK_RENDERING_EXPORT vtkScenePicker : public vtkObject
00057 {
00058   //BTX
00059   friend class vtkRenderer;
00060   friend class vtkScenePickerSelectionRenderCommand;
00061   //ETX
00062 public:
00063   static vtkScenePicker * New();
00064   vtkTypeMacro(vtkScenePicker,vtkObject);
00065   void PrintSelf(ostream& os, vtkIndent indent);
00066 
00068 
00069   virtual void SetRenderer( vtkRenderer* );
00070   vtkGetObjectMacro(Renderer,vtkRenderer);
00072 
00075   vtkIdType GetCellId( int displayPos[2] );
00076 
00079   vtkIdType GetVertexId( int displayPos[2] );
00080 
00083   vtkProp * GetViewProp( int displayPos[2] );
00084   
00086 
00089   vtkSetMacro( EnableVertexPicking, int );
00090   vtkGetMacro( EnableVertexPicking, int );
00091   vtkBooleanMacro( EnableVertexPicking, int );
00093 
00094 protected:
00095   vtkScenePicker();
00096   ~vtkScenePicker();
00097 
00098   // Pick render entire viewport
00099   // Automatically invoked from vtkRenderer at the end of a still render.
00100   void PickRender();
00101 
00102   // Pick render a region of the renderwindow
00103   void PickRender( int x0, int y0, int x1, int y1 );
00104 
00105   // Internal update method retrieves info from the Selector
00106   void Update( int displayPos[2] );
00107 
00108   // The RenderWindowInteractor must be set, so that avoid scene picks (which
00109   // involve extra renders) during interaction. This is done by observing the
00110   // RenderWindowInteractor for start and end interaction events. 
00111   void SetInteractor( vtkRenderWindowInteractor * );
00112   
00113   int                                     EnableVertexPicking;
00114   vtkHardwareSelector                   * Selector;
00115   vtkRenderer                           * Renderer;
00116   vtkRenderWindowInteractor             * Interactor;
00117   vtkIdType                               VertId;
00118   vtkIdType                               CellId;
00119   vtkProp                               * Prop;
00120   bool                                    NeedToUpdate;
00121   int                                     LastQueriedDisplayPos[2];
00122   vtkScenePickerSelectionRenderCommand  * SelectionRenderCommand;
00123 
00124   vtkTimeStamp PickRenderTime;
00125 private:
00126   vtkScenePicker(
00127                  const vtkScenePicker&); // Not implemented.
00128   void operator=(const vtkScenePicker&); // Not implemented.
00129 };
00130 
00131 #endif
00132