00001 00002 // 00003 // Copyright (C) 2006 James M. Lawrence. All rights reserved. 00004 // 00005 // software: esve-1.0.3 00006 // file: esve/components/dim4/Simple_Rotation_Handler.hxx 00007 // 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions 00010 // are met: 00011 // 00012 // 1. Redistributions of source code must retain the above copyright 00013 // notice, this list of conditions and the following disclaimer. 00014 // 00015 // 2. The origin of this software must not be misrepresented; you must 00016 // not claim that you wrote the original software. If you use this 00017 // software in a product, an acknowledgment in the product 00018 // documentation would be appreciated but is not required. 00019 // 00020 // 3. Altered source versions must be plainly marked as such, and must 00021 // not be misrepresented as being the original software. 00022 // 00023 // 4. The name of the author may not be used to endorse or promote 00024 // products derived from this software without specific prior written 00025 // permission. 00026 // 00027 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY, 00028 // AND WITH NO CLAIM AS TO ITS SUITABILITY FOR ANY PURPOSE. IN NO EVENT 00029 // SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM WHATSOEVER MADE IN CONNECTION 00030 // TO THIS SOFTWARE. 00031 // 00033 00034 #ifndef esve_components_dim4_Simple_Rotation_Handler_hxx 00035 #define esve_components_dim4_Simple_Rotation_Handler_hxx 00036 00037 #include <esve/components/dimn/Motion_Handler.hxx> 00038 #include <esve/components/dimn/Inertial_Motion_Handler.hxx> 00039 #include <esve/types/real.hxx> 00040 #include <memory> 00041 00042 namespace esve { namespace engine { namespace dim4 { 00043 00044 class Transform ; 00045 00046 }}} // namespace esve::engine::dim4 00047 00048 namespace esve { namespace components { namespace dim4 { 00049 00058 00059 class Simple_Rotation_Handler 00060 : virtual public components::dimn::Inertial_Motion_Handler, 00061 public components::dimn::Motion_Handler 00062 { 00063 public: 00067 enum Mapping 00068 { 00070 LONGLAT, 00071 00073 HOPF 00074 } ; 00075 00077 explicit Simple_Rotation_Handler( engine::dim4::Transform & ) ; 00078 00083 virtual Mapping mapping() const ; 00084 virtual void mapping( Mapping ) ; 00086 00092 virtual bool slide() const ; 00093 virtual void slide( bool ) ; 00095 00098 const engine::dim4::Transform & active_transform() const ; 00099 void active_transform( engine::dim4::Transform & ) ; 00101 00102 ~Simple_Rotation_Handler() ; 00103 00104 void stop() ; 00105 types::real sensitivity() const ; 00106 void sensitivity( types::real ) ; 00107 00108 protected: 00109 bool handle_check_awake( bool ) ; 00110 00111 void update() ; 00112 void update( double dt ) ; 00113 00114 private: 00115 Simple_Rotation_Handler( const Simple_Rotation_Handler & ) ; 00116 Simple_Rotation_Handler & operator=( const Simple_Rotation_Handler & ) ; 00117 00118 class Private ; 00119 const std::auto_ptr<Private> m ; 00120 } ; 00121 00122 }}} // namespace esve::components::dim4 00123 00124 #endif 00125
1.3.4