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