VR-Vantage 2.5 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) 2018 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  class DtModelDefinition;
28  struct DtLoaderHandle;
29 
30  // Struct which performances a boolean OR on all slot return values.
31  struct SlotReturnOR
32  {
33  typedef bool result_type;
34  template<typename InputIterator>
35  bool operator()(InputIterator first, InputIterator last) const
36  {
37  bool result = false;
38  while (first != last)
39  {
40  result |= *first++;
41  }
42  return result;
43  }
44  };
45 
57  {
58  public:
59 
61  DtModel(DtDe& de, DtUniqueID id);
62 
64  virtual ~DtModel();
65 
67  DtModelInstance* createModelInstance(const std::string& modelDefName, bool realize = true);
68 
70  virtual void setModelDefinition(const std::string& str);
72  virtual const std::string & modelDefinitionName() { return myModelDefinitionName; }
73 
74  //Save the model's loaded notes to a file.
75  virtual void saveModelToFile(const std::string& filename);
76 
79  virtual std::string className() const;
80 
82 
83  virtual DtModelInstance* modelInstance();
84  virtual const DtModelInstance* modelInstance() const;
86 
87 
89  unsigned int transformSize() const;
90 
92  virtual void setPosition( int vtx, const DtVector& position );
93 
95  virtual void removePosition( int vtx );
96 
99  const DtVector& position(int vtx = 0) const;
100 
103  const DtTaitBryan& orientation(int vtx = 0) const;
104 
106  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
107 
109  virtual void enableColorBlending( bool b );
110 
112  virtual void setBlendColor( float r, float g, float b, float a );
113 
115  virtual void getBlendColor( float& r, float& g, float& b, float& a);
116 
118  virtual bool colorBlendingEnabled() const;
119 
121  virtual void setColor(float r, float g, float b, float a);
122 
125  virtual void enableLighting( bool l );
126 
128  virtual int modelSet() const;
129 
131  const DtVector& boundingBoxExtents() const;
132 
134  void getBoundingBoxExtents(double& x, double& y, double& z) const;
135 
137  const DtVector& boundingBoxCenter() const;
138 
140  virtual void getBoundingBoxCenter(double& x, double& y, double& z) const;
141 
143  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
144 
147  void setContributesToBound( bool trueOrFalse );
148 
151  bool contributesToBound() const;
152 
154 
155 
156 
157  int visualizerType() const;
159 
161  inline DtDe& de() { return myDe;}
162 
169  virtual void setModelInstance(DtModelInstance* modelInstance );
170 
172  virtual void promoteBackgroundModelInstance(DtModelDefinition& defintion);
173 
177  virtual void setVisible(bool isVisible);
178 
183  virtual bool visible() const;
184 
186  DtUniqueID parentSceneObjectID() const;
187 
189  virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj );
190 
193  virtual void addedToSceneObject( const DtUniqueID& sceneObj, int modelSet,
194  int visualizerType );
195 
199  virtual void setElementId(DtUniqueID id);
200 
202  virtual void removedFromSceneObject();
203 
206  virtual void setIsSupportModel(bool isSupport) = 0;
207 
209  virtual void setSolid(bool isSolid);
210 
212  virtual bool isProp();
213 
215  boost::signal<void (DtModel*)> signal_modelToBeDestroyed;
216  boost::signal<void (DtModel*)> signal_modelChanged;
217 
220  boost::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested;
221 
223  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated;
224 
226  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceToBeDestroyed;
227 
229 
230 
231  virtual bool supportsMultithreadedLoad() { return false; }
232 
234  virtual void backgroundLoad() { ; }
235 
237  virtual void foregroundLoad() { ; }
238 
240  virtual bool isActivelyBackgroundLoading();
241 
243  virtual DtLoaderHandle * findLoadQueueHandle();
245 
246  protected:
247 
249  virtual void addToScene( const DtUniqueID& sceneObjectId,
250  int modelSet, int visualizerType ) = 0;
251 
254  virtual void addToSceneAsProp( const DtUniqueID& sceneObjectId ) {}
255 
257  virtual void removeFromScene() = 0;
258 
260  virtual void initializeModelInstance();
261 
263  void slot_modelInstanceChanged( DtModelInstance* instance );
264 
265 
266  protected:
269  virtual void waitAndClearLoadHandle();
271  virtual void removedFromLoadQueue();
273  virtual void setDoneBackgroundLoading();
275  virtual void setActivelyBackgroundLoading();
276 
277  friend class DtBackgroundLoader;
280 
281  protected:
283  {
284  DtVector position;
285  DtTaitBryan orientation;
286  };
287 
288  typedef std::vector<ObjectTransform> TransformList;
289 
291 
294 
297 
300 
301  private:
303  void deleteModelInstance();
304 
305  private:
306 
316  float myBlendColor[4];
318 
319  protected:
321  };
322 
325  {
326  public:
328  static DtModelSignaler& instance(DtDe&);
329 
331  virtual ~DtModelSignaler();
332 
334  boost::signal<void (DtModelInstance&)> signal_modelCreated;
335 
337  boost::signal<void (DtModelInstance&)> signal_modelChanged;
338 
341  boost::signal<void (DtModelInstance&)> signal_modelToBeDestroyed;
342 
343  protected:
344 
346  DtModelSignaler();
347 
348  private:
350  DtModelSignaler& operator=(const DtModelSignaler&);
351  };
352 }
353 


Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)