VR-Forces Developer's Guide
 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) 2023 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  enum class DtModelSetId;
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 
88  virtual DtUniqueID uniqueId() const;
89 
91  unsigned int transformSize() const;
92 
94  virtual void setPosition(int vtx, const DtVector& position);
95 
98  virtual const DtVector& position(int vtx = 0) const;
99 
101  virtual void removePosition(int vtx);
102 
106  virtual void setPositionOffset(const DtVector& positionOffset);
107 
109  virtual const DtVector& positionOffset() const;
110 
112  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
113 
115  virtual void setPositionAndOrientation(int vtx, const DtVector& positionOffset, const DtTaitBryan& orientation);
116 
119  virtual const DtTaitBryan& orientation(int vtx = 0) const;
120 
124  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
125 
127  virtual const DtTaitBryan& orientationOffset() const;
128 
130  virtual void enableColorBlending( bool b );
131 
133  virtual void setBlendColor( float r, float g, float b, float a );
134 
136  virtual void getBlendColor( float& r, float& g, float& b, float& a);
137 
139  virtual bool colorBlendingEnabled() const;
140 
142  virtual void setColor(float r, float g, float b, float a);
143 
146  virtual void enableLighting( bool l );
147 
149  virtual DtModelSetId modelSet() const;
150 
152  const DtVector& boundingBoxExtents() const;
153 
155  void getBoundingBoxExtents(double& x, double& y, double& z) const;
156 
158  const DtVector& boundingBoxCenter() const;
159 
161  virtual void getBoundingBoxCenter(double& x, double& y, double& z) const;
162 
164  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
165 
168  void setContributesToBound( bool trueOrFalse );
169 
172  bool contributesToBound() const;
173 
175  int visualizerType() const;
180 
182  inline DtDe& de() { return myDe;}
183 
190  virtual void setModelInstance(DtModelInstance* modelInstance );
191 
193  virtual void promoteBackgroundModelInstance(const DtModelDefinition& defintion);
194 
198  virtual void setVisible(bool isVisible);
199 
204  virtual bool visible() const;
205 
207  DtUniqueID sceneObjectId() const;
208 
210  virtual void addedToSceneObjectAsProp( const DtUniqueID& sceneObj );
211 
214  virtual void addedToSceneObject( const DtUniqueID& sceneObj, DtModelSetId modelSet,
215  int visualizerType );
216 
218  virtual void setElementId(DtElementID 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::signalslib::signal<void (DtModel*)> signal_modelToBeDestroyed;
235  boost::signalslib::signal<void (DtModel*)> signal_modelChanged;
236 
239  boost::signalslib::signal<bool (DtModel*,bool ), SlotReturnOR> signal_visibilityChangeRequested;
240 
242  boost::signalslib::signal<void (DtModelInstance*, DtModel*)> signal_modelInstanceCreated;
243 
245  boost::signalslib::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  DtModelSetId 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 
325  // The ID of the element this model is associated with
327 
328  // The ID of the scene object this model is associated with
330 
333 
336 
339 
340  private:
342  void deleteModelInstance();
343 
344  protected:
345 
354  float myBlendColor[4];
357  DtTaitBryan myOrientationOffset;
359 
360  bool myRequireModelInstance = true;
361  };
362 
365  {
366  public:
368  static DtModelSignaler& instance(DtDe&);
369 
371  virtual ~DtModelSignaler();
372 
374  boost::signalslib::signal<void (DtModelInstance&)> signal_modelCreated;
375 
377  boost::signalslib::signal<void (DtModelInstance&)> signal_modelChanged;
378 
381  boost::signalslib::signal<void (DtModelInstance&)> signal_modelToBeDestroyed;
382 
383  protected:
384 
386  DtModelSignaler();
387 
388  private:
390  DtModelSignaler& operator=(const DtModelSignaler&);
391  };
392 }
393 
DtVector myPositionOffset
Definition: DtModel.h:356
The base class for all model instances.
Definition: DtModelInstance.h:41
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:348
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
DtTaitBryan myOrientationOffset
Definition: DtModel.h:357
Definition: DtModel.h:312
boost::signalslib::signal< void(DtModelInstance *, DtModel *)> signal_modelInstanceCreated
Signal emitted when the model instance is created.
Definition: DtModel.h:242
std::string myModelDefinitionName
Definition: DtModel.h:358
DtModelInstance * myBackgroundModelInstance
holds the model created in the background for a bit
Definition: DtModel.h:335
DtVector position
Definition: DtModel.h:314
async task that loads a DtModel in the background
Definition: DtBackgroundLoadAsyncTask.h:26
std::vector< ObjectTransform > TransformList
Definition: DtModel.h:318
core singleton that manages loading for all the various DtModel subclasses
Definition: DtBackgroundLoader.h:39
bool myContributesToBound
Definition: DtModel.h:352
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
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:23
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:42
bool myVisibleFlag
Definition: DtModel.h:355
boost::signalslib::signal< void(DtModel *)> signal_modelToBeDestroyed
Signal emitted when the model is to be destroyed.
Definition: DtModel.h:234
DtModelInstance * myModelInstance
Definition: DtModel.h:349
bool result_type
Definition: DtModel.h:33
boost::signalslib::signal< void(DtModel *)> signal_modelChanged
Definition: DtModel.h:235
boost::signalslib::signal< void(DtModelInstance &)> signal_modelToBeDestroyed
Signal emitted when a model is fully created.
Definition: DtModel.h:381
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. Coordinates are in local database coordinates The coordinat...
boost::signalslib::signal< void(DtModelInstance *, DtModel *)> signal_modelInstanceToBeDestroyed
Signal emitted when the model instance is to be destroyed.
Definition: DtModel.h:245
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:338
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::signalslib::signal< void(DtModelInstance &)> signal_modelCreated
Signal emitted when a model is fully created.
Definition: DtModel.h:374
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
boost::signalslib::signal< void(DtModelInstance &)> signal_modelChanged
Signal emitted when a model has changed in some way.
Definition: DtModel.h:377
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:332
DtModelSetId myModelSet
Definition: DtModel.h:350
DtUniqueID myElementId
Definition: DtModel.h:326
DtLoaderHandle * myInLoadQueueHandle
Definition: DtModel.h:307
virtual const std::string & modelDefinitionName()
returns the model definition name.
Definition: DtModel.h:72
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:56
Contains makVrv::DtUniqueID type.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
bool myIsPropFlag
Definition: DtModel.h:353
A signaler for model changes.
Definition: DtModel.h:364
DtModelSetId
Definition: DtModelSetEnums.h:19
virtual void addToSceneAsProp(const DtUniqueID &sceneObjectId)
Add this model to the scene as a prop. All models are not required to re-implement this...
Definition: DtModel.h:282
bool operator()(InputIterator first, InputIterator last) const
Definition: DtModel.h:35
DtDe & myDe
Definition: DtModel.h:320
boost::signalslib::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
const DtUniqueID myUniqueId
The unique id is constant after initialization.
Definition: DtModel.h:323
DtDe & de()
Get the DtDe object.
Definition: DtModel.h:182
DtUniqueID myParentSceneObjectID
Definition: DtModel.h:329
Contains DLL export macros.
int myVisualizerType
Definition: DtModel.h:351

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)