VTK
|
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