00001 00015 #ifndef _CAMERA_H_ 00016 #define _CAMERA_H_ 00017 00018 #include <Inventor/nodes/SoNode.h> 00019 #include <Inventor/nodes/SoRotationXYZ.h> 00020 00021 #include "graphical_node.h" 00022 #include "time_updateable.h" 00023 #include "templates/observable.h" 00024 00030 class Camera: public TimeUpdateable, public Templates::Observable<Camera> 00031 { 00032 private: 00033 00035 SoGroup *_rootNode; 00036 00038 SoRotationXYZ *_rotX; 00039 00041 SoRotationXYZ *_rotY; 00042 00044 float _angleX; 00045 00047 float _angleY; 00048 00050 float _maxAngleX; 00051 00053 float _maxAngleY; 00054 00055 private: 00056 00057 // Disable copy constructor and assignment operator 00058 Camera(const Camera &); 00059 Camera & operator=(const Camera &); 00060 00061 public: 00062 00066 Camera(); 00067 00071 ~Camera(); 00072 00073 public: 00074 00078 float getAngleX() const { return _angleX; } 00079 00083 float getAngleY() const { return _angleY; } 00084 00088 SoGroup *getRootNode() { return _rootNode; } 00089 00093 const SoRotationXYZ *getRotationX() const { return _rotX; } 00094 00098 const SoRotationXYZ *getRotationY() const { return _rotY; } 00099 00100 // Override 00101 virtual void timeUpdate(float dt); 00102 00109 void updateView(short x, short y); 00110 }; 00111 00112 #endif