VR-Vantage API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtModel.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2012 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 #include <vrvCore/DtUniqueID.h>
14 
16 
17 #include <boost/signal.hpp>
18 
19 #include <matrix/vlVector.h>
20 #include <matrix/vlTaitBryan.h>
21 
22 
23 namespace makVrv
24 {
25  class DtDe;
26  class DtModelInstance;
27 
28  // Struct which performances a boolean OR on all slot return values.
29  struct SlotReturnOR
30  {
31  typedef bool result_type;
32  template<typename InputIterator>
33  bool operator()(InputIterator first, InputIterator last) const
34  {
35  bool result = false;
36  while (first != last)
37  {
38  result |= *first++;
39  }
40  return result;
41  }
42  };
43 
55  {
56  public:
57 
59  DtModel(DtDe& de, DtUniqueID id);
60 
62  virtual ~DtModel();
63 
65  virtual void setModelDefinition(const std::string& str);
66 
67  //Save the model's loaded notes to a file.
68  virtual void saveModelToFile(const std::string& filename);
69 
72  virtual std::string className() const;
73 
75 
76  virtual DtModelInstance* modelInstance();
77  virtual const DtModelInstance* modelInstance() const;
79 
80 
82  unsigned int transformSize() const;
83 
85  virtual void setPosition( int vtx, const DtVector& position );
86 
88  virtual void removePosition( int vtx );
89 
92  const DtVector& position(int vtx = 0) const;
93 
96  const DtTaitBryan& orientation(int vtx = 0) const;
97 
99  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
100 
102  virtual void enableColorBlending( bool b );
103 
105  virtual void setBlendColor( float r, float g, float b, float a );
106 
108  virtual void getBlendColor( float& r, float& g, float& b, float& a);
109 
111  virtual bool colorBlendingEnabled() const;
112 
114  virtual void setColor(float r, float g, float b, float a);
115 
118  virtual void enableLighting( bool l );
119 
121  virtual int modelSet() const;
122 
124  const DtVector& boundingBoxExtents() const;
125 
127  void getBoundingBoxExtents(double& x, double& y, double& z) const;
128 
130  const DtVector& boundingBoxCenter() const;
131 
133  virtual void getBoundingBoxCenter(double& x, double& y, double& z) const;
134 
136  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
137 
140  void setContributesToBound( bool trueOrFalse );
141 
144  bool contributesToBound() const;
145 
147 
148 
149 
150  int visualizerType() const;
152 
154  inline DtDe& de() { return myDe;}
155 
162  virtual void setModelInstance(DtModelInstance* modelInstance );
163 
167  virtual void setVisible(bool isVisible);
168 
173  virtual bool visible() const;
174 
176  DtUniqueID parentSceneObjectID() const;
177 
179  virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj );
180 
183  virtual void addedToSceneObject( const DtUniqueID& sceneObj, int modelSet,
184  int visualizerType );
185 
189  virtual void setElementId(DtUniqueID id);
190 
192  virtual void removedFromSceneObject();
193 
196  virtual void setIsSupportModel(bool isSupport) = 0;
197 
199  virtual void setSolid(bool isSolid);
200 
202  virtual bool isProp();
203 
205  boost::signal<void (DtModel*)> signal_modelToBeDestroyed;
206  boost::signal<void (DtModel*)> signal_modelChanged;
207 
210  boost::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested;
211 
213  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated;
214 
216  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceToBeDestroyed;
217 
218  protected:
219 
221  virtual void addToScene( const DtUniqueID& sceneObjectId,
222  int modelSet, int visualizerType ) = 0;
223 
226  virtual void addToSceneAsProp( const DtUniqueID& sceneObjectId ) {}
227 
229  virtual void removeFromScene() = 0;
230 
232  virtual void initializeModelInstance();
233 
235  void slot_modelInstanceChanged( DtModelInstance* instance );
236 
237  protected:
239  {
240  DtVector position;
241  DtTaitBryan orientation;
242  };
243 
244  typedef std::vector<ObjectTransform> TransformList;
245 
247 
248  //The unique id is constant after initialization.
250 
251  //The color blending enabled is needed to be set by the derrived class so it doesn't get down to the model instances when instancing is enabled.
253 
254  private:
256  void deleteModelInstance();
257 
258  private:
259 
269  float myBlendColor[4];
271  };
272 
275  {
276  public:
278  static DtModelSignaler& instance(DtDe&);
279 
281  ~DtModelSignaler();
282 
284  boost::signal<void (DtModelInstance&)> signal_modelCreated;
285 
287  boost::signal<void (DtModelInstance&)> signal_modelChanged;
288 
291  boost::signal<void (DtModelInstance&)> signal_modelToBeDestroyed;
292 
293  protected:
294 
296  DtModelSignaler();
297 
298  private:
300  DtModelSignaler& operator=(const DtModelSignaler&);
301  };
302 }
303 


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