00001 00002 // 00003 // Copyright (C) 2006 James M. Lawrence. All rights reserved. 00004 // 00005 // software: esve-1.0.3 00006 // file: esve/components/dim3/Oriented_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_dim3_Oriented_Rotation_Handler_hxx 00035 #define esve_components_dim3_Oriented_Rotation_Handler_hxx 00036 00037 #include <esve/components/dimn/Differential_Motion_Handler.hxx> 00038 #include <esve/engine/dim3/impl/Transform.hxx> 00039 #include <esve/types/pure.hxx> 00040 00041 namespace esve { namespace components { namespace dim3 { 00042 00047 00048 class Oriented_Rotation_Handler 00049 : public components::dimn::Differential_Motion_Handler 00050 < 00051 engine::dim3::Transform, 00052 engine::dim3::impl::Transform 00053 > 00054 { 00055 private: 00056 typedef 00057 components::dimn::Differential_Motion_Handler 00058 < 00059 engine::dim3::Transform, 00060 engine::dim3::impl::Transform 00061 > 00062 super ; 00063 00064 Oriented_Rotation_Handler( const Oriented_Rotation_Handler & ) ; 00065 Oriented_Rotation_Handler & 00066 operator=( const Oriented_Rotation_Handler & ) ; 00067 00068 // axis differential angle 00069 types::real m_dtheta_dt ; 00070 00071 // elevation differential angle 00072 types::real m_dphi_dt ; 00073 00074 // record whether we are upside down when the mouse push occurs 00075 types::real m_sign ; 00076 00077 public: 00079 explicit Oriented_Rotation_Handler( engine::dim3::Transform & ) ; 00080 00081 ~Oriented_Rotation_Handler() ; 00082 00083 protected: 00086 void create_motion( Button, const types::pure & du_dt ) ; 00087 engine::dim3::impl::Transform 00088 differential_motion( Button button, types::real dt ) ; 00089 void stop_motion( Button ) ; 00090 bool has_motion( Button ) ; 00092 00093 // base override 00094 bool handle_supermouse_push( Button, const Supermouse & ) ; 00095 } ; 00096 00097 }}} // namespace esve::components::dim3 00098 00099 #endif 00100
1.3.4