VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Friends
makVrf::DtVrfGuiSimObjectManager Class Reference

The DtVrfGuiSimObjectManager class is a wrapper around the DtStateDataManager created in the network thread. Access to all data supplied from this class is thread safe.

Inheritance diagram for makVrf::DtVrfGuiSimObjectManager:
Inheritance graph
[legend]

Classes

class  GuiSimObjectManager
 
struct  StateComponent
 

Public Types

typedef std::unordered_map
< DtUUID, DtSimObjectReference
SimObjectsByUUID
 
using SimObjects = SimObjectsByUUID
 
typedef
boost::signals2::signal< void(DtSimObjectReference,
DtStateComponent::StateComponentType)> 
StateComponentSignal
 

Public Member Functions

 DtVrfGuiSimObjectManager (makVrv::DtDe &)
 
virtual ~DtVrfGuiSimObjectManager () override
 
virtual DtSimObjectReference lookup (makVrv::DtUniqueID) const
 
DtSimObjectReference findStateView (makVrv::DtUniqueID id) const
 
virtual DtSimObjectReference lookup (const DtUUID &) const
 
DtSimObjectReference findStateView (const DtUUID &id) const
 
const std::map< DtUUID,
DtGuiLocalObject * > & 
localObjects () const
 
virtual bool has (const DtUUID &) const
 
virtual bool has (unsigned long long) const
 
virtual DtVector locationOf (makVrv::DtUniqueID id)
 
virtual bool stateDataExists (makVrv::DtUniqueID) const
 
virtual makVrv::DtUniqueID uniqueIdFromUUID (const DtUUID &) const
 
virtual std::string lookupNameById (makVrv::DtUniqueID) const
 
virtual std::vector
< DtSimObjectReference
lookup (const makVrv::DtSelectionManager::IdSet &) const
 
virtual makVrv::DtUniqueID elementIdFromUUID (const DtUUID &) const
 
const SimObjectsByUUIDsimObjects () const
 
virtual DtUUID objectUUID (makVrv::DtUniqueID) const
 
virtual void slot_tick ()
 
virtual makVrv::DtUniqueID displayIdFromSimId (const makVrv::DtUniqueID &id, makVrv::DtModelSetId modelSet=makVrv::DtModelSetId::Unspecified) const
 
virtual
makVrv::DtElementData::SceneObjectIdList 
displayIdsFromSimId (const makVrv::DtUniqueID &id, makVrv::DtModelSetId modelSet=makVrv::DtModelSetId::Unspecified) const
 
virtual makVrv::DtUniqueID simIdFromDisplayId (const makVrv::DtUniqueID &id) const
 
virtual
makVrv::DtElementEntry::ElementType 
elementType (const makVrv::DtElementID &) const
 
virtual const std::set
< makVrv::DtUniqueID > & 
dIGuyIds ()
 
virtual const std::set
< makVrv::DtUniqueID > & 
tacticalGraphicElements () const
 
virtual const DtStringentityName (makVrv::DtElementID) const
 
virtual DtVector centerOfMass (const std::set< DtUUID > &uuids, bool ignoreEmbarked=true) const
 
virtual makVrv::DtUniqueID parentId (const makVrv::DtUniqueID &id) const
 
virtual std::string overlayName (const makVrv::DtUniqueID simId) const
 
virtual bool clearing () const
 
virtual void signalWhenAllObjectsDiscovered (const std::map< short, int > &)
 
virtual void resizeContainer (unsigned)
 
template<typename T_Component >
StateComponentSignalsignalWhenStateComponentAdded ()
 
template<typename T_Component >
StateComponentSignalsignalWhenStateComponentRemoved ()
 
virtual int maxMarkingTextLengthFor (const DtEntityType &) const
 
virtual void setMaxMarkingTextLengthFunction (DtMaxMarkingTextLengthFunction)
 
virtual
DtMaxMarkingTextLengthFunction 
maxMarkingTextLengthFunction () const
 
virtual int defaultMaxMarkingTextLengthFunction (const DtEntityType &)
 
virtual void uniqueEntityTypes (makVrv::DtUniqueID, std::vector< DtEntityType > &entityTypes)
 
const std::set
< makVrv::DtUniqueID > & 
stealthStates () const
 
- Public Member Functions inherited from makVrv::DtVirtualBaseClass
 DtVirtualBaseClass ()
 
virtual ~DtVirtualBaseClass ()
 

Static Public Member Functions

static DtVrfGuiSimObjectManagerinstance (makVrv::DtDe &)
 

Public Attributes

boost::signals2::signal< void(DtSimObjectReference)> signal_objectAdded
 
boost::signals2::signal< void(DtSimObjectReference)> signal_objectDeleted
 
boost::signals2::signal< void(const
DtUUID &, const DtUUID
&, DtSimObjectReference)> 
signal_uuidChanged
 
boost::signals2::signal< void(const
DtString &, const DtString
&, DtSimObjectReference)> 
signal_objectRenamed
 
boost::signals2::signal< void()> signal_allObjectsDiscovered
 
boost::signals2::signal< void()> signal_cleared
 

Protected Types

typedef std::map< DtUUID,
std::set< int > > 
ComponentsAddedRemoved
 
typedef std::vector
< StateComponent
StateComponentSignals
 
typedef std::unordered_map
< DtUUID, unsigned long long
IdsByUUID
 

Protected Member Functions

virtual DtGuiLocalObjectcreateStaticData (const DtEntityType &, const DtUUID &uuid=DtUUID::nullUUID())
 
virtual DtGuiLocalObjectcreateSharedData (const DtEntityType &, makVrv::DtUniqueID id=0, const DtUUID &uuid=DtUUID::nullUUID())
 
virtual void slot_objectAdded (DtSimObjectReference)
 
virtual void slot_objectDeleted (DtSimObjectReference)
 
virtual void slot_uuidChanged (const DtUUID &oldUUID, const DtUUID &newUUID)
 
virtual void slot_objectRenamed (DtSimObjectReference ref, const DtString &oldName, const DtString &newName)
 
virtual void slot_stateDataModified (DtSimObjectReference)
 
virtual void uniqueEntityTypes (makVrv::DtUniqueID, std::vector< DtEntityType > &entityTypes, std::set< std::string > &typesChecked)
 
virtual void slot_guiLocalObjectDeleted (DtGuiLocalObject *)
 
virtual void slot_gateUnlocked ()
 
virtual void slot_gateLocked ()
 
virtual void slot_modelSetLoaded ()
 
virtual void completeDeletion (DtSimObjectReference o)
 
virtual void slot_stateComponentAdded (DtStateComponent *)
 
virtual void slot_stateComponentRemoved (DtStateComponent *)
 
virtual void setupComponentModifiedConnections ()
 
virtual void slot_onCoordinateSystemChanged (const std::string &coordinateSystem, const std::string &coordinateParameters)
 
virtual void setStateDataManager (DtStateDataManager *)
 

Protected Attributes

tbb::spin_rw_mutex myComponentMutex
 
ComponentsAddedRemoved myComponentsAdded
 
ComponentsAddedRemoved myComponentsRemoved
 
std::set< makVrv::DtUniqueIDmyStealthStates
 
DtEntityType myStealthType
 
makVrv::DtDemyDe
 
DtStateDataManagermyStateDataManager = nullptr
 
GuiSimObjectManagermySimObjectManager = nullptr
 
boost::signals2::connection myTickConnection
 
makVrv::DtSignalConnectionManager myConnectionManager
 
tbb::spin_mutex myUpdatedMutex
 
std::map< int, std::set
< DtSimObjectReference > > 
myComponentsUpdated
 
std::set< DtSimObjectReferencemyObjectsUpdated
 
std::set< DtSimObjectReferencemyObjectsDeleted
 
std::set< makVrv::DtUniqueIDmyTacticalGraphicElements
 
std::set< makVrv::DtUniqueIDmyDIGuyIds
 
std::unordered_set
< makVrv::DtUniqueID
myIdsToCheckForDIGuy
 
DtMaxMarkingTextLengthFunction myMaxMarkingTextLengthFunction
 
std::map< short, intmyWaitingForDiscovery
 
boost::signals2::scoped_connection myGateLockedConnection
 
boost::signals2::scoped_connection myGateUnlockedConnection
 
DtStateDataManagermyGuiStateDataManager = nullptr
 
makVrv::DtSignalConnectionManager myConnections
 
std::map< DtUUID,
DtGuiLocalObject * > 
myLocalObjects
 
StateComponentSignals myStateComponentSignals
 
SimObjectsByUUID mySimObjectsByUUID
 
IdsByUUID myIdsByUUID
 
std::map< DtUUID, DtUUIDmyUUIDChanged
 
tbb::spin_rw_mutex myUUIDChangedMutex
 
tbb::spin_mutex myAdvanceFrameMutex
 
makVrv::DtCoordinateSystemmyCoordinateSystem = nullptr
 
bool myClearing = false
 

Friends

class DtGuiLocalObjectManager
 
class DtVrfConnectionHelper
 

Member Typedef Documentation

typedef std::map<DtUUID, std::set<int> > makVrf::DtVrfGuiSimObjectManager::ComponentsAddedRemoved
protected
typedef std::unordered_map<DtUUID, unsigned long long> makVrf::DtVrfGuiSimObjectManager::IdsByUUID
protected

Constructor & Destructor Documentation

makVrf::DtVrfGuiSimObjectManager::DtVrfGuiSimObjectManager ( makVrv::DtDe )
virtual makVrf::DtVrfGuiSimObjectManager::~DtVrfGuiSimObjectManager ( )
overridevirtual

Member Function Documentation

static DtVrfGuiSimObjectManager& makVrf::DtVrfGuiSimObjectManager::instance ( makVrv::DtDe )
static

[vrfGuiSimObjectManager instanceDefinition]

Referenced by makVrf::DtSetStatePropertyDialog::setupProperties().

virtual DtSimObjectReference makVrf::DtVrfGuiSimObjectManager::lookup ( makVrv::DtUniqueID  ) const
virtual

[vrfGuiSimObjectManager instanceDefinition]

Convenience method to return the world position of the given object.

Referenced by makVrf::DtSetStatePropertyDialog::setupProperties().

DtSimObjectReference makVrf::DtVrfGuiSimObjectManager::findStateView ( makVrv::DtUniqueID  id) const
inline
virtual DtSimObjectReference makVrf::DtVrfGuiSimObjectManager::lookup ( const DtUUID ) const
virtual
DtSimObjectReference makVrf::DtVrfGuiSimObjectManager::findStateView ( const DtUUID id) const
inline
const std::map<DtUUID, DtGuiLocalObject*>& makVrf::DtVrfGuiSimObjectManager::localObjects ( ) const
inline
virtual bool makVrf::DtVrfGuiSimObjectManager::has ( const DtUUID ) const
virtual

Returns true if there is a sim object reference with this UUID Returns true if this manager has the UUID in the mySimObjects list.

virtual bool makVrf::DtVrfGuiSimObjectManager::has ( unsigned long  long) const
virtual
virtual DtVector makVrf::DtVrfGuiSimObjectManager::locationOf ( makVrv::DtUniqueID  id)
virtual
Returns
The origin of the object if it is a single point object or the first point if multi point. This routine will first look up the screen representation and return that value if it exists, else return the state view value. The location returned is in geocentric
virtual bool makVrf::DtVrfGuiSimObjectManager::stateDataExists ( makVrv::DtUniqueID  ) const
virtual
virtual makVrv::DtUniqueID makVrf::DtVrfGuiSimObjectManager::uniqueIdFromUUID ( const DtUUID ) const
virtual
virtual std::string makVrf::DtVrfGuiSimObjectManager::lookupNameById ( makVrv::DtUniqueID  ) const
virtual
virtual std::vector<DtSimObjectReference> makVrf::DtVrfGuiSimObjectManager::lookup ( const makVrv::DtSelectionManager::IdSet ) const
virtual
virtual makVrv::DtUniqueID makVrf::DtVrfGuiSimObjectManager::elementIdFromUUID ( const DtUUID ) const
virtual
const SimObjectsByUUID& makVrf::DtVrfGuiSimObjectManager::simObjects ( ) const
inline
virtual DtUUID makVrf::DtVrfGuiSimObjectManager::objectUUID ( makVrv::DtUniqueID  ) const
virtual

Same as DtElementAttributeUtilityFunctions::uuidForObject(myDe, id);.

virtual void makVrf::DtVrfGuiSimObjectManager::slot_tick ( )
virtual
virtual makVrv::DtUniqueID makVrf::DtVrfGuiSimObjectManager::displayIdFromSimId ( const makVrv::DtUniqueID id,
makVrv::DtModelSetId  modelSet = makVrv::DtModelSetId::Unspecified 
) const
virtual
virtual makVrv::DtElementData::SceneObjectIdList makVrf::DtVrfGuiSimObjectManager::displayIdsFromSimId ( const makVrv::DtUniqueID id,
makVrv::DtModelSetId  modelSet = makVrv::DtModelSetId::Unspecified 
) const
virtual
virtual makVrv::DtUniqueID makVrf::DtVrfGuiSimObjectManager::simIdFromDisplayId ( const makVrv::DtUniqueID id) const
virtual

Returns the name of the object given the specified id.

virtual makVrv::DtElementEntry::ElementType makVrf::DtVrfGuiSimObjectManager::elementType ( const makVrv::DtElementID ) const
virtual

Returns the type of the element.

virtual const std::set<makVrv::DtUniqueID>& makVrf::DtVrfGuiSimObjectManager::dIGuyIds ( )
virtual

IDs of main elements (parent ids, not scene ids) whose 3D model set contains a DIGuy visualizer. Note that any new objects created since this list was requested will be inspected, so, calls to this (depending on how long it was since the last call) could take a few moments to return.

virtual const std::set<makVrv::DtUniqueID>& makVrf::DtVrfGuiSimObjectManager::tacticalGraphicElements ( ) const
virtual
virtual const DtString& makVrf::DtVrfGuiSimObjectManager::entityName ( makVrv::DtElementID  ) const
virtual
virtual DtVector makVrf::DtVrfGuiSimObjectManager::centerOfMass ( const std::set< DtUUID > &  uuids,
bool  ignoreEmbarked = true 
) const
virtual
virtual makVrv::DtUniqueID makVrf::DtVrfGuiSimObjectManager::parentId ( const makVrv::DtUniqueID id) const
virtual
virtual std::string makVrf::DtVrfGuiSimObjectManager::overlayName ( const makVrv::DtUniqueID  simId) const
virtual
virtual bool makVrf::DtVrfGuiSimObjectManager::clearing ( ) const
virtual

Returns true if the manager is in the process of clearing out objects due to model set reload.

virtual void makVrf::DtVrfGuiSimObjectManager::signalWhenAllObjectsDiscovered ( const std::map< short, int > &  )
virtual

Signal when all the kind/domain objects (of the key) are discovered. Will look at existing objects before waiting for new.

virtual void makVrf::DtVrfGuiSimObjectManager::resizeContainer ( unsigned  )
virtual
template<typename T_Component >
StateComponentSignal& makVrf::DtVrfGuiSimObjectManager::signalWhenStateComponentAdded ( )
inline
template<typename T_Component >
StateComponentSignal& makVrf::DtVrfGuiSimObjectManager::signalWhenStateComponentRemoved ( )
inline
virtual int makVrf::DtVrfGuiSimObjectManager::maxMarkingTextLengthFor ( const DtEntityType &  ) const
virtual

Returns the max marking text length for the entity type given the assigned max marking text length boost function. Reassign the function only if you know that changes you have made to the standard will support larger name lengths. Entities are capped at 11 (one byte for NULL bit), aggregates at 31 and tactical graphics at 255. by default.

virtual void makVrf::DtVrfGuiSimObjectManager::setMaxMarkingTextLengthFunction ( DtMaxMarkingTextLengthFunction  )
virtual
virtual DtMaxMarkingTextLengthFunction makVrf::DtVrfGuiSimObjectManager::maxMarkingTextLengthFunction ( ) const
virtual
virtual int makVrf::DtVrfGuiSimObjectManager::defaultMaxMarkingTextLengthFunction ( const DtEntityType &  )
virtual
virtual void makVrf::DtVrfGuiSimObjectManager::uniqueEntityTypes ( makVrv::DtUniqueID  ,
std::vector< DtEntityType > &  entityTypes 
)
virtual

Given the unique id, add unique entity types to the given vector that either are this item or subordinates of this item.

const std::set<makVrv::DtUniqueID>& makVrf::DtVrfGuiSimObjectManager::stealthStates ( ) const
inline

Returns all the current stealth states. myEntityId is the site/app id of the stealth.

virtual DtGuiLocalObject* makVrf::DtVrfGuiSimObjectManager::createStaticData ( const DtEntityType &  ,
const DtUUID uuid = DtUUID::nullUUID() 
)
protectedvirtual

Creates a new state data and adds does not add it to the state data manager. The state data will be destroyed when the unique ptr that holds the state data goes out of scope.

virtual DtGuiLocalObject* makVrf::DtVrfGuiSimObjectManager::createSharedData ( const DtEntityType &  ,
makVrv::DtUniqueID  id = 0,
const DtUUID uuid = DtUUID::nullUUID() 
)
protectedvirtual

Creates data that will be part of the state data manager and, when the frame is advanced, be available as a read only sim object reference. Even though this data is created in the gui thread, it is updated in the network thread, so, changes made to the local gui data might not be available on the next tick.

virtual void makVrf::DtVrfGuiSimObjectManager::slot_objectAdded ( DtSimObjectReference  )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_objectDeleted ( DtSimObjectReference  )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_uuidChanged ( const DtUUID oldUUID,
const DtUUID newUUID 
)
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_objectRenamed ( DtSimObjectReference  ref,
const DtString oldName,
const DtString newName 
)
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_stateDataModified ( DtSimObjectReference  )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::uniqueEntityTypes ( makVrv::DtUniqueID  ,
std::vector< DtEntityType > &  entityTypes,
std::set< std::string > &  typesChecked 
)
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_guiLocalObjectDeleted ( DtGuiLocalObject )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_gateUnlocked ( )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_gateLocked ( )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_modelSetLoaded ( )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::completeDeletion ( DtSimObjectReference  o)
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_stateComponentAdded ( DtStateComponent )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_stateComponentRemoved ( DtStateComponent )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::setupComponentModifiedConnections ( )
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::slot_onCoordinateSystemChanged ( const std::string &  coordinateSystem,
const std::string &  coordinateParameters 
)
protectedvirtual
virtual void makVrf::DtVrfGuiSimObjectManager::setStateDataManager ( DtStateDataManager )
protectedvirtual

Friends And Related Function Documentation

friend class DtGuiLocalObjectManager
friend
friend class DtVrfConnectionHelper
friend

This should never be set outside of the DtVrfConnectionHelper. This class is just used as a way to share the manager.

Member Data Documentation

boost::signals2::signal<void (DtSimObjectReference)> makVrf::DtVrfGuiSimObjectManager::signal_objectAdded
boost::signals2::signal<void (DtSimObjectReference)> makVrf::DtVrfGuiSimObjectManager::signal_objectDeleted
boost::signals2::signal<void (const DtUUID&, const DtUUID&, DtSimObjectReference)> makVrf::DtVrfGuiSimObjectManager::signal_uuidChanged
boost::signals2::signal<void (const DtString&, const DtString&, DtSimObjectReference)> makVrf::DtVrfGuiSimObjectManager::signal_objectRenamed
boost::signals2::signal<void ()> makVrf::DtVrfGuiSimObjectManager::signal_allObjectsDiscovered

If set up for it, a signal sent when the object counts map has had all the objects of all kind/domain pairs discovered.

boost::signals2::signal<void ()> makVrf::DtVrfGuiSimObjectManager::signal_cleared
tbb::spin_rw_mutex makVrf::DtVrfGuiSimObjectManager::myComponentMutex
protected
ComponentsAddedRemoved makVrf::DtVrfGuiSimObjectManager::myComponentsAdded
protected
ComponentsAddedRemoved makVrf::DtVrfGuiSimObjectManager::myComponentsRemoved
protected
std::set<makVrv::DtUniqueID> makVrf::DtVrfGuiSimObjectManager::myStealthStates
protected
DtEntityType makVrf::DtVrfGuiSimObjectManager::myStealthType
protected
makVrv::DtDe& makVrf::DtVrfGuiSimObjectManager::myDe
protected
DtStateDataManager* makVrf::DtVrfGuiSimObjectManager::myStateDataManager = nullptr
protected
GuiSimObjectManager* makVrf::DtVrfGuiSimObjectManager::mySimObjectManager = nullptr
protected
boost::signals2::connection makVrf::DtVrfGuiSimObjectManager::myTickConnection
protected
makVrv::DtSignalConnectionManager makVrf::DtVrfGuiSimObjectManager::myConnectionManager
protected
tbb::spin_mutex makVrf::DtVrfGuiSimObjectManager::myUpdatedMutex
protected
std::map<int, std::set<DtSimObjectReference> > makVrf::DtVrfGuiSimObjectManager::myComponentsUpdated
protected
std::set<DtSimObjectReference> makVrf::DtVrfGuiSimObjectManager::myObjectsUpdated
protected
std::set<DtSimObjectReference> makVrf::DtVrfGuiSimObjectManager::myObjectsDeleted
protected
std::set<makVrv::DtUniqueID> makVrf::DtVrfGuiSimObjectManager::myTacticalGraphicElements
protected
std::set<makVrv::DtUniqueID> makVrf::DtVrfGuiSimObjectManager::myDIGuyIds
protected
std::unordered_set<makVrv::DtUniqueID> makVrf::DtVrfGuiSimObjectManager::myIdsToCheckForDIGuy
protected
DtMaxMarkingTextLengthFunction makVrf::DtVrfGuiSimObjectManager::myMaxMarkingTextLengthFunction
protected
std::map<short, int> makVrf::DtVrfGuiSimObjectManager::myWaitingForDiscovery
protected
boost::signals2::scoped_connection makVrf::DtVrfGuiSimObjectManager::myGateLockedConnection
protected
boost::signals2::scoped_connection makVrf::DtVrfGuiSimObjectManager::myGateUnlockedConnection
protected
DtStateDataManager* makVrf::DtVrfGuiSimObjectManager::myGuiStateDataManager = nullptr
protected

This will keep track of data created only on the GUI side.

makVrv::DtSignalConnectionManager makVrf::DtVrfGuiSimObjectManager::myConnections
protected
std::map<DtUUID, DtGuiLocalObject*> makVrf::DtVrfGuiSimObjectManager::myLocalObjects
protected
StateComponentSignals makVrf::DtVrfGuiSimObjectManager::myStateComponentSignals
protected
SimObjectsByUUID makVrf::DtVrfGuiSimObjectManager::mySimObjectsByUUID
protected
IdsByUUID makVrf::DtVrfGuiSimObjectManager::myIdsByUUID
protected
std::map<DtUUID, DtUUID> makVrf::DtVrfGuiSimObjectManager::myUUIDChanged
protected
tbb::spin_rw_mutex makVrf::DtVrfGuiSimObjectManager::myUUIDChangedMutex
protected
tbb::spin_mutex makVrf::DtVrfGuiSimObjectManager::myAdvanceFrameMutex
protected
makVrv::DtCoordinateSystem* makVrf::DtVrfGuiSimObjectManager::myCoordinateSystem = nullptr
protected
bool makVrf::DtVrfGuiSimObjectManager::myClearing = false
protected

The documentation for this class was generated from the following file:

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)