00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034
00035
00036
00037
00038 #ifndef esve_components_dim4_Rotation_Handler_hxx
00039 #define esve_components_dim4_Rotation_Handler_hxx
00040
00041 #include <esve/components/dimn/Differential_Motion_Handler.hxx>
00042 #include <esve/engine/dim4/impl/Transform.hxx>
00043 #include <esve/types/pure.hxx>
00044 #include <memory>
00045
00046 namespace esve { namespace components { namespace dim4 {
00047
00052
00053 class Rotation_Handler
00054 : public components::dimn::Differential_Motion_Handler
00055 <
00056 engine::dim4::Transform,
00057 engine::dim4::impl::Transform
00058 >
00059 {
00060 private:
00061 typedef
00062 components::dimn::Differential_Motion_Handler
00063 <
00064 engine::dim4::Transform,
00065 engine::dim4::impl::Transform
00066 >
00067 super ;
00068
00069 Rotation_Handler( const Rotation_Handler & ) ;
00070 Rotation_Handler & operator=( const Rotation_Handler & ) ;
00071
00072 class Private ;
00073 const std::auto_ptr<Private> m ;
00074
00075 public:
00092 enum Mapping
00093 {
00099 ROTATE_K_TOWARD_U,
00100
00104 ROTATE_K_TOWARD_U_PERP,
00105
00109 ROTATE_1_TOWARD_U,
00110
00115 ROTATE_1_TOWARD_U_PERP,
00116
00123 LEFT_HOPF_ROTATION,
00124
00131 RIGHT_HOPF_ROTATION,
00132
00137 NEG_LEFT_HOPF_ROTATION,
00138
00143 NEG_RIGHT_HOPF_ROTATION,
00144
00150 DOUBLE_ROTATE_1IJK,
00151
00157 DOUBLE_ROTATE_1JKI,
00158
00164
00165 DOUBLE_ROTATE_1KIJ,
00166
00172 DOUBLE_ROTATE_IJ1K,
00173
00177 DO_NOTHING
00178 } ;
00179
00181 explicit Rotation_Handler( engine::dim4::Transform & ) ;
00182
00185 virtual Mapping mapping( Button ) const ;
00186 virtual void mapping( Button, Mapping ) ;
00188
00189 ~Rotation_Handler() ;
00190
00191 protected:
00194 void create_motion( Button, const types::pure & du_dt ) ;
00195 engine::dim4::impl::Transform
00196 differential_motion( Button button, types::real dt ) ;
00197 void stop_motion( Button ) ;
00198 bool has_motion( Button ) ;
00200 } ;
00201
00202 }}}
00203
00204 #endif
00205