VR-Vantage 1.4.1 API Class Documentation
DtModel.h
Go to the documentation of this file.
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 


Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)