![]() |
VR-Vantage 1.4.1 API Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtModel.h,v $ $Revision: 1.17 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrvCore/vrvCore.h> 00016 #include <vrvCore/DtUniqueID.h> 00017 00018 #include <string> 00019 #include <vector> 00020 #include <boost/signal.hpp> 00021 00022 #include <matrix/vlVector.h> 00023 #include <matrix/vlTaitBryan.h> 00024 00025 00026 namespace makVrv 00027 { 00028 class DtDe; 00029 class DtModelInstance; 00030 00031 // Struct which performances a boolean OR on all slot return values. 00032 struct SlotReturnOR 00033 { 00034 typedef bool result_type; 00035 template<typename InputIterator> 00036 bool operator()(InputIterator first, InputIterator last) const 00037 { 00038 bool result = false; 00039 while (first != last) 00040 { 00041 result |= *first++; 00042 } 00043 return result; 00044 } 00045 }; 00046 00050 class DT_DLL_VRVCORE DtModel 00051 { 00052 public: 00053 00055 DtModel(DtDe& de, DtUniqueID id); 00056 00058 virtual ~DtModel(); 00059 00061 virtual void setModelDefinition(const std::string& str); 00062 00063 //Save the model's loaded notes to a file. 00064 virtual void saveModelToFile(const std::string& filename); 00065 00068 virtual std::string className() const; 00069 00071 00072 virtual DtModelInstance* modelInstance(); 00073 virtual const DtModelInstance* modelInstance() const; 00075 00076 00078 unsigned int transformSize() const; 00079 00081 virtual void setPosition( int vtx, const DtVector& position ); 00082 00084 virtual void removePosition( int vtx ); 00085 00088 const DtVector& position(int vtx = 0) const; 00089 00091 virtual void setOrientation( int vtx, const DtTaitBryan& orientation ); 00092 00094 virtual void enableColorBlending( bool b ); 00095 00097 virtual void setBlendColor( float r, float g, float b, float a ); 00098 00100 virtual void setColor(float r, float g, float b, float a); 00101 00103 virtual int modelSet() const; 00104 00106 const DtVector& boundingBoxExtents() const; 00107 00109 void getBoundingBoxExtents(double& x, double& y, double& z) const; 00110 00112 const DtVector& boundingBoxCenter() const; 00113 00115 void getBoundingBoxCenter(double& x, double& y, double& z) const; 00116 00117 void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum ); 00118 00121 void setContributesToBound( bool trueOrFalse ); 00122 00125 bool contributesToBound() const; 00126 00128 00129 00130 00131 int visualizerType() const; 00133 00135 inline DtDe& de() { return myDe;} 00136 00143 virtual void setModelInstance(DtModelInstance* modelInstance ); 00144 00146 virtual void setVisible(bool isVisible); 00147 00149 virtual void setVisibleViaSwitch(bool isVisible); 00150 00152 bool visible() const; 00153 00155 DtUniqueID parentSceneObjectID() const; 00156 00158 virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj ); 00159 00162 virtual void addedToSceneObject( const DtUniqueID& sceneObj, int modelSet, 00163 int visualizerType ); 00164 00166 virtual void removedFromSceneObject(); 00167 00170 virtual void setSolid(bool isSolid) = 0; 00171 00173 boost::signal<void (DtModel*)> signal_modelToBeDestroyed; 00174 boost::signal<void (DtModel*)> signal_modelChanged; 00175 00178 boost::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested; 00179 00181 boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated; 00182 00184 boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceToBeDestroyed; 00185 00186 protected: 00187 00188 00190 virtual void addToScene( const DtUniqueID& sceneObjectId, 00191 int modelSet, int visualizerType ) = 0; 00192 00195 virtual void addToSceneAsProp( const DtUniqueID& sceneObjectId ) {} 00196 00198 virtual void removeFromScene() = 0; 00199 00201 virtual void initializeModelInstance(); 00202 00204 void slot_modelInstanceChanged( DtModelInstance* instance ); 00205 00206 protected: 00207 struct ObjectTransform 00208 { 00209 DtVector position; 00210 DtTaitBryan orientation; 00211 }; 00212 00213 typedef std::vector<ObjectTransform> TransformList; 00214 00215 DtDe& myDe; 00216 00217 //The unique id is constant after intialization. 00218 const DtUniqueID myUniqueId; 00219 private: 00220 00223 TransformList myTransforms; 00224 DtModelInstance* myModelInstance; 00225 int myModelSet; 00226 int myVisualizerType; 00227 bool myContributesToBound; 00228 DtUniqueID myParentSceneObjectID; 00229 bool myIsPropFlag; 00230 bool myColorBlendingEnabled; 00231 float myBlendColor[4]; 00232 bool myVisibleFlag; 00233 }; 00234 } 00235