VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
11 
15 
16 #include <vlutil/vlString.h>
17 #include <vlutil/vlList.h>
21 #include <vlutil/vlHashlist.h>
29 #include <list>
30 
31 class DtSimManager;
32 class DtVrfObject;
34 class DtInputPort;
35 class DtOutputPort;
36 class DtInputPortGroup;
37 class DtOutputPortGroup;
38 class DtAttachedTerrain;
39 class DtPhysicalWorld;
40 class Coordinate_System;
41 class DtComponentSystem;
44 class DtCriticalSection;
46 
68 #ifdef DtObjectDebugger_Enable
69  , public DtObjectDebugger<DtSimComponent>
70 #endif
71 {
72 public:
73 
78  {
79  public:
81  explicit ComponentCriticalSection(
83 
84  explicit ComponentCriticalSection(
86 
89 
91 
93  void reset(DtParallelTickManager::AccessType access);
94 
96  void unlock();
97 
99  void lockShared();
100 
102  void lock();
103 
104  private:
107  };
108 
114  static DtSimComponent* MarkThreadSafe(DtSimComponent*);
115 
123  DtSimComponent(const DtString& name,
124  DtVrfObject* owner,
125  DtSimManager* simManager,
126  DtComponentDescriptor* desc = 0,
127  DtReaderWriterRegistry* parentRegistry = 0);
128 
130  virtual ~DtSimComponent();
131 
136  virtual void setParentSystem(DtComponentSystem* system);
137  DtComponentSystem * parentSystem() const;
138 
141  virtual bool init();
142 
146  virtual bool postAddComponentsInit() { return true; }
147 
151  virtual void registerAttributeFunctions(){}
152 
156  virtual void enable();
157  virtual void disable();
158  virtual bool isEnabled();
159  virtual void setIsEnabled(bool yesNo);
161 
165  virtual void preFirstTickInit();
166 
170  virtual void tick();
171 
175  virtual void postTick();
176 
184  virtual void timedTick();
185 
188  virtual void setMinTickPeriod(double minTickPeriod);
189 
191  virtual double minTickPeriod() const;
192 
194  virtual void setMinTickPeriodVariance(double minTickPeriodVariance);
195 
197  virtual double minTickPeriodVariance() const;
198 
202  virtual void setNextTickTime(double nextTickTime);
203 
205  virtual double nextTickTime() const;
206 
212  virtual double calculateNextTickTime() const;
213 
218  virtual double calculateFirstTickTime() const;
219 
226  virtual const char* type() const = 0;
227 
234  virtual void setEntity(DtVrfObject* entity);
235 
237  virtual DtSimComponent* nextComponent();
238  virtual DtSimComponent* prevComponent();
239 
241  virtual void setListItem(DtListItem* item);
242  virtual DtListItem* listItem();
243 
246  virtual void putData(std::string& fp, int indentLevel = 0);
247 
250  virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
251  const DtVariableBindingsList& variableBindings);
252 
255  virtual void addInputPort(DtInputPort* port);
256  virtual void removeInputPort(DtInputPort* port);
257 
263  virtual DtInputPort* lookupInputPort(const DtString& portName);
264 
266  virtual DtList inputPortList() const;
267 
270  virtual void addOutputPort(DtOutputPort* port);
271  virtual void removeOutputPort(DtOutputPort* port);
272 
278  virtual DtOutputPort* lookupOutputPort(const DtString& portName);
279 
281  virtual DtList outputPortList() const;
282 
285  virtual void addInputPortGroup(DtInputPortGroup* group);
286  virtual void removeInputPortGroup(DtInputPortGroup* group);
287 
290  virtual DtInputPortGroup* lookupInputPortGroup(const DtString& groupName);
291 
293  virtual DtList inputPortGroupList() const;
294 
297  virtual void addOutputPortGroup(DtOutputPortGroup* group);
298  virtual void removeOutputPortGroup(DtOutputPortGroup* group);
299 
302  virtual DtOutputPortGroup* lookupOutputPortGroup(const DtString& groupName);
303 
305  virtual DtList outputPortGroupList() const;
306 
313  virtual int priority() const;
319  virtual void setPriority(int priority);
320 
324  double dT() const;
325 
330  virtual void setDT(double deltaT);
331 
335  virtual void setComponentDescriptor(DtComponentDescriptor* componentDescriptor);
336  virtual const DtComponentDescriptor* componentDescriptor() const;
337 
342  virtual bool tickWhileDestroyed() const;
343 
346  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
347  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
348  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
349  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
350  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
352 
358 
361 
362  virtual DtSimResourceManager& resourceManager();
363  virtual const DtSimResourceManager& resourceManager() const;
365 
369  virtual const DtSymbolString& componentFullName() const;
370 
374  static DtSimComponentFactory* factory();
375  static void setFactory(DtSimComponentFactory* factory);
376 
379  static DtSimComponent* createComponent(const DtString& name,
380  const DtString& type, DtVrfObject* owner, DtSimManager* simManager,
381  DtComponentSystem* parentSystem,
382  DtComponentDescriptor* desc = 0,
383  DtReaderWriterRegistry* parentRegistry = 0);
384 
390  static void addSimComponentCreatorFcn(const DtString& type,
392 
394  DtPhysicalWorld* physicalWorld();
395  const DtPhysicalWorld* physicalWorld() const;
396 
398  DtAttachedTerrain* terrainAttachedTo();
399  const DtAttachedTerrain* terrainAttachedTo() const;
400 
402  DtVrfObject* entity() { return myEntity; }
403  const DtVrfObject* entity() const { return myEntity; }
404 
407  const DtVrfObject* const_entity() const { return myEntity; }
408 
410  DtSimManager* simManager() { return mySimManager; }
411  const DtSimManager* simManager() const { return mySimManager; }
412 
417  const Coordinate_System* coordinateSystem() const;
418 
420  DtVrfObjectStateRepository* localStateRepository();
421  const DtVrfObjectStateRepository* localStateRepository() const;
422 
425  const DtVrfObjectStateRepository* const_localStateRepository() const;
426 
428  virtual DtTaskVisualizationMap& taskVisualizations();
429 
433  virtual bool taskVisualizationsActive() const;
434 
440  virtual bool taskVisualizationsEnabled() const;
441 
443  virtual bool isThreadSafe() const;
444 
448  virtual void addVRLinkDeferredJob(const boost::function<void()>& callback);
449 
451  virtual void onRestore();
452 
453 protected:
454 
456  virtual double computeCurrentTime();
457 
462  bool testInvariant() const;
463 
467  virtual bool createPortGroups();
468 
472  virtual bool createPorts();
473 
482  DtVrfProcessStateRepository* createComponentPsr(const DtString& defaultPsrType,
483  const DtString& defaultPsrName, bool useDescriptorParams = true);
484 
487  virtual void updateTaskVisualizations() {};
488 
490  virtual void destroyTaskVisualizations();
491 
493  virtual void destroyTaskVisualization(const DtString& name);
494 
496  virtual DtPointTaskVisualizationPtr pointTaskVisualization(const DtString& name);
497 
499  virtual DtLineTaskVisualizationPtr lineTaskVisualization(const DtString& name);
500 
502  virtual DtAreaTaskVisualizationPtr areaTaskVisualization(const DtString& name);
503 
505  virtual DtTextTaskVisualizationPtr textTaskVisualization(const DtString& name);
506 
508  double calculateNextTaskVisTickTime() const;
509 
510 private:
513  DtSimComponent();
514 
516  DtSimComponent(const DtSimComponent& orig);
517 
519  DtSimComponent& operator=(const DtSimComponent& orig);
520 
521 
522 protected:
528  DtListItem* myListItem;
529 
530  typedef std::map<DtString, DtInputPort*> DtInputPortMap;
531  typedef std::map<DtString, DtOutputPort*> DtOutputPortMap;
532  typedef std::map<DtString, DtInputPortGroup*> DtInputPortGroupMap;
533  typedef std::map<DtString, DtOutputPortGroup*> DtOutputPortGroupMap;
534 
539 
541 
543 
548  double myDT;
549 
553 
557 
562 
564 
567  std::list<DtVrfProcessStateRepository*> myComponentPsrs;
568 
571 
574 
577 
579 };
580 
581 inline double DtSimComponent::dT() const
582 {
583  return myDT;
584 }
585 
const DtComponentDescriptor * myComponentDescriptor
Definition: simComponent.h:563
double myNextTickTime
Definition: simComponent.h:546
virtual bool postAddComponentsInit()
Called after all components have been created, initialized and added to the component manager...
Definition: simComponent.h:146
const DtVrfObject * const_entity() const
You would want to use this call if you could be either a const or non-const entity, and you wanted to be sure you only had const access.
Definition: simComponent.h:407
Definition: attachedTerrain.h:42
DtVrfObject * entity()
Gets the entity.
Definition: simComponent.h:402
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
Definition: symbolString.h:20
DtVrfObject * myEntity
Definition: simComponent.h:523
double myMinTickPeriod
Definition: simComponent.h:544
DtSimManager * mySimManager
Definition: simComponent.h:525
A DtComponentSystem is a collection of DtSimComponents that are associated with each other...
Definition: componentSystem.h:35
DtSimManager * simManager()
Gets the sim manager.
Definition: simComponent.h:410
DtOutputPortGroupMap myOutputPortGroupList
Definition: simComponent.h:538
DtTaskVisualizationMap myTaskVisualizations
The visualization objects to be drawn for this component.
Definition: simComponent.h:573
Definition: readerWriter.h:85
*bool testInvariant() const
class DtSimResourceManager:
Definition: simResourceManager.h:38
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:42
DtSimComponent *(* DtSimComponentCreatorFcn)(const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *compDescriptor, DtReaderWriterRegistry *registry)
Definition: simComponentFactory.h:25
#define DT_DEFINE_OBJECT_DEBUGGER_NAME(type)
Definition: objectCounter.h:265
Default on in debug, off in release.
Definition: objectCounter.h:31
std::map< DtString, DtInputPort * > DtInputPortMap
Definition: simComponent.h:530
int myPriority
Definition: simComponent.h:542
Definition: readerWriterRegistry.h:39
double myDT
Definition: simComponent.h:548
class DtSimComponentFactory:
Definition: simComponentFactory.h:36
class DtVrfProcessStateRepositoryManager:
Definition: vrfProcessStateRepositoryManager.h:47
DtOutputPortGroup is a data port group of a data provider.
Definition: outputPortGroup.h:30
Description: This repository holds all information that is common to all the forms of all entity/aggr...
Definition: vrfObjectStateRepository.h:87
double myMinTickPeriodVariance
Definition: simComponent.h:545
static DtSimComponentFactory * myFactory
Definition: simComponent.h:540
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick.
Definition: simComponent.h:487
DtListItem * myListItem
Definition: simComponent.h:528
DtComponentSystem * mySystem
Pointer to the DtComponentSystem that this component belongs.
Definition: simComponent.h:527
Scoped guard for use in component tick functions.
Definition: simComponent.h:77
DtInputPortGroupMap myInputPortGroupList
Definition: simComponent.h:537
The DtPhysicalWorld is the primary interface to and manager of all of the &quot;physical&quot; aspects of the s...
Definition: physicalWorld.h:88
Definition: coordSystem.h:54
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
double myLastTickSimTime
Definition: simComponent.h:547
bool myThreadSafe
Definition: simComponent.h:105
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
DtVrfObjectStateRepository * myLocalStateRepository
Definition: simComponent.h:524
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
double dT() const
This is the delta-t for this component, which may or may not be the same as the exerciseClock dT...
Definition: simComponent.h:581
const DtSimManager * simManager() const
Definition: simComponent.h:411
std::map< DtString, DtOutputPortGroup * > DtOutputPortGroupMap
Definition: simComponent.h:533
DtInputPortMap myInputPortList
Definition: simComponent.h:535
std::list< DtVrfProcessStateRepository * > myComponentPsrs
List of PSRs made using createComponentPsr() that will be deleted by this component when it is destro...
Definition: simComponent.h:567
double myNextTaskVisTickTime
The next tick time for updating the task visualizations.
Definition: simComponent.h:576
DtBoost::shared_ptr< DtLineTaskVisualization > DtLineTaskVisualizationPtr
Definition: lineTaskVisualization.h:138
bool myFirstTick
Initialized to true in the constructor, set to false by the first call to postTick.
Definition: simComponent.h:556
bool myIsEnabled
Indicates whether this component should be enabled for ticking or not.
Definition: simComponent.h:552
DtOutputPortMap myOutputPortList
Definition: simComponent.h:536
DtOutputPorts are data ports owned by data producers.
Definition: outputPort.h:46
Instances of DtInputPort are are data ports owned by data consumers.
Definition: inputPort.h:42
AccessType
Definition: parallelTickManager.h:65
DtBoost::shared_ptr< DtPointTaskVisualization > DtPointTaskVisualizationPtr
Definition: pointTaskVisualization.h:75
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
Class DtVrfProcessStateRepository: Abstract base class for all process state repositories.
Definition: vrfProcessStateRepository.h:43
DtCriticalSection myCriticalSection
Definition: simComponent.h:106
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtInputPortGroup is a data port group of a data consumer.
Definition: inputPortGroup.h:32
virtual void registerAttributeFunctions()
Called to register functions that provide system attribute values.
Definition: simComponent.h:151
std::map< DtTaskVisualizationId, DtTaskVisualizationPtr > DtTaskVisualizationMap
Definition: taskVisualization.h:121
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:103
std::map< DtString, DtOutputPort * > DtOutputPortMap
Definition: simComponent.h:531
std::map< DtString, DtInputPortGroup * > DtInputPortGroupMap
Definition: simComponent.h:532
bool myIsThreadSafe
Whether this component can be use the DtCriticalSection versions of the tick functions and be ticked ...
Definition: simComponent.h:561
RAII manager object for accessing paralle tick functionality.
Definition: parallelTickManager.h:324
DtSymbolString myFullComponentName
Definition: simComponent.h:578
const DtVrfObject * entity() const
Definition: simComponent.h:403
DtBoost::shared_ptr< DtTextTaskVisualization > DtTextTaskVisualizationPtr
Definition: textTaskVisualization.h:75
DtBoost::shared_ptr< DtAreaTaskVisualization > DtAreaTaskVisualizationPtr
Definition: areaTaskVisualization.h:61
bool myTickEveryFrame
Flag indicating that tickPeriod is set to 0, and the component will tick every frame.
Definition: simComponent.h:570

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)