Skip to content

Class uipc::constitution::AffineBodyConstitution

ClassList > uipc > constitution > AffineBodyConstitution

Inherits the following classes: uipc::constitution::IConstitution

Inherited by the following classes: uipc::constitution::AffineBodyRod, uipc::constitution::AffineBodyShell

Public Functions

Type Name
AffineBodyConstitution (const Json & config=default_config()) noexcept
void apply_to (geometry::SimplicialComplex & sc, Float kappa, Float mass_density=1e3) const
void apply_to (geometry::SimplicialComplex & sc, Float kappa, const Matrix12x12 & mass, Float volume) const
Apply ABD constitution with explicit mass matrix and volume override.
geometry::SimplicialComplex create_proxy (Float kappa, Float mass, const Vector3 & mass_center, const Matrix3x3 & inertia, Float volume) const
Create a 1-vertex proxy affine body from rigid body mass properties.
geometry::SimplicialComplex create_proxy (Float kappa, const Matrix12x12 & abd_mass, Float volume) const
Create a 1-vertex proxy affine body from a precomputed 12x12 ABD mass matrix.

Public Functions inherited from uipc::constitution::IConstitution

See uipc::constitution::IConstitution

Type Name
std::string_view name () noexcept const
std::string_view type () noexcept const
U64 uid () noexcept const
const builtin::UIDInfo & uid_info () noexcept const
virtual ~IConstitution () = default

Public Static Functions

Type Name
Json default_config () noexcept

Protected Functions

Type Name
void create_attributes (geometry::SimplicialComplex & sc, Float kappa, Float mass_density, Float volume, Float m, const Vector3 & m_x_bar, const Matrix3x3 & m_x_bar_x_bar) const
Common ABD attribute setup.
virtual U64 get_uid () noexcept override const

Protected Functions inherited from uipc::constitution::IConstitution

See uipc::constitution::IConstitution

Type Name
virtual U64 get_uid () noexcept const = 0

Public Functions Documentation

function AffineBodyConstitution

uipc::constitution::AffineBodyConstitution::AffineBodyConstitution (
    const Json & config=default_config()
) noexcept

function apply_to [1/2]

void uipc::constitution::AffineBodyConstitution::apply_to (
    geometry::SimplicialComplex & sc,
    Float kappa,
    Float mass_density=1e3
) const

function apply_to [2/2]

Apply ABD constitution with explicit mass matrix and volume override.

void uipc::constitution::AffineBodyConstitution::apply_to (
    geometry::SimplicialComplex & sc,
    Float kappa,
    const Matrix12x12 & mass,
    Float volume
) const

The 12x12 mass matrix is decomposed into (m, m_x_bar, m_x_bar_x_bar) and stored as meta attributes so the backend uses them directly instead of computing from mesh geometry.


function create_proxy [1/2]

Create a 1-vertex proxy affine body from rigid body mass properties.

geometry::SimplicialComplex uipc::constitution::AffineBodyConstitution::create_proxy (
    Float kappa,
    Float mass,
    const Vector3 & mass_center,
    const Matrix3x3 & inertia,
    Float volume
) const

The returned SimplicialComplex has a single vertex at the origin and carries all ABD meta attributes. It participates in dynamics (gravity, shape energy) but has no collision geometry.


function create_proxy [2/2]

Create a 1-vertex proxy affine body from a precomputed 12x12 ABD mass matrix.

geometry::SimplicialComplex uipc::constitution::AffineBodyConstitution::create_proxy (
    Float kappa,
    const Matrix12x12 & abd_mass,
    Float volume
) const

Public Static Functions Documentation

function default_config

static Json uipc::constitution::AffineBodyConstitution::default_config () noexcept

Protected Functions Documentation

function create_attributes

Common ABD attribute setup.

void uipc::constitution::AffineBodyConstitution::create_attributes (
    geometry::SimplicialComplex & sc,
    Float kappa,
    Float mass_density,
    Float volume,
    Float m,
    const Vector3 & m_x_bar,
    const Matrix3x3 & m_x_bar_x_bar
) const

Sets constitution_uid, transforms, dof_offset, dof_count, is_fixed, is_dynamic, external_kinetic, velocity, self_collision, kappa, volume, mass_density, abd_mass/abd_mass_x_bar/abd_mass_x_bar_x_bar, and user-facing mass/mass_center/inertia on sc.meta().

Subclasses (AffineBodyShell, AffineBodyRod) call this with their own pre-computed volume and dyadic mass.


function get_uid

virtual U64 uipc::constitution::AffineBodyConstitution::get_uid () noexcept override const

Implements uipc::constitution::IConstitution::get_uid



The documentation for this class was generated from the following file include/uipc/constitution/affine_body_constitution.h