| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: sceneadjuster.h 6727 2009-11-13 17:09:32Z Jan_Klimke $ 00018 // $Date: 2009-11-13 18:09:32 +0100 (Fri, 13 Nov 2009) $ 00019 // $Revision: 6727 $ 00020 // $State$ 00021 // $Author: Jan_Klimke $ 00022 // 00023 // $Log$ 00024 // Revision 1.19 2005/01/03 01:43:10 klimetschek 00025 // - modified win32 project layout, splitted vrs.vcproj into vrs_container, vrs_core, vrs_sg, vrs_image, vrs_opengl and vrs_io 00026 // - removed vrs.vcproj 00027 // minor things: 00028 // - added all glutexamples to vrs4glut.sln 00029 // - fixed some problems in glutexamples 00030 // - removed all project references from all VS projects (using solution wide project dependencies instead) 00031 // 00032 // Revision 1.18 2004/10/28 14:16:01 basch 00033 // Class comment changed (Doxygen style) 00034 // 00035 // Revision 1.17 2004/03/23 09:37:41 kirsch 00036 // added alignment 00037 // 00038 // Revision 1.16 2004/03/12 16:28:41 baumann 00039 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00040 // 00041 // Revision 1.15 2004/02/16 16:42:08 baumann 00042 // - moved class VRS::SceneNode from "vrs/sg/" to "vrs/" 00043 // - renamed class VRS::SceneGraphVisitor to class VRS::SceneNodeVisitor 00044 // and moved it from "vrs/sg/" to "vrs/" 00045 // 00046 // Revision 1.14 2004/01/19 11:43:59 baumann 00047 // serialization mechanism improved 00048 // 00049 // Revision 1.13 2003/11/07 14:19:25 kirsch 00050 // removed leading underscore from include guards 00051 // 00052 // Revision 1.12 2003/07/22 16:16:03 baumann 00053 // class Visitor renamed to class SceneNodeVisitor 00054 // 00055 // Revision 1.11 2002/10/29 10:32:53 baumann 00056 // macros VRS_CLASSNAME_* and VRS_IMPL_TYPEINFO_* removed 00057 // 00058 // Revision 1.10 2002/10/28 17:12:23 buchholz 00059 // - traverse-method now returns SceneNodeVisitor::TraversalFlag instead of int 00060 // - SceneNodeVisitor and travers method do not take an Engine parameter any more 00061 // - SceneNodeVisitor::visitScene now gets a bool parameter pushHint. 00062 // - Now visitScene is called twice for each object: One call with 00063 // pushHint==true, when the object is pushed, one call with pushHint==false, 00064 // when the object is popped. 00065 // 00066 // Revision 1.9 2002/03/03 21:44:26 kosta 00067 // VRS_TYPEINFO-macro rewritten 00068 // 00069 // Revision 1.8 2002/02/19 10:34:20 kosta 00070 // undone all changes since 2002-02-15 00071 // 00072 // Revision 1.5 2002/02/05 07:48:26 kosta 00073 // new persistency macros: 00074 // VRS_SERIALIZABLE(CLASS_NAME); 00075 // VRS_SERIALIZABLE_ABSTRACT_CLASS(CLASS_NAME); 00076 // VRS_SERIALIZABLE_NO_SO_CLASS(CLASS_NAME) 00077 // 00078 // Revision 1.4 2002/02/04 13:07:19 kosta 00079 // VRS_SERIALIZABLE macros completely rewritten 00080 // 00081 // Revision 1.3 2002/01/15 16:25:55 kosta 00082 // macros rewritten for a better namespace support 00083 // 00084 // Revision 1.2 2001/11/13 16:36:31 kirsch 00085 // changed line feed to unix style (removed control-M) 00086 // 00087 // Revision 1.1.1.1 2001/06/08 08:09:21 kirsch 00088 // imported alpha-version by olli 00089 // 00090 00091 00092 #ifndef VRS_SCENEADJUSTER_H 00093 #define VRS_SCENEADJUSTER_H 00094 00095 #include <vrs/bounds.h> 00096 #include <vrs/vector.h> 00097 #include <vrs/sg/scenething.h> 00098 00099 namespace VRS { 00100 00101 class Box; 00102 class Tf; 00103 00105 class VRS_CORE_API SceneAdjuster : public SceneThing { 00106 00107 public: 00108 SceneAdjuster( 00109 Box* volume, 00110 bool keepAspect = true, 00111 const Vector& alignment = Vector::origin, 00112 bool dynamic = false 00113 ); 00114 SceneAdjuster( 00115 SceneThing* parent, 00116 Box* volume, 00117 bool keepAspect = true, 00118 const Vector& alignment = Vector::origin, 00119 bool dynamic = false 00120 ); 00131 void setVolume(Box* vol); 00132 Box* getVolume() const; 00134 00135 void setDynamics(bool onOff); 00136 bool getDynamics() const; 00145 void setKeepAspect(bool onOff); 00146 bool getKeepAspect() const; 00151 void setAlignment(const Vector&); 00152 Vector getAlignment() const; 00160 virtual void evaluate(Engine* engine); 00161 00162 virtual Bounds boundingBox(Engine* engine) const; 00167 virtual void modified (); 00171 static Matrix getTransformationMatrix( const Bounds &sourceBounds, const Bounds &targetBounds, const Vector& alignment = Vector::origin, bool keepAspect = true); 00174 VRS_TYPEINFO(SceneAdjuster, SceneThing); 00175 VRS_SERIALIZABLE(SceneAdjuster); 00176 00177 protected: 00178 virtual void preEvaluate(Engine*); 00179 virtual void postEvaluate(Engine*); 00181 00182 private: 00183 SceneAdjuster(); // for serialization 00184 void update(Engine* engine); 00185 00186 00187 00188 SO<Tf> tf_; 00189 00190 SO<Box> volume_; 00191 bool keepAspect_; 00192 Vector alignment_; 00193 bool dynamic_; 00194 Bounds bounds_; 00195 bool ready_; 00196 }; 00197 00198 inline bool SceneAdjuster::getDynamics() const { return dynamic_; } 00199 inline bool SceneAdjuster::getKeepAspect() const { return keepAspect_; } 00200 00201 } // namespace VRS 00202 00203 #endif // VRS_SCENEADJUSTER_H