VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtModel.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2019 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 const std::string& className() const;
80 
82  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 
96  virtual const DtVector& position(int vtx = 0) const;
97 
99  virtual void removePosition(int vtx);
100 
104  virtual void setPositionOffset(const DtVector& positionOffset);
105 
107  virtual const DtVector& positionOffset() const;
108 
110  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
111 
113  virtual void setPositionAndOrientation(int vtx, const DtVector& positionOffset, const DtTaitBryan& orientation);
114 
117  virtual const DtTaitBryan& orientation(int vtx = 0) const;
118 
122  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
123 
125  virtual const DtTaitBryan& orientationOffset() const;
126 
128  virtual void enableColorBlending( bool b );
129 
131  virtual void setBlendColor( float r, float g, float b, float a );
132 
134  virtual void getBlendColor( float& r, float& g, float& b, float& a);
135 
137  virtual bool colorBlendingEnabled() const;
138 
140  virtual void setColor(float r, float g, float b, float a);
141 
144  virtual void enableLighting( bool l );
145 
147  virtual int modelSet() const;
148 
150  const DtVector& boundingBoxExtents() const;
151 
153  void getBoundingBoxExtents(double& x, double& y, double& z) const;
154 
156  const DtVector& boundingBoxCenter() const;
157 
159  virtual void getBoundingBoxCenter(double& x, double& y, double& z) const;
160 
162  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
163 
166  void setContributesToBound( bool trueOrFalse );
167 
170  bool contributesToBound() const;
171 
173  int visualizerType() const;
178 
180  inline DtDe& de() { return myDe;}
181 
188  virtual void setModelInstance(DtModelInstance* modelInstance );
189 
191  virtual void promoteBackgroundModelInstance(DtModelDefinition& defintion);
192 
196  virtual void setVisible(bool isVisible);
197 
202  virtual bool visible() const;
203 
205  DtUniqueID parentSceneObjectID() const;
206 
208  virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj );
209 
212  virtual void addedToSceneObject( const DtUniqueID& sceneObj, int modelSet,
213  int visualizerType );
214 
218  virtual void setElementId(DtUniqueID id);
219 
221  virtual void removedFromSceneObject();
222 
225  virtual void setIsSupportModel(bool isSupport) = 0;
226 
228  virtual void setSolid(bool isSolid);
229 
231  virtual bool isProp();
232 
234  boost::signal<void (DtModel*)> signal_modelToBeDestroyed;
235  boost::signal<void (DtModel*)> signal_modelChanged;
236 
239  boost::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested;
240 
242  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated;
243 
245  boost::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceToBeDestroyed;
246 
248 
249  virtual bool supportsMultithreadedLoad() { return false; }
251 
253  virtual void backgroundLoad() { ; }
254 
256  virtual void foregroundLoad() { ; }
257 
259  virtual bool isActivelyBackgroundLoading();
260 
262  virtual DtLoaderHandle* getLoadQueueHandle();
264 
266  virtual void updateMinLastFrameDistance(float distance);
267 
269  virtual void resetLastFrameDistance();
270 
272  virtual float minLastFrameDistance() const;
273 
274  protected:
275 
277  virtual void addToScene( const DtUniqueID& sceneObjectId,
278  int modelSet, int visualizerType ) = 0;
279 
282  virtual void addToSceneAsProp( const DtUniqueID& sceneObjectId ) {}
283 
285  virtual void removeFromScene() = 0;
286 
288  virtual void initializeModelInstance();
289 
291  void slot_modelInstanceChanged( DtModelInstance* instance );
292 
293 
294  protected:
297  virtual void waitAndClearLoadHandle();
299  virtual void removedFromLoadQueue();
301  virtual void setDoneBackgroundLoading();
303  virtual void setActivelyBackgroundLoading();
304 
305  friend class DtBackgroundLoader;
308 
309  static bool theInittedState;
310 
311  protected:
313  {
315  DtTaitBryan orientation;
316  };
317 
318  typedef std::vector<ObjectTransform> TransformList;
319 
321 
324 
327 
330 
333 
334  private:
336  void deleteModelInstance();
337 
338  protected:
339 
349  float myBlendColor[4];
352  DtTaitBryan myOrientationOffset;
354  };
355 
358  {
359  public:
361  static DtModelSignaler& instance(DtDe&);
362 
364  virtual ~DtModelSignaler();
365 
367  boost::signal<void (DtModelInstance&)> signal_modelCreated;
368 
370  boost::signal<void (DtModelInstance&)> signal_modelChanged;
371 
374  boost::signal<void (DtModelInstance&)> signal_modelToBeDestroyed;
375 
376  protected:
377 
379  DtModelSignaler();
380 
381  private:
383  DtModelSignaler& operator=(const DtModelSignaler&);
384  };
385 }
386 
DtVector myPositionOffset
Definition: DtModel.h:351
The base class for all model instances.
Definition: DtModelInstance.h:39
Definition: DtModel.h:31
TransformList myTransforms
We keep our own copy in case we get updates before we get a model instance.
Definition: DtModel.h:342
Virtual base class.
Definition: DtVirtualBaseClass.h:22
DtTaitBryan myOrientationOffset
Definition: DtModel.h:352
boost::signal< void(DtModelInstance *, DtModel *)> signal_modelInstanceToBeDestroyed
Signal emitted when the model instance is to be destroyed.
Definition: DtModel.h:245
Definition: DtModel.h:312
boost::signal< void(DtModel *)> signal_modelToBeDestroyed
Signal emitted when the model is to be destroyed.
Definition: DtModel.h:234
std::string myModelDefinitionName
Definition: DtModel.h:353
DtModelInstance * myBackgroundModelInstance
holds the model created in the background for a bit
Definition: DtModel.h:329
DtVector position
Definition: DtModel.h:314
async task that loads a DtModel in the background
Definition: DtBackgroundLoadAsyncTask.h:25
std::vector< ObjectTransform > TransformList
Definition: DtModel.h:318
core singleton that manages loading for all the various DtModel subclasses
Definition: DtBackgroundLoader.h:38
bool myContributesToBound
Definition: DtModel.h:346
virtual void backgroundLoad()
the chunk of loading that can safely happen in the background
Definition: DtModel.h:253
static bool theInittedState
Definition: DtModel.h:309
boost::signal< void(DtModelInstance &)> signal_modelChanged
Signal emitted when a model has changed in some way.
Definition: DtModel.h:370
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:33
boost::signal< void(DtModelInstance &)> signal_modelToBeDestroyed
Signal emitted when a model is fully created.
Definition: DtModel.h:374
bool myVisibleFlag
Definition: DtModel.h:350
DtModelInstance * myModelInstance
Definition: DtModel.h:343
bool result_type
Definition: DtModel.h:33
Contains makVrv::DtVirtualBaseClass class.
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points.
virtual void foregroundLoad()
the chunk of loading that must happen happen in the foreground, adding to scene graph etc...
Definition: DtModel.h:256
float myMinLastFrameDistance
last frames mimimal distance to the camera, calculated by the instancing system
Definition: DtModel.h:332
wrapper object that insulates the loader from other threads destroying an object
Definition: DtLoaderHandle.h:23
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
DtTaitBryan orientation
Definition: DtModel.h:315
boost::signal< void(DtModelInstance &)> signal_modelCreated
Signal emitted when a model is fully created.
Definition: DtModel.h:367
unsigned long long DtUniqueID
Definition: DtUniqueID.h:22
boost::signal< bool(DtModel *, bool), SlotReturnOR > signal_visibilityChangeRequested
Signal when the visibility has been requested, if any slot returns false, it will not change...
Definition: DtModel.h:239
bool myColorBlendingEnabled
The color blending enabled is needed to be set by the derived class so it doesn&#39;t get down to the mod...
Definition: DtModel.h:326
int myModelSet
Definition: DtModel.h:344
boost::signal< void(DtModel *)> signal_modelChanged
Definition: DtModel.h:235
DtLoaderHandle * myInLoadQueueHandle
Definition: DtModel.h:307
boost::signal< void(DtModelInstance *, DtModel *)> signal_modelInstanceCreated
Signal emitted when the model instance is created.
Definition: DtModel.h:242
virtual const std::string & modelDefinitionName()
returns the model definition name.
Definition: DtModel.h:72
A model which owns a single model instance.
Definition: DtModel.h:56
Contains makVrv::DtUniqueID type.
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
bool myIsPropFlag
Definition: DtModel.h:348
A signaler for model changes.
Definition: DtModel.h:357
virtual void addToSceneAsProp(const DtUniqueID &sceneObjectId)
Add this model to the scene as a prop.
Definition: DtModel.h:282
bool operator()(InputIterator first, InputIterator last) const
Definition: DtModel.h:35
DtDe & myDe
Definition: DtModel.h:320
const DtUniqueID myUniqueId
The unique id is constant after initialization.
Definition: DtModel.h:323
DtDe & de()
Get the DtDe object.
Definition: DtModel.h:180
DtUniqueID myParentSceneObjectID
Definition: DtModel.h:347
Contains DLL export macros.
int myVisualizerType
Definition: DtModel.h:345

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)