VR-Vantage 2.8 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) 2020 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 #include <vrvUtil/signalslib.h>
17 
18 #include <matrix/vlVector.h>
19 #include <matrix/vlTaitBryan.h>
20 
21 
22 namespace makVrv
23 {
24  class DtDe;
25  class DtModelInstance;
26  class DtModelDefinition;
27  struct DtLoaderHandle;
28 
29  // Struct which performances a boolean OR on all slot return values.
30  struct SlotReturnOR
31  {
32  typedef bool result_type;
33  template<typename InputIterator>
34  bool operator()(InputIterator first, InputIterator last) const
35  {
36  bool result = false;
37  while (first != last)
38  {
39  result |= *first++;
40  }
41  return result;
42  }
43  };
44 
56  {
57  public:
58 
60  DtModel(DtDe& de, DtUniqueID id);
61 
63  virtual ~DtModel();
64 
66  DtModelInstance* createModelInstance(const std::string& modelDefName, bool realize = true);
67 
69  virtual void setModelDefinition(const std::string& str);
71  virtual const std::string& modelDefinitionName() { return myModelDefinitionName; }
72 
73  //Save the model's loaded notes to a file.
74  virtual void saveModelToFile(const std::string& filename);
75 
78  virtual const std::string& className() const;
79 
81 
82  virtual DtModelInstance* modelInstance();
83  virtual const DtModelInstance* modelInstance() const;
85 
86 
88  unsigned int transformSize() const;
89 
91  virtual void setPosition(int vtx, const DtVector& position);
92 
95  virtual const DtVector& position(int vtx = 0) const;
96 
98  virtual void removePosition(int vtx);
99 
103  virtual void setPositionOffset(const DtVector& positionOffset);
104 
106  virtual const DtVector& positionOffset() const;
107 
109  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
110 
112  virtual void setPositionAndOrientation(int vtx, const DtVector& positionOffset, const DtTaitBryan& orientation);
113 
116  virtual const DtTaitBryan& orientation(int vtx = 0) const;
117 
121  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
122 
124  virtual const DtTaitBryan& orientationOffset() const;
125 
127  virtual void enableColorBlending( bool b );
128 
130  virtual void setBlendColor( float r, float g, float b, float a );
131 
133  virtual void getBlendColor( float& r, float& g, float& b, float& a);
134 
136  virtual bool colorBlendingEnabled() const;
137 
139  virtual void setColor(float r, float g, float b, float a);
140 
143  virtual void enableLighting( bool l );
144 
146  virtual int modelSet() const;
147 
149  const DtVector& boundingBoxExtents() const;
150 
152  void getBoundingBoxExtents(double& x, double& y, double& z) const;
153 
155  const DtVector& boundingBoxCenter() const;
156 
158  virtual void getBoundingBoxCenter(double& x, double& y, double& z) const;
159 
161  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
162 
165  void setContributesToBound( bool trueOrFalse );
166 
169  bool contributesToBound() const;
170 
172 
173 
174 
175  int visualizerType() const;
177 
179  inline DtDe& de() { return myDe;}
180 
187  virtual void setModelInstance(DtModelInstance* modelInstance );
188 
190  virtual void promoteBackgroundModelInstance(DtModelDefinition& defintion);
191 
195  virtual void setVisible(bool isVisible);
196 
201  virtual bool visible() const;
202 
204  DtUniqueID parentSceneObjectID() const;
205 
207  virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj );
208 
211  virtual void addedToSceneObject( const DtUniqueID& sceneObj, int modelSet,
212  int visualizerType );
213 
217  virtual void setElementId(DtUniqueID id);
218 
220  virtual void removedFromSceneObject();
221 
224  virtual void setIsSupportModel(bool isSupport) = 0;
225 
227  virtual void setSolid(bool isSolid);
228 
230  virtual bool isProp();
231 
233  boost::signalslib::signal<void (DtModel*)> signal_modelToBeDestroyed;
234  boost::signalslib::signal<void (DtModel*)> signal_modelChanged;
235 
238  boost::signalslib::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested;
239 
241  boost::signalslib::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated;
242 
244  boost::signalslib::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceToBeDestroyed;
245 
247 
248 
249  virtual bool supportsMultithreadedLoad() { return false; }
250 
252  virtual void backgroundLoad() { ; }
253 
255  virtual void foregroundLoad() { ; }
256 
258  virtual bool isActivelyBackgroundLoading();
259 
261  virtual DtLoaderHandle* getLoadQueueHandle();
263 
265  virtual void updateMinLastFrameDistance(float distance);
266 
268  virtual void resetLastFrameDistance();
269 
271  virtual float minLastFrameDistance() const;
272 
273  protected:
274 
276  virtual void addToScene( const DtUniqueID& sceneObjectId,
277  int modelSet, int visualizerType ) = 0;
278 
281  virtual void addToSceneAsProp( const DtUniqueID& sceneObjectId ) {}
282 
284  virtual void removeFromScene() = 0;
285 
287  virtual void initializeModelInstance();
288 
290  void slot_modelInstanceChanged( DtModelInstance* instance );
291 
292 
293  protected:
296  virtual void waitAndClearLoadHandle();
298  virtual void removedFromLoadQueue();
300  virtual void setDoneBackgroundLoading();
302  virtual void setActivelyBackgroundLoading();
303 
304  friend class DtBackgroundLoader;
307 
308  static bool theInittedState;
309 
310  protected:
312  {
313  DtVector position;
314  DtTaitBryan orientation;
315  };
316 
317  typedef std::vector<ObjectTransform> TransformList;
318 
320 
323 
326 
329 
332 
333  private:
335  void deleteModelInstance();
336 
337  protected:
338 
348  float myBlendColor[4];
351  DtTaitBryan myOrientationOffset;
353  };
354 
357  {
358  public:
360  static DtModelSignaler& instance(DtDe&);
361 
363  virtual ~DtModelSignaler();
364 
366  boost::signalslib::signal<void (DtModelInstance&)> signal_modelCreated;
367 
369  boost::signalslib::signal<void (DtModelInstance&)> signal_modelChanged;
370 
373  boost::signalslib::signal<void (DtModelInstance&)> signal_modelToBeDestroyed;
374 
375  protected:
376 
378  DtModelSignaler();
379 
380  private:
382  DtModelSignaler& operator=(const DtModelSignaler&);
383  };
384 }
385 


Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)