00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VRS_AXONOMETRICLOOKATMANIPULATOR_H
00018 #define VRS_AXONOMETRICLOOKATMANIPULATOR_H
00019
00020
00021
00022
00023 #include <vrs/axonometriclookat.h>
00024 #include <vrs/container/array.h>
00025 #include <vrs/sg/manipulator.h>
00026 #include <vrs/rayrequest.h>
00027
00028
00029 namespace VRS
00030 {
00031 class VRS_CORE_API AxonometricLookAtManipulator : public Manipulator
00032 {
00033 public:
00034
00035 enum Mode
00036 {
00037 Zoom = 0,
00038 ScrollMouse = 1,
00039 Rotate = 2
00040 };
00041 VRS_SERIALIZABLE_CLASS_ENUM(Mode);
00042
00043 public:
00044
00045 AxonometricLookAtManipulator(
00046 const VRS::SO<AxonometricLookAt>& axonometricLookAt,
00047 Mode mode,
00048 InputEvent::Button button,
00049 InputEvent::Modifier mustModifier = InputEvent::NoModifier,
00050 InputEvent::Modifier mustNotModifier = InputEvent::NoModifier
00051 );
00052
00053 void setAxonometricLookAt(const VRS::SO<AxonometricLookAt>& axonometricLookAt);
00054 inline const VRS::SO<AxonometricLookAt>& getAxonometrixLookAt(void) const
00055 {
00056 return this->axonometricLookAt_;
00057 }
00058
00059 void setMode(AxonometricLookAtManipulator::Mode manipmode);
00060 inline AxonometricLookAtManipulator::Mode getMode() const
00061 {
00062 return this->mode_;
00063 }
00064
00065 void setSensitivity(int mode, double sensitivity);
00066 inline double getSensitivity(int mode) const
00067 {
00068 return this->sensitivity_->getElement(mode);
00069 }
00070
00071 virtual BehaviorNode::InvalidationHint dragStart(int x, int y, ButtonEvent*);
00072 virtual BehaviorNode::InvalidationHint dragMotion(int x, int y, MotionEvent*);
00073 virtual BehaviorNode::InvalidationHint dragEnd(int x, int y, ButtonEvent*);
00074
00075 VRS_TYPEINFO(AxonometricLookAtManipulator, Manipulator);
00076 VRS_SERIALIZABLE(AxonometricLookAtManipulator);
00077
00078 protected:
00079
00080 AxonometricLookAtManipulator(void);
00081
00082 private:
00083
00084 bool performRayRequest(int x, int y, SO<Canvas> canvas, SO<RayRequest> request);
00085
00086 bool performRayRequest(int x, int y, SO<Canvas> canv, Vector& hitPoint);
00087
00088 private:
00089
00090 VRS::SO<AxonometricLookAt> axonometricLookAt_;
00091 SO<Array<double> > sensitivity_;
00092 AxonometricLookAtManipulator::Mode mode_;
00093 Vector hitPoint_;
00094 SO<RayRequest> request_;
00095 int currentX_;
00096 int currentY_;
00097
00098 };
00099
00100 };
00101
00102 #endif // VRS_AXONOMETRICLOOKATMANIPULATOR_H