00001 00002 // 00003 // Copyright (C) 2006 James M. Lawrence. All rights reserved. 00004 // 00005 // software: esve-1.0.3 00006 // file: esve/engine/dim3/Transform.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 #ifndef esve_engine_dim3_Transform_hxx 00034 #define esve_engine_dim3_Transform_hxx 00035 00036 #include <esve/types/quat.hxx> 00037 #include <esve/types/pure.hxx> 00038 00039 namespace esve { namespace engine { namespace dim3 { 00040 00113 00114 class Transform 00115 { 00116 public: 00118 static const Transform & IDENTITY ; 00119 00125 00129 virtual const types::quat & rotation() const = 0 ; 00130 virtual void rotation( const types::quat & a ) = 0 ; 00132 00135 virtual const types::pure & translation() const = 0 ; 00136 virtual void translation( const types::pure & a ) = 0 ; 00138 00141 virtual types::real scaling() const = 0 ; 00142 virtual void scaling( types::real a ) = 0 ; 00144 00146 00158 00160 virtual void left_act( const Transform & a ) = 0 ; 00161 00163 virtual void right_act( const Transform & a ) = 0 ; 00164 00166 virtual void act( const Transform & action, 00167 const Transform & basis ) = 0 ; 00168 00171 virtual 00172 void 00173 rotate( types::real angle, 00174 const types::pure & axis, 00175 const Transform & basis = IDENTITY ) = 0 ; 00176 00178 virtual 00179 void 00180 translate( const types::pure & dt, 00181 const Transform & basis = IDENTITY ) = 0 ; 00182 00184 virtual 00185 void 00186 scalate( types::real ds, 00187 const Transform & basis = IDENTITY ) = 0 ; 00189 00194 00196 virtual void identity() = 0 ; 00197 00199 virtual void invert() = 0 ; 00200 00202 virtual void assign( const Transform & a ) = 0 ; 00203 00206 virtual void normalize() = 0 ; 00207 00209 virtual bool operator==( const Transform & ) const = 0 ; 00210 00212 virtual bool operator!=( const Transform & ) const = 0 ; 00213 00215 00216 virtual ~Transform() = 0 ; 00217 00218 protected: 00219 Transform() ; 00220 00221 private: 00222 Transform( const Transform & ) ; 00223 Transform & operator=( const Transform & ) ; 00224 } ; 00225 00226 }}} // namespace esve::engine::dim3 00227 00228 #endif 00229
1.3.4