VR-Forces 5.0.3 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) 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  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  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  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  {
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 
DtVector myPositionOffset
Definition: DtModel.h:350
The base class for all model instances.
Definition: DtModelInstance.h:39
Definition: DtModel.h:30
TransformList myTransforms
We keep our own copy in case we get updates before we get a model instance.
Definition: DtModel.h:341
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:351
Definition: DtModel.h:311
boost::signalslib::signal< void(DtModelInstance *, DtModel *)> signal_modelInstanceCreated
Signal emitted when the model instance is created.
Definition: DtModel.h:241
std::string myModelDefinitionName
Definition: DtModel.h:352
DtModelInstance * myBackgroundModelInstance
holds the model created in the background for a bit
Definition: DtModel.h:328
DtVector position
Definition: DtModel.h:313
async task that loads a DtModel in the background
Definition: DtBackgroundLoadAsyncTask.h:25
std::vector< ObjectTransform > TransformList
Definition: DtModel.h:317
core singleton that manages loading for all the various DtModel subclasses
Definition: DtBackgroundLoader.h:38
bool myContributesToBound
Definition: DtModel.h:345
virtual void backgroundLoad()
the chunk of loading that can safely happen in the background
Definition: DtModel.h:252
static bool theInittedState
Definition: DtModel.h:308
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:38
bool myVisibleFlag
Definition: DtModel.h:349
boost::signalslib::signal< void(DtModel *)> signal_modelToBeDestroyed
Signal emitted when the model is to be destroyed.
Definition: DtModel.h:233
DtModelInstance * myModelInstance
Definition: DtModel.h:342
bool result_type
Definition: DtModel.h:32
boost::signalslib::signal< void(DtModel *)> signal_modelChanged
Definition: DtModel.h:234
boost::signalslib::signal< void(DtModelInstance &)> signal_modelToBeDestroyed
Signal emitted when a model is fully created.
Definition: DtModel.h:373
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:244
virtual void foregroundLoad()
the chunk of loading that must happen happen in the foreground, adding to scene graph etc...
Definition: DtModel.h:255
float myMinLastFrameDistance
last frames mimimal distance to the camera, calculated by the instancing system
Definition: DtModel.h:331
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:314
boost::signalslib::signal< void(DtModelInstance &)> signal_modelCreated
Signal emitted when a model is fully created.
Definition: DtModel.h:366
boost::signalslib::signal< void(DtModelInstance &)> signal_modelChanged
Signal emitted when a model has changed in some way.
Definition: DtModel.h:369
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:325
int myModelSet
Definition: DtModel.h:343
DtLoaderHandle * myInLoadQueueHandle
Definition: DtModel.h:306
virtual const std::string & modelDefinitionName()
returns the model definition name.
Definition: DtModel.h:71
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:55
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:70
bool myIsPropFlag
Definition: DtModel.h:347
A signaler for model changes.
Definition: DtModel.h:356
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:281
bool operator()(InputIterator first, InputIterator last) const
Definition: DtModel.h:34
DtDe & myDe
Definition: DtModel.h:319
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:238
const DtUniqueID myUniqueId
The unique id is constant after initialization.
Definition: DtModel.h:322
DtDe & de()
Get the DtDe object.
Definition: DtModel.h:179
DtUniqueID myParentSceneObjectID
Definition: DtModel.h:346
Contains DLL export macros.
int myVisualizerType
Definition: DtModel.h:344

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)