17 #include <vlutil/vlThreadSysWrapper.h>
21 #include <boost/bind.hpp>
25 #define DT_DE_INIT_ONCE(de)\
26 if(de.isInitFunctionRegistered((void*)&init))\
32 de.registerInitFunction((void*)&init);\
42 class DtDeSharedState;
44 class DtDriverManager;
46 class DtMessageDispatcher;
50 class DtVirtualBaseClass;
51 class DtSchemaManager;
54 class DtDisplayConfiguration;
55 class DtWindowConfiguration;
56 class DtChannelConfiguration;
57 class DtDriverConfiguration;
58 class DtSynchronizedTimeManager;
70 typedef std::vector<std::pair<DtDeError,bool> >
DeErrors;
101 UnableToInitialize = 0,
102 UnableToInitializeDueToLicense = -1
117 virtual InitializationResult initialize(
bool abortOnLicenseFailure =
true,
bool useLicenseErrorDialog=
true );
120 bool initialized()
const;
125 DtThreadId threadId();
142 virtual void tick(
double simTime);
147 inline void retick() { tick(simulationTime()); }
152 virtual bool timeToStop()
const;
155 virtual void setTimeToStop(
bool flag =
true);
161 virtual void reset();
200 bool driverManagerCreated()
const;
213 bool agentManagerCreated()
const;
216 virtual double simulationTime()
const;
220 virtual double syncedTime()
const;
228 virtual int displayCount()
const;
237 virtual bool isInMasterMode()
const;
240 virtual bool isInSlaveMode()
const;
254 virtual const DeErrors& deErrors()
const;
257 virtual void clearDeErrors();
263 bool renderFrameThisTick()
const;
268 virtual bool licenseAvailable()
const;
289 virtual void realizeDisplayConfiguration(
const std::string& clientName,
290 const std::string& displayName);
298 virtual void destroyDisplay(
const std::string& displayName);
301 virtual void destroyAllDisplays();
304 virtual bool modifyDisplay(
const std::string& displayName,
314 virtual void setSimulationTime(
double time);
319 virtual double systemTime()
const;
327 StaticInstanceFunction classInstanceFunction)
const;
332 template <
typename Class>
335 return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
340 virtual void registerFastInstance(
346 template <
typename Class>
349 registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
355 const std::string& instanceName)
const;
366 virtual void registerInstance(
const std::string& instanceName,
370 virtual void registerProctor(
unsigned short handlerId,
DtProctor*);
374 virtual void unregisterProctor(
unsigned short handlerId);
377 DtProctor* findProctor(
unsigned short handlerId)
const;
387 void setRenderFrameThisTick(
bool update);
427 boost::signal<void (const std::string&, const std::string&)>
443 boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
449 boost::signal<void (const std::string&, const DtWindowConfiguration&)>
456 boost::signal<void (const std::string&, const std::string&)>
462 boost::signal<void (
const std::string&,
const std::string&,
468 boost::signal<void (
const std::string&,
const std::string&,
474 boost::signal<void (
const std::string&,
const std::string&,
480 boost::signal<void (
const std::string&,
const std::string&,
499 virtual void onSlaveConnected(
const std::string& igName);
502 virtual void emitDeError(
const DtDeError&
error,
bool criticalError);
508 static const char* className();
512 void registerInitFunction(
void* address);
515 bool isInitFunctionRegistered(
void* address);
519 inline bool shouldSendMesssage()
521 return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
524 inline void setPagedLodMagnificationScaleFactor(
float factor )
526 myPagedLodMagnificationScaleFactor = factor;
529 inline float pagedLodMagnificationScaleFactor()
const
531 return myPagedLodMagnificationScaleFactor;
545 virtual void initializeSchemaManager();
547 virtual void initializeLibXmlIfNecessary();
551 virtual bool shouldSkipThisTick(
double simulationTime );
554 virtual void postInitialize();
557 virtual void postInitializeMaster();
560 virtual void checkForData();
568 void masterTick(
double simulationTime );
577 virtual bool local_realizeDisplayConfiguration(
578 const std::string& clientName,
const std::string& displayName);
582 virtual void local_destroyDisplay(
const std::string& displayName);
585 virtual bool local_modifyDisplay(
const std::string& displayName,
595 void destroyDisplay();
661 Master3D_License = 0,
674 template <
typename ManagerClass>
711 template <
typename ManagerClass>
714 ManagerClass* mgr =
dynamic_cast<ManagerClass*
>
722 DtTHROW_NEW(DtCorruptedState,
723 "Manager created after display engine was initialized.");
728 DtTHROW_NEW(DtCorruptedState,
"Create unsupported manager in slave.");
732 mgr =
new ManagerClass(de);
749 template <
typename ManagerClass>
755 DtTHROW_NEW(DtCorruptedState,
756 "Manager created after display engine was initialized.");
759 de.registerFastInstance(&ManagerClass::instance,mgr);
763 mgr->myConnections.manageConnection(
764 de.signal_initializeDefaultState.connect(
boost::bind(
765 &ManagerClass::loadDefaults,mgr)));