00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __igstkView_h
00018 #define __igstkView_h
00019
00020 #ifdef _MSC_VER
00021 #pragma warning ( disable : 4018 )
00022
00023
00024 #pragma warning( disable : 4284 )
00025 #endif
00026
00027
00028 class vtkRenderWindow;
00029 class vtkCamera;
00030 class vtkProp;
00031 class vtkInteractorStyle;
00032 class vtkRenderer;
00033 class vtkWorldPointPicker;
00034
00035
00036
00037 #include "itkCommand.h"
00038
00039
00040 #include "igstkLogger.h"
00041 #include "igstkObject.h"
00042 #include "igstkMacros.h"
00043 #include "igstkStateMachine.h"
00044 #include "igstkPulseGenerator.h"
00045 #include "igstkObjectRepresentation.h"
00046 #include "igstkEvents.h"
00047 #include "igstkAnnotation2D.h"
00048 #include "igstkRenderWindowInteractor.h"
00049
00050 #include "igstkCoordinateSystemInterfaceMacros.h"
00051
00052 namespace igstk {
00053
00073 class View : public Object
00074 {
00075
00076 public:
00077
00079 igstkStandardClassTraitsMacro( View, Object );
00080
00084 void SetRefreshRate( double frequency );
00085
00088 void RequestAddObject( ObjectRepresentation* object );
00089
00091 void RequestAddAnnotation2D( Annotation2D::Pointer annotation );
00092
00095 void RequestRemoveObject( ObjectRepresentation* object );
00096
00101 void RequestSaveScreenShot( const std::string & filename );
00102
00104 void Print( std::ostream& os, ::itk::Indent indent=0) const;
00105
00107 igstkLoggerMacro()
00108
00109
00110 void RequestResetCamera();
00111
00113 void RequestStart();
00114
00116 void RequestStop();
00117
00119 void SetCameraPosition( double x, double y, double z);
00120
00122 void SetCameraFocalPoint( double x, double y, double z);
00123
00125 void SetCameraViewUp( double vx, double vy, double vz);
00126
00128 void SetCameraClippingRange( double dNear, double dFar );
00129
00131 void SetCameraParallelProjection( bool flag );
00132
00134 void SetRendererBackgroundColor(
00135 double red, double green, double blue );
00136
00138 void SetCameraZoomFactor( double rate );
00139
00140 friend class ViewProxyBase;
00141
00142 protected:
00143
00144 View( );
00145 virtual ~View( void );
00146
00148 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00149
00151 void SetInteractorStyle( vtkInteractorStyle * style );
00152
00154 void RequestSetRenderWindowSize( int width, int height );
00155
00157 void RequestInitializeRenderWindowInteractor();
00158
00160 void SetPickedPointCoordinates( double xPosition, double yPosition );
00161
00162 private:
00163
00165 vtkRenderer * GetRenderer() const;
00166
00168 vtkRenderWindow * GetRenderWindow() const;
00169
00171 RenderWindowInteractor * GetRenderWindowInteractor() const;
00172
00174 void InitializeRenderWindowInteractorProcessing();
00175
00178 void AddActorProcessing();
00179 void RemoveActorProcessing();
00180
00182 void AddAnnotation2DProcessing();
00183
00185 void AddObjectProcessing();
00186 void RemoveObjectProcessing();
00187
00189 void RefreshRender();
00190
00192 void RequestAddActor( vtkProp * actor );
00193
00195 void RequestRemoveActor( vtkProp * actor );
00196
00198 void ReportInvalidRequestProcessing();
00199
00201 void SaveScreenShotWhileIdleProcessing();
00202
00205 void SaveScreenShotWhileInteractorInitializedProcessing();
00206
00209 void SaveScreenShotWhileRefreshingProcessing();
00210
00215 void SaveScreenShot();
00216
00218 void ReportInvalidScreenShotFileNameProcessing();
00219
00221 void SetRenderWindowSizeProcessing();
00222
00224 void ReportInvalidRenderWindowSizeProcessing();
00225
00227 void StartProcessing();
00228 void StopProcessing();
00229
00231 void ResetCameraProcessing();
00232
00233 private:
00234
00235 vtkRenderWindow * m_RenderWindow;
00236 vtkRenderer * m_Renderer;
00237 vtkCamera * m_Camera;
00238 vtkWorldPointPicker * m_PointPicker;
00239
00241 RenderWindowInteractor * m_RenderWindowInteractor;
00242
00246 vtkProp * m_ActorToBeAdded;
00247 vtkProp * m_ActorToBeRemoved;
00248
00249 Annotation2D::Pointer m_Annotation2DToBeAdded;
00250
00251 typedef itk::SimpleMemberCommand< Self > ObserverType;
00252
00253 PulseGenerator::Pointer m_PulseGenerator;
00254 ObserverType::Pointer m_PulseObserver;
00255
00257 typedef ObjectRepresentation::Pointer ObjectPointer;
00258 typedef std::list< ObjectPointer > ObjectListType;
00259 typedef ObjectListType::const_iterator ObjectListConstIterator;
00260
00262 ObjectListType m_Objects;
00263
00264
00265 ObjectRepresentation::Pointer m_ObjectToBeAdded;
00266 ObjectRepresentation::Pointer m_ObjectToBeRemoved;
00267 ObjectListType::iterator m_IteratorToObjectToBeRemoved;
00268 std::string m_ScreenShotFileName;
00269 int m_RenderWindowWidthToBeSet;
00270 int m_RenderWindowHeightToBeSet;
00271
00273 igstkDeclareInputMacro( ValidAddActor );
00274 igstkDeclareInputMacro( NullAddActor );
00275 igstkDeclareInputMacro( ValidRemoveActor );
00276 igstkDeclareInputMacro( NullRemoveActor );
00277 igstkDeclareInputMacro( ValidAddObject );
00278 igstkDeclareInputMacro( NullAddObject );
00279 igstkDeclareInputMacro( ValidAddAnnotation2D );
00280 igstkDeclareInputMacro( NullAddAnnotation2D );
00281 igstkDeclareInputMacro( ExistingAddObject );
00282 igstkDeclareInputMacro( ValidRemoveObject );
00283 igstkDeclareInputMacro( InexistingRemoveObject );
00284 igstkDeclareInputMacro( NullRemoveObject );
00285 igstkDeclareInputMacro( ResetCamera );
00286 igstkDeclareInputMacro( StartRefreshing );
00287 igstkDeclareInputMacro( StopRefreshing );
00288 igstkDeclareInputMacro( ValidScreenShotFileName );
00289 igstkDeclareInputMacro( InvalidScreenShotFileName );
00290 igstkDeclareInputMacro( ValidRenderWindowSize );
00291 igstkDeclareInputMacro( InValidRenderWindowSize );
00292 igstkDeclareInputMacro( InitializeInteractor );
00293
00295 igstkDeclareStateMacro( Idle );
00296 igstkDeclareStateMacro( InteractorInitialized );
00297 igstkDeclareStateMacro( Refreshing );
00298
00299 View(const View& );
00300 View& operator=(const View& );
00301
00303 igstkCoordinateSystemClassInterfaceMacro();
00304
00308 CoordinateSystem::Pointer m_PickerCoordinateSystem;
00309 };
00310
00311 std::ostream& operator<<(std::ostream& os, const View& o);
00312
00313 }
00314
00315 #endif