Back

BarycentricMapperEdgeSetTopology

sofa::component::mapping::linear::BarycentricMapperEdgeSetTopology
BarycentricMapperTopologyContainer
Doc (from source)

Class allowing barycentric mapping computation on a BaseMeshTopology with edges

Abstract (AI generated)

Facilitates barycentric mapping computations on BaseMeshTopologies with edges, enabling precise point placement along line segments in SOFA simulations.

Metadata
module
Sofa.Component.Mapping.Linear
namespace
sofa::component::mapping::linear
include
sofa/component/mapping/linear/BarycentricMappers/BarycentricMapperEdgeSetTopology.h
inherits
  • BarycentricMapperTopologyContainer
templates
  • sofa::sofa::defaulttype::Vec3Types, sofa::sofa::defaulttype::Vec3Types
description
No maths data.
Methods
void init (const typename Out::VecCoord & out, const typename In::VecCoord & in)
int addPointInLine (const int edgeIndex, const SReal * baryCoords)
int createPointInLine (const typename Out::Coord & p, int edgeIndex, const typename In::VecCoord * points)
int getElements ()
int getBarycentricCoefficients (const int & barycentricCoordinates)
void computeBase (Mat3x3 & base, const typename In::VecCoord & in, const Edge & element)
void computeCenter (Vec3 & center, const typename In::VecCoord & in, const Edge & element)
void computeDistance (SReal & d, const Vec3 & v)
void addPointInElement (const int elementIndex, const SReal * baryCoords)
{
  "name": "BarycentricMapperEdgeSetTopology",
  "namespace": "sofa::component::mapping::linear",
  "module": "Sofa.Component.Mapping.Linear",
  "include": "sofa/component/mapping/linear/BarycentricMappers/BarycentricMapperEdgeSetTopology.h",
  "doc": "Class allowing barycentric mapping computation on a BaseMeshTopology with edges",
  "inherits": [
    "BarycentricMapperTopologyContainer"
  ],
  "templates": [
    "sofa::sofa::defaulttype::Vec3Types, sofa::sofa::defaulttype::Vec3Types"
  ],
  "data_fields": [],
  "links": [],
  "methods": [
    {
      "name": "init",
      "return_type": "void",
      "params": [
        {
          "name": "out",
          "type": "const typename Out::VecCoord &"
        },
        {
          "name": "in",
          "type": "const typename In::VecCoord &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "addPointInLine",
      "return_type": "int",
      "params": [
        {
          "name": "edgeIndex",
          "type": "const int"
        },
        {
          "name": "baryCoords",
          "type": "const SReal *"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "createPointInLine",
      "return_type": "int",
      "params": [
        {
          "name": "p",
          "type": "const typename Out::Coord &"
        },
        {
          "name": "edgeIndex",
          "type": "int"
        },
        {
          "name": "points",
          "type": "const typename In::VecCoord *"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "public"
    },
    {
      "name": "getElements",
      "return_type": "int",
      "params": [],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    },
    {
      "name": "getBarycentricCoefficients",
      "return_type": "int",
      "params": [
        {
          "name": "barycentricCoordinates",
          "type": "const int &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    },
    {
      "name": "computeBase",
      "return_type": "void",
      "params": [
        {
          "name": "base",
          "type": "Mat3x3 &"
        },
        {
          "name": "in",
          "type": "const typename In::VecCoord &"
        },
        {
          "name": "element",
          "type": "const Edge &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    },
    {
      "name": "computeCenter",
      "return_type": "void",
      "params": [
        {
          "name": "center",
          "type": "Vec3 &"
        },
        {
          "name": "in",
          "type": "const typename In::VecCoord &"
        },
        {
          "name": "element",
          "type": "const Edge &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    },
    {
      "name": "computeDistance",
      "return_type": "void",
      "params": [
        {
          "name": "d",
          "type": "SReal &"
        },
        {
          "name": "v",
          "type": "const Vec3 &"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    },
    {
      "name": "addPointInElement",
      "return_type": "void",
      "params": [
        {
          "name": "elementIndex",
          "type": "const int"
        },
        {
          "name": "baryCoords",
          "type": "const SReal *"
        }
      ],
      "is_virtual": false,
      "is_pure_virtual": false,
      "is_static": false,
      "access": "protected"
    }
  ],
  "description": "The `BarycentricMapperEdgeSetTopology` is a SOFA component that facilitates barycentric mapping computations on a BaseMeshTopology with edges, specifically designed for linear mappings in the Sofa.Component.Mapping.Linear module. It inherits from `BarycentricMapperTopologyContainer`, indicating it deals with topological data structures and provides methods to manage points within edges of the mesh topology.\n\nThis component interacts with other SOFA components through its initialization method (`init`), which requires input and output coordinates, and by extending methods for adding and creating points within line segments (edges) using barycentric coordinates. The `addPointInLine` and `createPointInLine` methods are crucial for this functionality.\n\nPractical usage involves setting up the component with appropriate topology containers (`fromTopology`, `toTopology`). It supports operations such as adding a point to an edge based on barycentric coordinates, computing the center of an edge, and retrieving elements in the form of edges. However, it's noted that some methods like `computeBase` and `computeDistance` are not implemented for edges.\n\nThis component is particularly useful in simulations requiring precise handling of point placements along edges using linear mappings.",
  "math_description": {
    "overview": "The `BarycentricMapperEdgeSetTopology` component facilitates barycentric mapping computations for points within the edges of a mesh topology in SOFA. It enables linear mappings by providing methods to manage these points using barycentric coordinates.",
    "functions_and_methods": [
      {
        "name": "`addPointInLine(const Index edgeIndex, const SReal* baryCoords)`",
        "description": "Adds a point on an edge defined by `edgeIndex` using the barycentric coordinate `baryCoords`. The barycentric coordinates are stored in a data structure and used to map points within the edge."
      },
      {
        "name": "`createPointInLine(const typename Out::Coord& p, Index edgeIndex, const typename In::VecCoord* points)`",
        "description": "Creates a point `p` on an edge defined by `edgeIndex`, where `points` are the coordinates of the vertices of the edge. It computes the barycentric coordinate for `p` and uses it to place the point along the edge."
      },
      {
        "name": "`getElements()`",
        "description": "Returns a vector of edges from the mesh topology, each represented as an index pair corresponding to its vertices."
      },
      {
        "name": "`getBarycentricCoefficients(const std::array<Real, MappingData::NumberOfCoordinates>& barycentricCoordinates)`",
        "description": "Computes and returns the barycentric coefficients for a given set of coordinates. For an edge with two nodes, this method computes the weights [1 - t, t], where `t` is the barycentric coordinate."
      },
      {
        "name": "`computeCenter(Vec3& center, const typename In::VecCoord& in, const Edge& element)`",
        "description": "Computes the center of an edge `element`, which is the midpoint between its two vertices. The coordinates of the vertices are provided by `in`."
      }
    ],
    "unimplemented_methods": [
      {
        "name": "`computeBase(Mat3x3& base, const typename In::VecCoord& in, const Edge& element)`",
        "description": "This method is not implemented for edges. It would be used to compute a basis transformation matrix if applicable."
      },
      {
        "name": "`computeDistance(SReal& d, const Vec3& v)`",
        "description": "This method is also not implemented for edges and would typically be used to calculate some distance metric or projection."
      }
    ]
  },
  "abstract": "Facilitates barycentric mapping computations on BaseMeshTopologies with edges, enabling precise point placement along line segments in SOFA simulations.",
  "sheet": "# BarycentricMapperEdgeSetTopology\n\n## Overview\nThe `BarycentricMapperEdgeSetTopology` is a component within the Sofa.Component.Mapping.Linear module that handles barycentric mapping computations on BaseMeshTopologies with edges. It inherits from `BarycentricMapperTopologyContainer`, indicating its role in managing points within line segments (edges) using barycentric coordinates.\n\n## Parameters and Data\nThis component does not expose any significant Data fields, as it primarily relies on inherited functionality from the parent class for its operations.\n\n## Dependencies and Connections\nThe `BarycentricMapperEdgeSetTopology` typically requires appropriate topology containers (`fromTopology`, `toTopology`) to be set up. It interacts with other SOFA components through methods such as `init`, which requires input and output coordinates, and extends methods for adding and creating points within line segments using barycentric coordinates.\n\n## Practical Notes\nThis component is particularly useful in simulations requiring precise handling of point placements along edges using linear mappings. Methods like `computeBase` and `computeDistance` are not implemented for edges, so users should be aware that these functionalities are limited."
}