OMK::Iii::JointInteractorExtension Class Reference
[Joints]

The interactor extension associated to the joint extension. More...

Inheritance diagram for OMK::Iii::JointInteractorExtension:

Inheritance graph
[legend]
Collaboration diagram for OMK::Iii::JointInteractorExtension:

Collaboration graph
[legend]
List of all members.

Protected Member Functions

virtual bool loadObjectParameters (const ConfigurationParameterDescriptor *node)
 Load the connection.
virtual bool loadExtensionParameters (const ConfigurationParameterDescriptor *node)
 This method initialises the interactor.
virtual void postComputeParameters ()
 Calculates the new position of the reference object.
void startRetroPropagation ()
void stopRetroPropagation ()

Protected Attributes

Name _referenceId
Name _positionId
bool _connected
JointExtension_jointExtension

Friends

class JointExtension

Detailed Description

The interactor extension associated to the joint extension.

Date:
2007-06-20
Author:
Benoît Chanclou
Module description :
This class is only available associated to the joint extension and cannot be registered and created dynamically.

Definition at line 46 of file OMKJointExtension.cpp.


Constructor & Destructor Documentation

OMK::Iii::JointInteractorExtension::~JointInteractorExtension (  )  [virtual]

Destructor of InteractorObject.

Definition at line 80 of file OMKJointExtension.cpp.

00081 {
00082 }

OMK::Iii::JointInteractorExtension::JointInteractorExtension ( JointExtension jointExtension  )  [protected]

Protected constructor of InteractorObject call by derivate classes.

Definition at line 72 of file OMKJointExtension.cpp.

References OMK::Iii::InteractorExtension::_access, and OMK::Type::AccessGroup::_level.

00073 : InteractorExtension( jointExtension->_owner, std::string( jointExtension->_id.getCString() ) + "Interactor", false ),
00074   _connected( false ),
00075   _jointExtension( jointExtension ) 
00076 {
00077   _access._level = 0 ;
00078 }

OMK::Iii::JointInteractorExtension::~JointInteractorExtension (  )  [virtual]

Destructor of InteractorObject.

Definition at line 80 of file OMKJointExtension.cpp.

00081 {
00082 }

OMK::Iii::JointInteractorExtension::JointInteractorExtension ( JointExtension jointExtension  )  [protected]

Protected constructor of InteractorObject call by derivate classes.

Definition at line 72 of file OMKJointExtension.cpp.

References OMK::Iii::InteractorExtension::_access, and OMK::Type::AccessGroup::_level.

00073 : InteractorExtension( jointExtension->_owner, std::string( jointExtension->_id.getCString() ) + "Interactor", false ),
00074   _connected( false ),
00075   _jointExtension( jointExtension ) 
00076 {
00077   _access._level = 0 ;
00078 }


Member Function Documentation

bool OMK::Iii::JointInteractorExtension::loadObjectParameters ( const ConfigurationParameterDescriptor node  )  [protected, virtual]

Load the connection.

Reimplemented from OMK::Extension.

Definition at line 84 of file OMKJointExtension.cpp.

References OMK::ExtensionT< SimulatedObjectType >::_owner, _positionId, _referenceId, and OMK::ParametersAccessor::get().

Referenced by OMK::Iii::JointExtension::loadObjectParameters().

00085 {
00086   bool ok = true ;
00087 
00088   std::pair< Name, Name > connection ;
00089   ok = ok && ParametersAccessor::get( node, "refPositionConnect", connection, _owner ) ;
00090   if( ok )
00091   {
00092     _referenceId = connection.first ;
00093     _positionId = connection.second ;
00094   }
00095 
00096   return ok  ;
00097 }

bool OMK::Iii::JointInteractorExtension::loadExtensionParameters ( const ConfigurationParameterDescriptor node  )  [protected, virtual]

This method initialises the interactor.

Load the parameters to create the interactor outputs.

Reimplemented from OMK::Iii::InteractorExtension.

Definition at line 99 of file OMKJointExtension.cpp.

References OMK::Iii::InteractorExtension::_access, _jointExtension, OMK::Type::AccessGroup::_level, OMK::ExtensionT< SimulatedObjectType >::_owner, _positionId, _referenceId, OMK::Iii::JointExtension::_referencePosition, OMK::Iii::InteractorOutput::create(), OMK::debugMsg(), OMK::ParametersAccessor::get(), OMK::Name::getCString(), OMK::IAttribute::getId(), OMK::ConfigurationParameterDescriptor::getNumberOfSubItems(), OMK::ConfigurationParameterDescriptor::getSubDescriptorByName(), OMK::ConfigurationParameterDescriptor::getSubDescriptorByPosition(), OMK_DEBUG_III, OMTRACEID, and OMK::Iii::InteractorExtension::startInteractor().

Referenced by OMK::Iii::JointExtension::loadExtensionParameters().

00100 {
00101   ParametersAccessor::get( node, "Level", _access._level ); 
00102   OMTRACEID( OMK_DEBUG_III, "The interactor " <<  OMK::debugMsg( this, _owner ) << " has the level " << _access._level ) ;
00103   startInteractor() ;
00104   
00105   // Try to read the category in the configuration of the reference object
00106   bool found  = false ; // flag to know if the search is ok
00107   std::string category( "absolute" ) ; // The default value
00108   // 1/ Search in the current configuration the category
00109   if( ParametersAccessor::get( node, "Category", category ) )
00110   {
00111     OMTRACEID( OMK_DEBUG_III, "The category for the reference is \"" << category << "\" and it " << ( found ? "was found in configuration" : "is the default value" ) ) ;
00112   }
00113   else
00114   {
00115     // 2/ search the extensions configuration of the reference object
00116     const ConfigurationParameterDescriptor *extNodeForRef = _owner->getController().getObjectDescriptorOfObject( _referenceId ).getExtensionsParameters() ;
00117     int nbItems = extNodeForRef ? extNodeForRef->getNumberOfSubItems() : 0 ;
00118     for( int i = 0 ; i < nbItems && !found ; ++i )
00119     { 
00120       // Retrieves configuration for each extension
00121       const ConfigurationParameterDescriptor * extNode = extNodeForRef->getSubDescriptorByPosition( i ) ;
00122       // Try to found "Connectors" in it
00123       const ConfigurationParameterDescriptor * connectorsNode = extNode->getSubDescriptorByName( "Connectors" ) ;
00124       // Try to found the connector with the same id than the output which is the reference for the joint
00125       const ConfigurationParameterDescriptor * connectorNode = connectorsNode ? connectorsNode->getSubDescriptorByName( _positionId.getCString() ) : 0 ;
00126       if( connectorNode )
00127       { // Ok, so try to read the "Category" field
00128         ParametersAccessor::get( connectorNode, "Category", category ) ;
00129         found = true ;
00130         break ;
00131       }
00132       else
00133       { // Not ok, no connectors has this id
00134         int nbItems2 = connectorsNode ? connectorsNode->getNumberOfSubItems() : 0 ;
00135         for( int j = 0 ; j < nbItems2 ; ++j )
00136         { // Look for connector which has the "Attribute" field equals to the id
00137           std::string id ;
00138           const ConfigurationParameterDescriptor * connectorNode = connectorsNode->getSubDescriptorByPosition( j ) ;
00139           if( ParametersAccessor::get( connectorNode, "Attribute", id ) && id == _positionId )
00140           { // The "Attribute" field is ok => try to read the "Category" field
00141             ParametersAccessor::get( connectorNode, "Category", category ) ;
00142             found = true ;
00143             break ;
00144           }
00145         }
00146       }
00147     }
00148     OMTRACEID( OMK_DEBUG_III, "The category for the reference is \"" << category << "\" and it " << ( found ? "was found in configuration" : "is the default value" ) ) ;
00149   }
00150     
00151   // Creates the interactor output
00152   InteractorOutput::create( _jointExtension->_referencePosition.getId(), _jointExtension->_referencePosition.getId(), this, category, OMK::Type::AccessGroupLevel(), false ) ;
00153 
00154   return true ;
00155 }

void OMK::Iii::JointInteractorExtension::postComputeParameters (  )  [protected, virtual]

Calculates the new position of the reference object.

Reimplemented from OMK::Extension.

Definition at line 157 of file OMKJointExtension.cpp.

00158 {
00159 }

void OMK::Iii::JointInteractorExtension::startRetroPropagation (  )  [protected]

Definition at line 161 of file OMKJointExtension.cpp.

References _connected, _jointExtension, _referenceId, OMK::Iii::JointExtension::_referencePosition, OMK::Iii::controlTakeOverAndGetCurrentValues(), OMK::IAttribute::getId(), OMK::Iii::InteractorExtension::getSessionWith(), OMMESSAGE, and OMK::Iii::InteractorExtension::startSessionWith().

00162 {
00163   if( !getSessionWith( _referenceId ) )
00164   {
00165     startSessionWith( _referenceId ) ;
00166     OMMESSAGE( "start session" ) ;
00167   }
00168   else if( !_connected )
00169   {
00170     (*getSessionWith( _referenceId )).c( _jointExtension->_referencePosition.getId() ).c( OMK::Iii::controlTakeOverAndGetCurrentValues ) ;
00171     _connected = true ;
00172     OMMESSAGE( "start retro propagation" ) ;
00173   }
00174 }

void OMK::Iii::JointInteractorExtension::stopRetroPropagation (  )  [protected]

Definition at line 176 of file OMKJointExtension.cpp.

References _connected, _jointExtension, _referenceId, OMK::Iii::JointExtension::_referencePosition, OMK::Iii::controlRelease(), OMK::IAttribute::getId(), OMK::Iii::InteractorExtension::getSessionWith(), and OMMESSAGE.

Referenced by OMK::Iii::JointExtension::postComputeParameters().

00177 {
00178   if( _connected ) 
00179   {
00180     (*getSessionWith( _referenceId )).c( _jointExtension->_referencePosition.getId() ).c( OMK::Iii::controlRelease ) ;
00181     _connected = false ;
00182     OMMESSAGE( "stop retro propagation" ) ;
00183   }
00184 }


Friends And Related Function Documentation

friend class JointExtension [friend]

Definition at line 48 of file OMKJointExtension.cpp.


Member Data Documentation

Name OMK::Iii::JointInteractorExtension::_referenceId [protected]

Definition at line 65 of file OMKJointExtension.cpp.

Referenced by loadExtensionParameters(), loadObjectParameters(), startRetroPropagation(), and stopRetroPropagation().

Name OMK::Iii::JointInteractorExtension::_positionId [protected]

Definition at line 66 of file OMKJointExtension.cpp.

Referenced by loadExtensionParameters(), and loadObjectParameters().

bool OMK::Iii::JointInteractorExtension::_connected [protected]

Definition at line 67 of file OMKJointExtension.cpp.

Referenced by startRetroPropagation(), and stopRetroPropagation().

JointExtension* OMK::Iii::JointInteractorExtension::_jointExtension [protected]

Definition at line 68 of file OMKJointExtension.cpp.

Referenced by loadExtensionParameters(), startRetroPropagation(), and stopRetroPropagation().


logo OpenMask

Documentation generated on Mon Jun 9 11:46:04 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007