Back

Node

sofa::simulation::Node
BaseNode, Context
Doc (from source)

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>

Abstract (AI generated)

Manages hierarchical components in the SOFA simulation scene graph, supporting object containment, event propagation, and efficient traversal algorithms.

Metadata
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 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.
  • Removing a Component: Similarly, the removeObject method 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."
}