VR-Forces 4.8 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) 2012 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  , public DtObjectDebugger<DtSimComponent>
69 {
70 public:
71 
76  {
77  public:
79  explicit ComponentCriticalSection(
81 
82  explicit ComponentCriticalSection(
84 
87 
89 
91  void reset(DtParallelTickManager::AccessType access);
92 
94  void unlock();
95 
97  void lockShared();
98 
100  void lock();
101 
102  private:
105  };
106 
112  static DtSimComponent* MarkThreadSafe(DtSimComponent*);
113 
121  DtSimComponent(const DtString& name,
122  DtVrfObject* owner,
123  DtSimManager* simManager,
124  DtComponentDescriptor* desc = 0,
125  DtReaderWriterRegistry* parentRegistry = 0);
126 
128  virtual ~DtSimComponent();
129 
134  virtual void setParentSystem(DtComponentSystem* system);
135  DtComponentSystem * parentSystem() const;
136 
139  virtual bool init();
140 
144  virtual bool postAddComponentsInit() { return true; }
145 
149  virtual void registerAttributeFunctions(){}
150 
154  virtual void enable();
155  virtual void disable();
156  virtual bool isEnabled();
157  virtual void setIsEnabled(bool yesNo);
159 
163  virtual void preFirstTickInit();
164 
168  virtual void tick();
169 
173  virtual void postTick();
174 
182  virtual void timedTick();
183 
186  virtual void setMinTickPeriod(double minTickPeriod);
187 
189  virtual double minTickPeriod() const;
190 
192  virtual void setMinTickPeriodVariance(double minTickPeriodVariance);
193 
195  virtual double minTickPeriodVariance() const;
196 
200  virtual void setNextTickTime(double nextTickTime);
201 
203  virtual double nextTickTime() const;
204 
210  virtual double calculateNextTickTime() const;
211 
216  virtual double calculateFirstTickTime() const;
217 
224  virtual const char* type() const = 0;
225 
232  virtual void setEntity(DtVrfObject* entity);
233 
235  virtual DtSimComponent* nextComponent();
236  virtual DtSimComponent* prevComponent();
237 
239  virtual void setListItem(DtListItem* item);
240  virtual DtListItem* listItem();
241 
244  virtual void putData(std::string& fp, int indentLevel = 0);
245 
248  virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
249  const DtVariableBindingsList& variableBindings);
250 
253  virtual void addInputPort(DtInputPort* port);
254  virtual void removeInputPort(DtInputPort* port);
255 
261  virtual DtInputPort* lookupInputPort(const DtString& portName);
262 
264  virtual DtList inputPortList() const;
265 
268  virtual void addOutputPort(DtOutputPort* port);
269  virtual void removeOutputPort(DtOutputPort* port);
270 
276  virtual DtOutputPort* lookupOutputPort(const DtString& portName);
277 
279  virtual DtList outputPortList() const;
280 
283  virtual void addInputPortGroup(DtInputPortGroup* group);
284  virtual void removeInputPortGroup(DtInputPortGroup* group);
285 
288  virtual DtInputPortGroup* lookupInputPortGroup(const DtString& groupName);
289 
291  virtual DtList inputPortGroupList() const;
292 
295  virtual void addOutputPortGroup(DtOutputPortGroup* group);
296  virtual void removeOutputPortGroup(DtOutputPortGroup* group);
297 
300  virtual DtOutputPortGroup* lookupOutputPortGroup(const DtString& groupName);
301 
303  virtual DtList outputPortGroupList() const;
304 
311  virtual int priority() const;
317  virtual void setPriority(int priority);
318 
322  double dT() const;
323 
328  virtual void setDT(double deltaT);
329 
333  virtual void setComponentDescriptor(DtComponentDescriptor* componentDescriptor);
334  virtual const DtComponentDescriptor* componentDescriptor() const;
335 
340  virtual bool tickWhileDestroyed() const;
341 
344  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
345  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
346  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
347  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
348  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
350 
356 
359 
360  virtual DtSimResourceManager& resourceManager();
361  virtual const DtSimResourceManager& resourceManager() const;
363 
367  virtual const DtSymbolString& componentFullName() const;
368 
372  static DtSimComponentFactory* factory();
373  static void setFactory(DtSimComponentFactory* factory);
374 
377  static DtSimComponent* createComponent(const DtString& name,
378  const DtString& type, DtVrfObject* owner, DtSimManager* simManager,
379  DtComponentSystem* parentSystem,
380  DtComponentDescriptor* desc = 0,
381  DtReaderWriterRegistry* parentRegistry = 0);
382 
388  static void addSimComponentCreatorFcn(const DtString& type,
390 
392  DtPhysicalWorld* physicalWorld();
393  const DtPhysicalWorld* physicalWorld() const;
394 
396  DtAttachedTerrain* terrainAttachedTo();
397  const DtAttachedTerrain* terrainAttachedTo() const;
398 
400  DtVrfObject* entity() { return myEntity; }
401  const DtVrfObject* entity() const { return myEntity; }
402 
405  const DtVrfObject* const_entity() const { return myEntity; }
406 
408  DtSimManager* simManager() { return mySimManager; }
409  const DtSimManager* simManager() const { return mySimManager; }
410 
415  const Coordinate_System* coordinateSystem() const;
416 
418  DtVrfObjectStateRepository* localStateRepository();
419  const DtVrfObjectStateRepository* localStateRepository() const;
420 
423  const DtVrfObjectStateRepository* const_localStateRepository() const;
424 
426  virtual DtTaskVisualizationMap& taskVisualizations();
427 
431  virtual bool taskVisualizationsActive() const;
432 
438  virtual bool taskVisualizationsEnabled() const;
439 
441  virtual bool isThreadSafe() const;
442 
446  virtual void addVRLinkDeferredJob(const boost::function<void()>& callback);
447 
449  virtual void onRestore();
450 
451 protected:
452 
454  virtual double computeCurrentTime();
455 
460  bool testInvariant() const;
461 
465  virtual bool createPortGroups();
466 
470  virtual bool createPorts();
471 
480  DtVrfProcessStateRepository* createComponentPsr(const DtString& defaultPsrType,
481  const DtString& defaultPsrName, bool useDescriptorParams = true);
482 
485  virtual void updateTaskVisualizations() {};
486 
488  virtual void destroyTaskVisualizations();
489 
491  virtual void destroyTaskVisualization(const DtString& name);
492 
494  virtual DtPointTaskVisualizationPtr pointTaskVisualization(const DtString& name);
495 
497  virtual DtLineTaskVisualizationPtr lineTaskVisualization(const DtString& name);
498 
500  virtual DtAreaTaskVisualizationPtr areaTaskVisualization(const DtString& name);
501 
503  virtual DtTextTaskVisualizationPtr textTaskVisualization(const DtString& name);
504 
506  double calculateNextTaskVisTickTime() const;
507 
508 private:
511  DtSimComponent();
512 
514  DtSimComponent(const DtSimComponent& orig);
515 
517  DtSimComponent& operator=(const DtSimComponent& orig);
518 
519 
520 protected:
526  DtListItem* myListItem;
527 
528  typedef std::map<DtString, DtInputPort*> DtInputPortMap;
529  typedef std::map<DtString, DtOutputPort*> DtOutputPortMap;
530  typedef std::map<DtString, DtInputPortGroup*> DtInputPortGroupMap;
531  typedef std::map<DtString, DtOutputPortGroup*> DtOutputPortGroupMap;
532 
537 
539 
541 
546  double myDT;
547 
551 
555 
560 
562 
565  std::list<DtVrfProcessStateRepository*> myComponentPsrs;
566 
569 
572 
575 
577 };
578 
579 inline double DtSimComponent::dT() const
580 {
581  return myDT;
582 }
583 
const DtComponentDescriptor * myComponentDescriptor
Definition: simComponent.h:561
double myNextTickTime
Definition: simComponent.h:544
virtual bool postAddComponentsInit()
Called after all components have been created, initialized and added to the component manager...
Definition: simComponent.h:144
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:405
Definition: attachedTerrain.h:42
DtVrfObject * entity()
Gets the entity.
Definition: simComponent.h:400
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:521
double myMinTickPeriod
Definition: simComponent.h:542
DtSimManager * mySimManager
Definition: simComponent.h:523
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:408
DtOutputPortGroupMap myOutputPortGroupList
Definition: simComponent.h:536
DtTaskVisualizationMap myTaskVisualizations
The visualization objects to be drawn for this component.
Definition: simComponent.h:571
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:528
int myPriority
Definition: simComponent.h:540
Definition: readerWriterRegistry.h:39
double myDT
Definition: simComponent.h:546
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:543
static DtSimComponentFactory * myFactory
Definition: simComponent.h:538
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick.
Definition: simComponent.h:485
DtListItem * myListItem
Definition: simComponent.h:526
DtComponentSystem * mySystem
Pointer to the DtComponentSystem that this component belongs.
Definition: simComponent.h:525
Scoped guard for use in component tick functions.
Definition: simComponent.h:75
DtInputPortGroupMap myInputPortGroupList
Definition: simComponent.h:535
The DtPhysicalWorld is the primary interface to and manager of all of the &quot;physical&quot; aspects of the s...
Definition: physicalWorld.h:87
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:545
bool myThreadSafe
Definition: simComponent.h:103
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
DtVrfObjectStateRepository * myLocalStateRepository
Definition: simComponent.h:522
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:579
const DtSimManager * simManager() const
Definition: simComponent.h:409
std::map< DtString, DtOutputPortGroup * > DtOutputPortGroupMap
Definition: simComponent.h:531
DtInputPortMap myInputPortList
Definition: simComponent.h:533
std::list< DtVrfProcessStateRepository * > myComponentPsrs
List of PSRs made using createComponentPsr() that will be deleted by this component when it is destro...
Definition: simComponent.h:565
double myNextTaskVisTickTime
The next tick time for updating the task visualizations.
Definition: simComponent.h:574
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:554
bool myIsEnabled
Indicates whether this component should be enabled for ticking or not.
Definition: simComponent.h:550
DtOutputPortMap myOutputPortList
Definition: simComponent.h:534
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:104
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:149
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:102
std::map< DtString, DtOutputPort * > DtOutputPortMap
Definition: simComponent.h:529
std::map< DtString, DtInputPortGroup * > DtInputPortGroupMap
Definition: simComponent.h:530
bool myIsThreadSafe
Whether this component can be use the DtCriticalSection versions of the tick functions and be ticked ...
Definition: simComponent.h:559
RAII manager object for accessing paralle tick functionality.
Definition: parallelTickManager.h:324
DtSymbolString myFullComponentName
Definition: simComponent.h:576
const DtVrfObject * entity() const
Definition: simComponent.h:401
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:568

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)