class geode::TetrahedralSolidEpsilonModifier

Overview

#include <tetrahedral_solid_epsilon_modifier.h>

class TetrahedralSolidEpsilonModifier: public geode::TetrahedralSolidModifier
{
public:
    // construction

    TetrahedralSolidEpsilonModifier(
        const SolidMesh3D& solid,
        TetrahedralSolidBuilder3D& builder
        );

    // methods

    SolidSplitInfo insert_point_in_tetrahedron(
        index_t tetrahedron_id,
        const Point3D& point
        );

    SolidSplitInfo insert_point_on_facet(
        const PolyhedronFacet& facet,
        const Point3D& point
        );

    SolidSplitEdgeInfo insert_point_on_edge(
        const PolyhedronFacetEdge& edge,
        const Point3D& point
        );

    SolidSplitEdgeInfo insert_point_on_edge(index_t edge_id, const Point3D& point);
};

Inherited Members

public:
    // methods

    index_t updated_vertex(index_t vertex_id) const;
    bool is_tetrahedron_active(index_t tetrahedron_id) const;
    bool is_facet_active(index_t facet_id) const;
    void set_tetrahedron_inactive(index_t tetrahedron_id);
    void set_facet_inactive(index_t facet_id);
    bool is_split_tetrahedron_valid(index_t tetrahedron_id, const Point3D& point) const;
    SolidSplitInfo split_tetrahedron(index_t tetrahedron_id, const Point3D& point);
    bool is_split_facet_valid(const PolyhedronFacet& facet, const Point3D& point) const;
    bool is_split_facet_valid(index_t facet_id, const Point3D& point) const;

    absl::optional<PolyhedronFacet> invalid_element_on_split_facet(
        const PolyhedronFacet& facet,
        const Point3D& point
        ) const;

    absl::optional<PolyhedronFacet> invalid_element_on_split_facet(
        index_t facet_id,
        const Point3D& point
        ) const;

    SolidSplitInfo split_facet(index_t facet_id, const Point3D& point);
    SolidSplitInfo split_facet(const PolyhedronFacet& facet, const Point3D& point);
    bool is_split_edge_valid(const PolyhedronFacetEdge& edge, const Point3D& point) const;
    bool is_split_edge_valid(index_t edge_id, const Point3D& point) const;

    absl::optional<index_t> invalid_element_on_split_edge(
        const PolyhedronFacetEdge& edge,
        const Point3D& point
        ) const;

    absl::optional<index_t> invalid_element_on_split_edge(
        index_t edge_id,
        const Point3D& point
        ) const;

    SolidSplitEdgeInfo split_edge(index_t edge_id, const Point3D& point);

    SolidSplitEdgeInfo split_edge(
        const PolyhedronFacetEdge& edge,
        const Point3D& point
        );

    bool is_collapse_edge_valid(
        const PolyhedronFacetEdge& edge,
        const Point3D& point
        ) const;

    bool is_collapse_edge_valid(index_t _id, const Point3D& point) const;

    SolidCollapseEdgeInfo collapse_edge(
        const PolyhedronFacetEdge& edge,
        const Point3D& point
        );

    SolidCollapseEdgeInfo collapse_edge(index_t edge_id, const Point3D& point);
    SolidSwapFacetInfo swap_facet(const PolyhedronFacet& facet);
    std::vector<index_t> clean_tetrahedra();
    std::vector<index_t> clean_vertices();
    std::vector<index_t> clean_edges();
    std::vector<index_t> clean_facets();
    std::tuple<std::vector<index_t>, std::vector<index_t>, std::vector<index_t>, std::vector<index_t>> clean();

Detailed Documentation

Methods

SolidSplitInfo insert_point_in_tetrahedron(
    index_t tetrahedron_id,
    const Point3D& point
    )

Insert a point in a tetrahedron either by spliting the tetrahedron into four new ones, or by snapping the point on a facet (three new tetrahedra for each side), an edge (each incident tetrahedra is split into two new tetrahedra) or a vertex (no new tetrahedron).

Parameters:

tetrahedron_id

Index of the tetrahedron to split.

point

Coordinates of the split point. @warn Split tetrahedron is set as inactive but not deleted.

Returns:

new vertex index and mappings between old and new mesh.

SolidSplitInfo insert_point_on_facet(
    const PolyhedronFacet& facet,
    const Point3D& point
    )

Insert a point on a facet either by spliting the facet into three new ones, or by snapping the point on a edge or a vertex.

Parameters:

facet

Index of the PolyhedronFacet to split.

point

Coordinates of the split point. @warn Potential split tetrahedra are set as inactive but not deleted.

Returns:

new vertex index and mappings between old and new mesh.

SolidSplitEdgeInfo insert_point_on_edge(
    const PolyhedronFacetEdge& edge,
    const Point3D& point
    )

Insert a point on an edge either by spliting the edge into two new ones, or by snapping the point on a vertex.

Parameters:

edge

Index of the PolyhedronFacetEdge to split.

point

Coordinates of the split point. @warn Potential split tetrahedra are set as inactive but not deleted.

Returns:

new vertex index and mappings between old and new mesh.

SolidSplitEdgeInfo insert_point_on_edge(index_t edge_id, const Point3D& point)

Insert a point on an edge either by spliting the edge into two new ones, or by snapping the point on a vertex.

Parameters:

edge_id

Unique index of the edge to split.

point

Coordinates of the split point. @warn Potential split tetrahedra are set as inactive but not deleted.

Returns:

new vertex index and mappings between old and new mesh.