Skip to content

File affine_body_constitution.h

File List > constitution > affine_body_constitution.h

Go to the documentation of this file

#pragma once
#include <uipc/constitution/constitution.h>
#include <uipc/geometry/simplicial_complex.h>

namespace uipc::constitution
{
class UIPC_CONSTITUTION_API AffineBodyConstitution : public IConstitution
{
    using Base = IConstitution;

  public:
    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;

    static Json default_config() noexcept;

  protected:
    virtual U64 get_uid() const noexcept override;

    void create_abd_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;

  private:
    Json m_config;
};
}  // namespace uipc::constitution