Node
Implements the object (component) management of the core::Context. Contains objects in lists and provides accessors. The other nodes are not visible (unknown scene graph). @author The SOFA team </www.sofa-framework.org>
Manages hierarchical components in the SOFA simulation scene graph, supporting object containment, event propagation, and efficient traversal algorithms.
- module
- Sofa.framework.Simulation.Core
- namespace
- sofa::simulation
- include
- sofa/simulation/Node.h
- inherits
-
- BaseNode
- Context
- description
Mathematical and Physical Description of the Node Component in Sofa
Overview
The Node class in the Sofa framework is a fundamental element used to organize and manage hierarchical components within a simulation scene. A Node can contain other Nodes (child nodes), forming a tree-like structure that represents the hierarchy of elements in the simulation.
Nodes are central for managing various aspects such as object containment, component organization, event propagation, and traversal algorithms necessary for efficient simulation execution.
Hierarchical Structure
A Node forms part of a hierarchical scene graph. The hierarchical nature allows components (such as force fields, mappings, constraints) to be organized in a structured manner within the Node or its child nodes. This hierarchy is crucial for organizing complex simulations and provides an intuitive way to manage the simulation elements.
Hierarchical Components
- BehaviorModel: Manages behaviors such as mechanical properties of objects.
- ForceField: Contains components that apply forces on objects, like gravity, spring force, etc.
- Mappings: Used for transferring properties or data between different objects in the scene graph.
- Constraints: Define conditions or restrictions applied to objects.
Traversal Mechanisms
Nodes support various types of traversal methods:
- Top-down Traversal: Processes nodes from the root down through all child nodes recursively.
- Bottom-up Traversal: Processes nodes starting from leaves and moving up towards the root node.
- Tree Traversal: Custom tree-traversal logic for visiting nodes in a predefined order, which is useful for simulation algorithms that need to process components in a specific sequence.
Precomputed Traversals
Traversal orders can be precomputed, allowing optimization by storing traversal sequences. This is particularly beneficial when the scene graph structure remains relatively stable and the same traversal order is reused across multiple simulation steps.
Context Management
Nodes manage context information that propagates down through the hierarchy. Contexts store state data (like gravity, time step) which are updated during initialization or runtime to reflect changes in the simulation parameters.
Initialization of Contexts
- initVisualContext(): Called during initialization to propagate visual contexts from parents to children nodes.
- setDefaultVisualContextValue(): Sets default values for visual context after initialization.
Component Management
Nodes maintain sequences (lists) of various components, ensuring that each component type is processed in the correct order. This is achieved through methods like addBehaviorModel, addForceField, etc., which add specific types to their respective lists.
Adding and Removing Components
- Adding a Component: The
addObjectmethod adds objects (components) into the Node's component sequences, such as behavior models or force fields. This helps in organizing components into meaningful groups for simulation execution. - Removing a Component: Similarly, the
removeObjectmethod removes an object from its sequence within the Node.
Event Notification Mechanisms
Nodes have event notification mechanisms to handle changes:
- Notification Methods: Methods like notifyBeginAddChild, notifyEndRemoveObject are used to notify about events such as adding or removing children nodes and objects. This enables customization of behavior in response to these changes within the scene graph.
Debugging Capabilities
The Node class supports debug mode, allowing for enhanced diagnostics during simulation setup:
- Debug Mode: The setDebug method can be used to enable debugging information outputting useful messages or warnings related to node operations and configurations.
Customization Hooks
Users or developers have the flexibility to override methods like adding components directly into specific sequences (BehaviorModel, Mappings) for customization of simulation behavior based on their needs. This extensibility ensures that the Node class can adapt to various use cases within the Sofa framework.
Methods
void
parse
(sofa::core::objectmodel::BaseObjectDescription * arg)
virtual
void
init
(const sofa::core::ExecParams * params)
bool
isInitialized
()
void
reinit
(const sofa::core::ExecParams * params)
void
draw
(sofa::core::visual::VisualParams * params)
void
executeVisitor
(Visitor * action, bool precomputedOrder)
virtual
void
execute
(Visitor & action, bool precomputedOrder)
void
execute
(Visitor * p, bool precomputedOrder)
void
execute
(const Params * params, bool precomputedOrder)
void
execute
(sofa::core::visual::VisualParams * vparams, bool precomputedOrder)
void
precomputeTraversalOrder
(const sofa::core::ExecParams * )
void
addChild
(int node)
virtual
void
removeChild
(int node)
virtual
void
moveChild
(int node, int prev_parent)
virtual
bool
addObject
(int obj, sofa::core::objectmodel::TypeOfInsertion insertionLocation)
virtual
bool
removeObject
(int obj)
virtual
void
moveObject
(int obj)
virtual
sofa::core::objectmodel::BaseObject *
getObject
(const int & name)
Base *
findLinkDestClass
(const sofa::core::objectmodel::BaseClass * destType, const int & path, const sofa::core::objectmodel::BaseLink * link)
void *
getObject
(const sofa::core::objectmodel::ClassInfo & class_info, SearchDirection dir)
virtual
void
getObjects
(const sofa::core::objectmodel::ClassInfo & class_info, GetObjectsCallBack & container, SearchDirection dir)
virtual
void
getLocalObjects
(const sofa::core::objectmodel::ClassInfo & class_info, Node::GetObjectsCallBack & container, const sofa::core::objectmodel::TagSet & tags)
void
getNodeObjects
(Container * list)
Container &
getNodeObjects
(Container & result)
int
getNodeObjects
()
void
getNodeObject
(Object *& result)
Object *
getNodeObject
()
void
getTreeObjects
(Container * list)
Container &
getTreeObjects
(Container & result)
int
getTreeObjects
()
void
getTreeObject
(Object *& result)
Object *
getTreeObject
()
sofa::core::topology::Topology *
getTopology
()
virtual
sofa::core::BaseState *
getState
()
virtual
sofa::core::behavior::BaseMechanicalState *
getMechanicalState
()
virtual
sofa::core::visual::Shader *
getShader
()
virtual
sofa::core::visual::Shader *
getShader
(const sofa::core::objectmodel::TagSet & t)
virtual
sofa::core::behavior::BaseAnimationLoop *
getAnimationLoop
()
virtual
sofa::core::behavior::OdeSolver *
getOdeSolver
()
virtual
sofa::core::collision::Pipeline *
getCollisionPipeline
()
virtual
sofa::core::visual::VisualLoop *
getVisualLoop
()
virtual
void
removeControllers
()
virtual
Node *
getChild
(const int & name)
Node *
getTreeNode
(const int & name)
Node *
getNodeInGraph
(const int & absolutePath)
Children
getChildren
()
virtual
BaseContext *
getRootContext
()
virtual
Node *
setDebug
(bool )
bool
getDebug
()
void
printComponents
()
const BaseContext *
getContext
()
virtual
void
updateContext
()
virtual
void
updateSimulationContext
()
virtual
void
initVisualContext
()
virtual
void
propagateEvent
(const sofa::core::ExecParams * params, sofa::core::objectmodel::Event * event)
virtual
void
updateVisualContext
()
virtual
void
initialize
()
virtual
void
setDefaultVisualContextValue
()
virtual
void
setSleeping
(bool val)
virtual
void
addListener
(MutationListener * obj)
virtual
void
removeListener
(MutationListener * obj)
virtual
const int
GetCustomClassName
()
int
createChild
(const int & nodeName)
void
detachFromGraph
()
virtual
Parents
getParents
()
virtual
int
getNbParents
()
BaseNode *
getFirstParent
()
virtual
bool
hasParent
(const BaseNode * node)
virtual
bool
hasParent
(const BaseContext * context)
bool
hasAncestor
(const BaseNode * node)
virtual
bool
hasAncestor
(const BaseContext * context)
virtual
void *
getObject
(const sofa::core::objectmodel::ClassInfo & class_info, const sofa::core::objectmodel::TagSet & tags, SearchDirection dir)
virtual
void *
getObject
(const sofa::core::objectmodel::ClassInfo & class_info, const int & path)
void
getObjects
(const sofa::core::objectmodel::ClassInfo & class_info, GetObjectsCallBack & container, const sofa::core::objectmodel::TagSet & tags, SearchDirection dir)
virtual
sofa::core::topology::BaseMeshTopology *
getMeshTopologyLink
(SearchDirection dir)
virtual
void
moveChild
(int node)
Node *
findCommonParent
(simulation::Node * node2)
bool
doAddObject
(int obj, sofa::core::objectmodel::TypeOfInsertion insertionLocation)
virtual
bool
doRemoveObject
(int obj)
virtual
void
doMoveObject
(int sobj, Node * prev_parent)
virtual
void
addAnimationLoop
(sofa::core::behavior::BaseAnimationLoop * obj)
virtual
void
removeAnimationLoop
(sofa::core::behavior::BaseAnimationLoop * obj)
virtual
void
addVisualLoop
(sofa::core::visual::VisualLoop * obj)
virtual
void
removeVisualLoop
(sofa::core::visual::VisualLoop * obj)
virtual
void
addBehaviorModel
(sofa::core::BehaviorModel * obj)
virtual
void
removeBehaviorModel
(sofa::core::BehaviorModel * obj)
virtual
void
addMapping
(sofa::core::BaseMapping * obj)
virtual
void
removeMapping
(sofa::core::BaseMapping * obj)
virtual
void
addOdeSolver
(sofa::core::behavior::OdeSolver * obj)
virtual
void
removeOdeSolver
(sofa::core::behavior::OdeSolver * obj)
virtual
void
addConstraintSolver
(sofa::core::behavior::ConstraintSolver * obj)
virtual
void
removeConstraintSolver
(sofa::core::behavior::ConstraintSolver * obj)
virtual
void
addLinearSolver
(sofa::core::behavior::BaseLinearSolver * obj)
virtual
void
removeLinearSolver
(sofa::core::behavior::BaseLinearSolver * obj)
virtual
void
addTopology
(sofa::core::topology::Topology * obj)
virtual
void
removeTopology
(sofa::core::topology::Topology * obj)
virtual
void
addMeshTopology
(sofa::core::topology::BaseMeshTopology * obj)
virtual
void
removeMeshTopology
(sofa::core::topology::BaseMeshTopology * obj)
virtual
void
addTopologyObject
(sofa::core::topology::BaseTopologyObject * obj)
virtual
void
removeTopologyObject
(sofa::core::topology::BaseTopologyObject * obj)
virtual
void
addState
(sofa::core::BaseState * obj)
virtual
void
removeState
(sofa::core::BaseState * obj)
virtual
void
addMechanicalState
(sofa::core::behavior::BaseMechanicalState * obj)
virtual
void
removeMechanicalState
(sofa::core::behavior::BaseMechanicalState * obj)
virtual
void
addMechanicalMapping
(sofa::core::BaseMapping * obj)
virtual
void
removeMechanicalMapping
(sofa::core::BaseMapping * obj)
virtual
void
addMass
(sofa::core::behavior::BaseMass * obj)
virtual
void
removeMass
(sofa::core::behavior::BaseMass * obj)
virtual
void
addForceField
(sofa::core::behavior::BaseForceField * obj)
virtual
void
removeForceField
(sofa::core::behavior::BaseForceField * obj)
virtual
void
addInteractionForceField
(sofa::core::behavior::BaseInteractionForceField * obj)
virtual
void
removeInteractionForceField
(sofa::core::behavior::BaseInteractionForceField * obj)
virtual
void
addProjectiveConstraintSet
(sofa::core::behavior::BaseProjectiveConstraintSet * obj)
virtual
void
removeProjectiveConstraintSet
(sofa::core::behavior::BaseProjectiveConstraintSet * obj)
virtual
void
addConstraintSet
(sofa::core::behavior::BaseConstraintSet * obj)
virtual
void
removeConstraintSet
(sofa::core::behavior::BaseConstraintSet * obj)
virtual
void
addContextObject
(sofa::core::objectmodel::ContextObject * obj)
virtual
void
removeContextObject
(sofa::core::objectmodel::ContextObject * obj)
virtual
void
addConfigurationSetting
(sofa::core::objectmodel::ConfigurationSetting * obj)
virtual
void
removeConfigurationSetting
(sofa::core::objectmodel::ConfigurationSetting * obj)
virtual
void
addShader
(sofa::core::visual::Shader * obj)
virtual
void
removeShader
(sofa::core::visual::Shader * obj)
virtual
void
addVisualModel
(sofa::core::visual::VisualModel * obj)
virtual
void
removeVisualModel
(sofa::core::visual::VisualModel * obj)
virtual
void
addVisualStyle
(sofa::core::visual::BaseVisualStyle * obj)
virtual
void
removeVisualStyle
(sofa::core::visual::BaseVisualStyle * obj)
virtual
void
addVisualManager
(sofa::core::visual::VisualManager * obj)
virtual
void
removeVisualManager
(sofa::core::visual::VisualManager * obj)
virtual
void
addCollisionModel
(sofa::core::CollisionModel * obj)
virtual
void
removeCollisionModel
(sofa::core::CollisionModel * obj)
virtual
void
addCollisionPipeline
(sofa::core::collision::Pipeline * obj)
virtual
void
removeCollisionPipeline
(sofa::core::collision::Pipeline * obj)
virtual
{
"name": "Node",
"namespace": "sofa::simulation",
"module": "Sofa.framework.Simulation.Core",
"include": "sofa/simulation/Node.h",
"doc": "Implements the object (component) management of the core::Context.\n Contains objects in lists and provides accessors.\n The other nodes are not visible (unknown scene graph).\n @author The SOFA team </www.sofa-framework.org>",
"inherits": [
"BaseNode",
"Context"
],
"templates": [],
"data_fields": [],
"links": [],
"methods": [
{
"name": "parse",
"return_type": "void",
"params": [
{
"name": "arg",
"type": "sofa::core::objectmodel::BaseObjectDescription *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "init",
"return_type": "void",
"params": [
{
"name": "params",
"type": "const sofa::core::ExecParams *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "isInitialized",
"return_type": "bool",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "reinit",
"return_type": "void",
"params": [
{
"name": "params",
"type": "const sofa::core::ExecParams *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "draw",
"return_type": "void",
"params": [
{
"name": "params",
"type": "sofa::core::visual::VisualParams *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "executeVisitor",
"return_type": "void",
"params": [
{
"name": "action",
"type": "Visitor *"
},
{
"name": "precomputedOrder",
"type": "bool"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "execute",
"return_type": "void",
"params": [
{
"name": "action",
"type": "Visitor &"
},
{
"name": "precomputedOrder",
"type": "bool"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "execute",
"return_type": "void",
"params": [
{
"name": "p",
"type": "Visitor *"
},
{
"name": "precomputedOrder",
"type": "bool"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "execute",
"return_type": "void",
"params": [
{
"name": "params",
"type": "const Params *"
},
{
"name": "precomputedOrder",
"type": "bool"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "execute",
"return_type": "void",
"params": [
{
"name": "vparams",
"type": "sofa::core::visual::VisualParams *"
},
{
"name": "precomputedOrder",
"type": "bool"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "precomputeTraversalOrder",
"return_type": "void",
"params": [
{
"name": "",
"type": "const sofa::core::ExecParams *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "addChild",
"return_type": "void",
"params": [
{
"name": "node",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "removeChild",
"return_type": "void",
"params": [
{
"name": "node",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "moveChild",
"return_type": "void",
"params": [
{
"name": "node",
"type": "int"
},
{
"name": "prev_parent",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "addObject",
"return_type": "bool",
"params": [
{
"name": "obj",
"type": "int"
},
{
"name": "insertionLocation",
"type": "sofa::core::objectmodel::TypeOfInsertion"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "removeObject",
"return_type": "bool",
"params": [
{
"name": "obj",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "moveObject",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObject",
"return_type": "sofa::core::objectmodel::BaseObject *",
"params": [
{
"name": "name",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "findLinkDestClass",
"return_type": "Base *",
"params": [
{
"name": "destType",
"type": "const sofa::core::objectmodel::BaseClass *"
},
{
"name": "path",
"type": "const int &"
},
{
"name": "link",
"type": "const sofa::core::objectmodel::BaseLink *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObject",
"return_type": "void *",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "dir",
"type": "SearchDirection"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObjects",
"return_type": "void",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "container",
"type": "GetObjectsCallBack &"
},
{
"name": "dir",
"type": "SearchDirection"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getLocalObjects",
"return_type": "void",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "container",
"type": "Node::GetObjectsCallBack &"
},
{
"name": "tags",
"type": "const sofa::core::objectmodel::TagSet &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeObjects",
"return_type": "void",
"params": [
{
"name": "list",
"type": "Container *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeObjects",
"return_type": "Container &",
"params": [
{
"name": "result",
"type": "Container &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeObjects",
"return_type": "int",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeObject",
"return_type": "void",
"params": [
{
"name": "result",
"type": "Object *&"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeObject",
"return_type": "Object *",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeObjects",
"return_type": "void",
"params": [
{
"name": "list",
"type": "Container *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeObjects",
"return_type": "Container &",
"params": [
{
"name": "result",
"type": "Container &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeObjects",
"return_type": "int",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeObject",
"return_type": "void",
"params": [
{
"name": "result",
"type": "Object *&"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeObject",
"return_type": "Object *",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTopology",
"return_type": "sofa::core::topology::Topology *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getState",
"return_type": "sofa::core::BaseState *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getMechanicalState",
"return_type": "sofa::core::behavior::BaseMechanicalState *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getShader",
"return_type": "sofa::core::visual::Shader *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getShader",
"return_type": "sofa::core::visual::Shader *",
"params": [
{
"name": "t",
"type": "const sofa::core::objectmodel::TagSet &"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getAnimationLoop",
"return_type": "sofa::core::behavior::BaseAnimationLoop *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getOdeSolver",
"return_type": "sofa::core::behavior::OdeSolver *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getCollisionPipeline",
"return_type": "sofa::core::collision::Pipeline *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getVisualLoop",
"return_type": "sofa::core::visual::VisualLoop *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "removeControllers",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getChild",
"return_type": "Node *",
"params": [
{
"name": "name",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getTreeNode",
"return_type": "Node *",
"params": [
{
"name": "name",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNodeInGraph",
"return_type": "Node *",
"params": [
{
"name": "absolutePath",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getChildren",
"return_type": "Children",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getRootContext",
"return_type": "BaseContext *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "setDebug",
"return_type": "Node *",
"params": [
{
"name": "",
"type": "bool"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getDebug",
"return_type": "bool",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "printComponents",
"return_type": "void",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getContext",
"return_type": "const BaseContext *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "updateContext",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "updateSimulationContext",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "initVisualContext",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "propagateEvent",
"return_type": "void",
"params": [
{
"name": "params",
"type": "const sofa::core::ExecParams *"
},
{
"name": "event",
"type": "sofa::core::objectmodel::Event *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "updateVisualContext",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "initialize",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "setDefaultVisualContextValue",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "setSleeping",
"return_type": "void",
"params": [
{
"name": "val",
"type": "bool"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "addListener",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "MutationListener *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "removeListener",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "MutationListener *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "GetCustomClassName",
"return_type": "const int",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": true,
"access": "public"
},
{
"name": "createChild",
"return_type": "int",
"params": [
{
"name": "nodeName",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "detachFromGraph",
"return_type": "void",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getParents",
"return_type": "Parents",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getNbParents",
"return_type": "int",
"params": [],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getFirstParent",
"return_type": "BaseNode *",
"params": [],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "hasParent",
"return_type": "bool",
"params": [
{
"name": "node",
"type": "const BaseNode *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "hasParent",
"return_type": "bool",
"params": [
{
"name": "context",
"type": "const BaseContext *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "hasAncestor",
"return_type": "bool",
"params": [
{
"name": "node",
"type": "const BaseNode *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "hasAncestor",
"return_type": "bool",
"params": [
{
"name": "context",
"type": "const BaseContext *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObject",
"return_type": "void *",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "tags",
"type": "const sofa::core::objectmodel::TagSet &"
},
{
"name": "dir",
"type": "SearchDirection"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObject",
"return_type": "void *",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "path",
"type": "const int &"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getObjects",
"return_type": "void",
"params": [
{
"name": "class_info",
"type": "const sofa::core::objectmodel::ClassInfo &"
},
{
"name": "container",
"type": "GetObjectsCallBack &"
},
{
"name": "tags",
"type": "const sofa::core::objectmodel::TagSet &"
},
{
"name": "dir",
"type": "SearchDirection"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "getMeshTopologyLink",
"return_type": "sofa::core::topology::BaseMeshTopology *",
"params": [
{
"name": "dir",
"type": "SearchDirection"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "moveChild",
"return_type": "void",
"params": [
{
"name": "node",
"type": "int"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "findCommonParent",
"return_type": "Node *",
"params": [
{
"name": "node2",
"type": "simulation::Node *"
}
],
"is_virtual": false,
"is_pure_virtual": false,
"is_static": false,
"access": "public"
},
{
"name": "doAddObject",
"return_type": "bool",
"params": [
{
"name": "obj",
"type": "int"
},
{
"name": "insertionLocation",
"type": "sofa::core::objectmodel::TypeOfInsertion"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "doRemoveObject",
"return_type": "bool",
"params": [
{
"name": "obj",
"type": "int"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "doMoveObject",
"return_type": "void",
"params": [
{
"name": "sobj",
"type": "int"
},
{
"name": "prev_parent",
"type": "Node *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addAnimationLoop",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseAnimationLoop *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeAnimationLoop",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseAnimationLoop *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addVisualLoop",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualLoop *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeVisualLoop",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualLoop *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addBehaviorModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BehaviorModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeBehaviorModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BehaviorModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addMapping",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseMapping *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeMapping",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseMapping *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addOdeSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::OdeSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeOdeSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::OdeSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addConstraintSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::ConstraintSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeConstraintSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::ConstraintSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addLinearSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseLinearSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeLinearSolver",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseLinearSolver *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addTopology",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::Topology *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeTopology",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::Topology *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addMeshTopology",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::BaseMeshTopology *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeMeshTopology",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::BaseMeshTopology *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addTopologyObject",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::BaseTopologyObject *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeTopologyObject",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::topology::BaseTopologyObject *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addState",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseState *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeState",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseState *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addMechanicalState",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseMechanicalState *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeMechanicalState",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseMechanicalState *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addMechanicalMapping",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseMapping *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeMechanicalMapping",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::BaseMapping *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addMass",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseMass *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeMass",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseMass *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addForceField",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseForceField *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeForceField",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseForceField *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addInteractionForceField",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseInteractionForceField *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeInteractionForceField",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseInteractionForceField *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addProjectiveConstraintSet",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseProjectiveConstraintSet *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeProjectiveConstraintSet",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseProjectiveConstraintSet *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addConstraintSet",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseConstraintSet *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeConstraintSet",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::behavior::BaseConstraintSet *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addContextObject",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::objectmodel::ContextObject *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeContextObject",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::objectmodel::ContextObject *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addConfigurationSetting",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::objectmodel::ConfigurationSetting *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeConfigurationSetting",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::objectmodel::ConfigurationSetting *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addShader",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::Shader *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeShader",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::Shader *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addVisualModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeVisualModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addVisualStyle",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::BaseVisualStyle *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeVisualStyle",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::BaseVisualStyle *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addVisualManager",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualManager *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeVisualManager",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::visual::VisualManager *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addCollisionModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::CollisionModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeCollisionModel",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::CollisionModel *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "addCollisionPipeline",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::collision::Pipeline *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
},
{
"name": "removeCollisionPipeline",
"return_type": "void",
"params": [
{
"name": "obj",
"type": "sofa::core::collision::Pipeline *"
}
],
"is_virtual": true,
"is_pure_virtual": false,
"is_static": false,
"access": "protected"
}
],
"description": "The Node class in SofaPython.Simulation represents a node in the scene graph of the Sofa simulation framework. It is derived from BaseNode, which itself inherits from MultiLink and TopologyListener classes. This indicates that each Node can have multiple parents (MultiLink inheritance) and it can listen to topology changes (TopologyListener inheritance).\n\nKey functionalities and attributes of the Node class include:\n\n1. **Hierarchical Structure**: Nodes form a hierarchical structure where each node can contain child nodes, creating a tree-like scene graph. This hierarchy is crucial for organizing simulation elements.\n\n2. **Component Management**: A Node can hold various components such as force fields, behaviors, mappings, constraints, solvers, and topologies which define how the simulation behaves physically. The class provides methods to add or remove these components into specific sequences (BehaviorModel sequence, ForceField sequence, etc.), ensuring they are processed in a defined order.\n\n3. **Traversal**: The Node supports different types of traversal such as bottom-up, top-down, and tree traversal for executing actions over the entire scene graph. These traversals can be customized with precomputed orders, enabling efficient simulation processes.\n\n4. **Event Notification**: Events related to the addition or removal of children nodes or objects are handled through virtual methods like `notifyBeginAddChild`, `notifyEndRemoveObject`. This enables custom behaviors in response to changes within the scene graph.\n\n5. **Debugging and Initialization**: The Node supports a debug mode, and it can be initialized with specific contexts. Methods such as `initializeContexts` and `setDebugMode` facilitate this initialization and debugging process.\n\n6. **Customization Hooks**: Users or developers can override methods for adding special components directly into the right sequence (like behaviors, mappings) to customize simulation behavior according to their needs.\n\nOverall, Node is a fundamental element in setting up simulations within Sofa, providing both structural organization through its hierarchical nature and functional flexibility via component management and traversal mechanisms.",
"summary": "The Node class represents nodes in Sofa's scene graph, managing hierarchy, components like force fields and behaviors, enabling various traversals for simulation processes, supporting customization hooks, and offering debugging features.",
"maths": "# Mathematical and Physical Description of the Node Component in Sofa\n\n## Overview\nThe **Node** class in the **Sofa framework** is a fundamental element used to organize and manage hierarchical components within a simulation scene. A Node can contain other Nodes (child nodes), forming a tree-like structure that represents the hierarchy of elements in the simulation.\n\nNodes are central for managing various aspects such as object containment, component organization, event propagation, and traversal algorithms necessary for efficient simulation execution.\n\n## Hierarchical Structure\nA **Node** forms part of a hierarchical scene graph. The hierarchical nature allows components (such as force fields, mappings, constraints) to be organized in a structured manner within the Node or its child nodes. This hierarchy is crucial for organizing complex simulations and provides an intuitive way to manage the simulation elements.\n\n### Hierarchical Components\n- **BehaviorModel**: Manages behaviors such as mechanical properties of objects.\n- **ForceField**: Contains components that apply forces on objects, like gravity, spring force, etc.\n- **Mappings**: Used for transferring properties or data between different objects in the scene graph.\n- **Constraints**: Define conditions or restrictions applied to objects.\n\n## Traversal Mechanisms\nNodes support various types of traversal methods:\n- **Top-down Traversal**: Processes nodes from the root down through all child nodes recursively.\n- **Bottom-up Traversal**: Processes nodes starting from leaves and moving up towards the root node.\n- **Tree Traversal**: Custom tree-traversal logic for visiting nodes in a predefined order, which is useful for simulation algorithms that need to process components in a specific sequence.\n\n### Precomputed Traversals\nTraversal orders can be precomputed, allowing optimization by storing traversal sequences. This is particularly beneficial when the scene graph structure remains relatively stable and the same traversal order is reused across multiple simulation steps.\n\n## Context Management\nNodes manage context information that propagates down through the hierarchy. Contexts store state data (like gravity, time step) which are updated during initialization or runtime to reflect changes in the simulation parameters.\n\n### Initialization of Contexts\n- **initVisualContext()**: Called during initialization to propagate visual contexts from parents to children nodes.\n- **setDefaultVisualContextValue()**: Sets default values for visual context after initialization.\n\n## Component Management\nNodes maintain sequences (lists) of various components, ensuring that each component type is processed in the correct order. This is achieved through methods like `addBehaviorModel`, `addForceField`, etc., which add specific types to their respective lists.\n\n### Adding and Removing Components\n- **Adding a Component**: The `addObject` method adds objects (components) into the Node's component sequences, such as behavior models or force fields. This helps in organizing components into meaningful groups for simulation execution.\n- **Removing a Component**: Similarly, the `removeObject` method removes an object from its sequence within the Node.\n\n## Event Notification Mechanisms\nNodes have event notification mechanisms to handle changes:\n- **Notification Methods**: Methods like `notifyBeginAddChild`, `notifyEndRemoveObject` are used to notify about events such as adding or removing children nodes and objects. This enables customization of behavior in response to these changes within the scene graph.\n\n## Debugging Capabilities\nThe Node class supports debug mode, allowing for enhanced diagnostics during simulation setup:\n- **Debug Mode**: The `setDebug` method can be used to enable debugging information outputting useful messages or warnings related to node operations and configurations.\n\n### Customization Hooks\nUsers or developers have the flexibility to override methods like adding components directly into specific sequences (BehaviorModel, Mappings) for customization of simulation behavior based on their needs. This extensibility ensures that the Node class can adapt to various use cases within the Sofa framework.",
"abstract": "Manages hierarchical components in the SOFA simulation scene graph, supporting object containment, event propagation, and efficient traversal algorithms.",
"sheet": "# Node\n\n## Overview\nThe `Node` class is a fundamental element of the SOFA framework's scene graph architecture. It manages hierarchical components such as force fields, mappings, constraints, and behaviors, ensuring they are organized and processed efficiently during simulation.\n\n## Dependencies and Connections\nNodes form a tree-like structure where each node can contain child nodes and various simulation components (force fields, mappings, constraints). Nodes interact with other SOFA components through methods like `addObject`, `removeObject`, and traversal mechanisms (`executeVisitor`). The scene graph hierarchy is crucial for organizing complex simulations and managing event propagation."
}