Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions python/src/barrier/adaptive_stiffness.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ void define_adaptive_stiffness(py::module_& m)
"initial_barrier_stiffness",
[](const double bbox_diagonal, const Barrier& barrier,
const double dhat, const double average_mass,
const Eigen::VectorXd& grad_energy,
const Eigen::VectorXd& grad_barrier,
Eigen::ConstRef<Eigen::VectorXd> grad_energy,
Eigen::ConstRef<Eigen::VectorXd> grad_barrier,
const double min_barrier_stiffness_scale = 1e11,
const double dmin = 0) {
double max_barrier_stiffness;
Expand Down Expand Up @@ -73,8 +73,9 @@ void define_adaptive_stiffness(py::module_& m)
"semi_implicit_stiffness",
static_cast<double (*)(
const CollisionStencil&, const std::array<long, 4>&,
const VectorMax12d&, const VectorMax4d&, const MatrixMax12d&,
const double)>(&semi_implicit_stiffness),
Eigen::ConstRef<VectorMax12d>, Eigen::ConstRef<VectorMax4d>,
Eigen::ConstRef<MatrixMax12d>, const double)>(
&semi_implicit_stiffness),
R"ipc_Qu8mg5v7(
Compute the semi-implicit stiffness for a single collision.

Expand All @@ -97,8 +98,8 @@ void define_adaptive_stiffness(py::module_& m)
m.def(
"semi_implicit_stiffness",
static_cast<Eigen::VectorXd (*)(
const CollisionMesh&, const Eigen::MatrixXd&,
const NormalCollisions&, const Eigen::VectorXd&,
const CollisionMesh&, Eigen::ConstRef<Eigen::MatrixXd>,
const NormalCollisions&, Eigen::ConstRef<Eigen::VectorXd>,
const Eigen::SparseMatrix<double>&, const double)>(
&semi_implicit_stiffness),
R"ipc_Qu8mg5v7(
Expand All @@ -123,9 +124,10 @@ void define_adaptive_stiffness(py::module_& m)
m.def(
"semi_implicit_stiffness",
static_cast<Eigen::VectorXd (*)(
const CollisionMesh&, const Eigen::MatrixXd&, const Candidates&,
const Eigen::VectorXd&, const Eigen::SparseMatrix<double>&,
const double)>(&semi_implicit_stiffness),
const CollisionMesh&, Eigen::ConstRef<Eigen::MatrixXd>,
const Candidates&, Eigen::ConstRef<Eigen::VectorXd>,
const Eigen::SparseMatrix<double>&, const double)>(
&semi_implicit_stiffness),
R"ipc_Qu8mg5v7(
Compute the semi-implicit stiffness's for all collisions.

Expand Down
22 changes: 12 additions & 10 deletions python/src/broad_phase/aabb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ void define_aabb(py::module_& m)
py::class_<AABB>(m, "AABB")
.def(py::init())
.def(
py::init<const ArrayMax3d&, const ArrayMax3d&>(), py::arg("min"),
py::arg("max"))
py::init<
Eigen::ConstRef<ArrayMax3d>, Eigen::ConstRef<ArrayMax3d>>(),
py::arg("min"), py::arg("max"))
.def(
py::init<const AABB&, const AABB&>(), py::arg("aabb1"),
py::arg("aabb2"))
Expand All @@ -20,7 +21,7 @@ void define_aabb(py::module_& m)
py::arg("aabb2"), py::arg("aabb3"))
.def_static(
"from_point",
py::overload_cast<const VectorMax3d&, const double>(
py::overload_cast<Eigen::ConstRef<VectorMax3d>, const double>(
&AABB::from_point),
R"ipc_Qu8mg5v7(
Construct an AABB for a static point.
Expand All @@ -36,8 +37,8 @@ void define_aabb(py::module_& m)
.def_static(
"from_point",
py::overload_cast<
const VectorMax3d&, const VectorMax3d&, const double>(
&AABB::from_point),
Eigen::ConstRef<VectorMax3d>, Eigen::ConstRef<VectorMax3d>,
const double>(&AABB::from_point),
R"ipc_Qu8mg5v7(
Construct an AABB for a moving point (i.e. temporal edge).

Expand Down Expand Up @@ -78,7 +79,8 @@ void define_aabb(py::module_& m)

m.def(
"build_vertex_boxes",
[](const Eigen::MatrixXd& vertices, const double inflation_radius = 0) {
[](Eigen::ConstRef<Eigen::MatrixXd> vertices,
const double inflation_radius = 0) {
std::vector<AABB> vertex_boxes;
build_vertex_boxes(vertices, vertex_boxes, inflation_radius);
return vertex_boxes;
Expand All @@ -97,8 +99,8 @@ void define_aabb(py::module_& m)

m.def(
"build_vertex_boxes",
[](const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
[](Eigen::ConstRef<Eigen::MatrixXd> vertices_t0,
Eigen::ConstRef<Eigen::MatrixXd> vertices_t1,
const double inflation_radius = 0) {
std::vector<AABB> vertex_boxes;
build_vertex_boxes(
Expand All @@ -122,7 +124,7 @@ void define_aabb(py::module_& m)
m.def(
"build_edge_boxes",
[](const std::vector<AABB>& vertex_boxes,
const Eigen::MatrixXi& edges) {
Eigen::ConstRef<Eigen::MatrixXi> edges) {
std::vector<AABB> edge_boxes;
build_edge_boxes(vertex_boxes, edges, edge_boxes);
return edge_boxes;
Expand All @@ -142,7 +144,7 @@ void define_aabb(py::module_& m)
m.def(
"build_face_boxes",
[](const std::vector<AABB>& vertex_boxes,
const Eigen::MatrixXi& faces) {
Eigen::ConstRef<Eigen::MatrixXi> faces) {
std::vector<AABB> face_boxes;
build_face_boxes(vertex_boxes, faces, face_boxes);
return face_boxes;
Expand Down
26 changes: 15 additions & 11 deletions python/src/broad_phase/broad_phase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@ class PyBroadPhase : public BroadPhase {
}

void build(
const Eigen::MatrixXd& vertices,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces,
Eigen::ConstRef<Eigen::MatrixXd> vertices,
Eigen::ConstRef<Eigen::MatrixXi> edges,
Eigen::ConstRef<Eigen::MatrixXi> faces,
const double inflation_radius = 0) override
{
PYBIND11_OVERRIDE(
void, BroadPhase, build, vertices, edges, faces, inflation_radius);
}

void build(
const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1,
const Eigen::MatrixXi& edges,
const Eigen::MatrixXi& faces,
Eigen::ConstRef<Eigen::MatrixXd> vertices_t0,
Eigen::ConstRef<Eigen::MatrixXd> vertices_t1,
Eigen::ConstRef<Eigen::MatrixXi> edges,
Eigen::ConstRef<Eigen::MatrixXi> faces,
const double inflation_radius = 0) override
{
PYBIND11_OVERRIDE(
Expand Down Expand Up @@ -149,8 +149,10 @@ void define_broad_phase(py::module_& m)
.def(
"build",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&, const double>(&BroadPhase::build),
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, const double>(
&BroadPhase::build),
R"ipc_Qu8mg5v7(
Build the broad phase for static collision detection.

Expand All @@ -165,8 +167,10 @@ void define_broad_phase(py::module_& m)
.def(
"build",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXd&,
const Eigen::MatrixXi&, const Eigen::MatrixXi&, const double>(
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, const double>(
&BroadPhase::build),
R"ipc_Qu8mg5v7(
Build the broad phase for continuous collision detection.
Expand Down
24 changes: 15 additions & 9 deletions python/src/broad_phase/spatial_hash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,36 @@ void define_spatial_hash(py::module_& m)
.def(py::init())
.def(
py::init<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&, double, double>(),
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, double, double>(),
py::arg("vertices"), py::arg("edges"), py::arg("faces"),
py::arg("inflation_radius") = 0, py::arg("voxel_size") = -1)
.def(
py::init<
const Eigen::MatrixXd&, const Eigen::MatrixXd&,
const Eigen::MatrixXi&, const Eigen::MatrixXi&, double,
double>(),
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, double, double>(),
py::arg("vertices_t0"), py::arg("vertices_t1"), py::arg("edges"),
py::arg("faces"), py::arg("inflation_radius") = 0,
py::arg("voxel_size") = -1)
.def(
"build",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&, double, double>(&SpatialHash::build),
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, double, double>(
&SpatialHash::build),
py::arg("vertices"), py::arg("edges"), py::arg("faces"),
py::arg("inflation_radius") = 0, py::arg("voxel_size") = -1)
.def(
"build",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXd&,
const Eigen::MatrixXi&, const Eigen::MatrixXi&, double, double>(
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>, double, double>(
&SpatialHash::build),
py::arg("vertices_t0"), py::arg("vertices_t1"), py::arg("edges"),
py::arg("faces"), py::arg("inflation_radius") = 0,
Expand Down
16 changes: 9 additions & 7 deletions python/src/broad_phase/voxel_size_heuristic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,24 @@ void define_voxel_size_heuristic(py::module_& m)
m.def(
"suggest_good_voxel_size",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&, const double>(
&suggest_good_voxel_size),
Eigen::ConstRef<Eigen::MatrixXd>, Eigen::ConstRef<Eigen::MatrixXi>,
const double>(&suggest_good_voxel_size),
py::arg("vertices"), py::arg("edges"), py::arg("inflation_radius") = 0);

m.def(
"suggest_good_voxel_size",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXd&,
const Eigen::MatrixXi&, const double>(&suggest_good_voxel_size),
Eigen::ConstRef<Eigen::MatrixXd>, Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>, const double>(
&suggest_good_voxel_size),
py::arg("vertices_t0"), py::arg("vertices_t1"), py::arg("edges"),
py::arg("inflation_radius") = 0);

m.def(
"mean_edge_length",
[](const Eigen::MatrixXd& vertices_t0,
const Eigen::MatrixXd& vertices_t1, const Eigen::MatrixXi& edges) {
[](Eigen::ConstRef<Eigen::MatrixXd> vertices_t0,
Eigen::ConstRef<Eigen::MatrixXd> vertices_t1,
Eigen::ConstRef<Eigen::MatrixXi> edges) {
double std_deviation;
double r = mean_edge_length(
vertices_t0, vertices_t1, edges, std_deviation);
Expand All @@ -36,7 +38,7 @@ void define_voxel_size_heuristic(py::module_& m)

m.def(
"mean_displacement_length",
[](const Eigen::MatrixXd& displacements) {
[](Eigen::ConstRef<Eigen::MatrixXd> displacements) {
double std_deviation;
double r = mean_displacement_length(displacements, std_deviation);
return std::make_tuple(r, std_deviation);
Expand Down
8 changes: 4 additions & 4 deletions python/src/candidates/candidates.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ void define_candidates(py::module_& m)
.def(
"build",
py::overload_cast<
const CollisionMesh&, const Eigen::MatrixXd&, const double,
std::shared_ptr<BroadPhase>>(&Candidates::build),
const CollisionMesh&, Eigen::ConstRef<Eigen::MatrixXd>,
const double, std::shared_ptr<BroadPhase>>(&Candidates::build),
R"ipc_Qu8mg5v7(
Initialize the set of discrete collision detection candidates.

Expand All @@ -29,8 +29,8 @@ void define_candidates(py::module_& m)
.def(
"build",
py::overload_cast<
const CollisionMesh&, const Eigen::MatrixXd&,
const Eigen::MatrixXd&, const double,
const CollisionMesh&, Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXd>, const double,
std::shared_ptr<BroadPhase>>(&Candidates::build),
R"ipc_Qu8mg5v7(
Initialize the set of continuous collision detection candidates.
Expand Down
38 changes: 22 additions & 16 deletions python/src/candidates/collision_stencil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ void define_collision_stencil(py::module_& m)
)ipc_Qu8mg5v7",
py::arg("edges"), py::arg("faces"))
.def(
"vertices", &CollisionStencil::vertices<double>,
"vertices", &CollisionStencil::vertices,
R"ipc_Qu8mg5v7(
Get the vertex attributes of the collision stencil.

Expand All @@ -53,7 +53,7 @@ void define_collision_stencil(py::module_& m)
)ipc_Qu8mg5v7",
py::arg("vertices"), py::arg("edges"), py::arg("faces"))
.def(
"dof", &CollisionStencil::dof<double>,
"dof", &CollisionStencil::dof,
R"ipc_Qu8mg5v7(
Select this stencil's DOF from the full matrix of DOF.

Expand All @@ -71,8 +71,9 @@ void define_collision_stencil(py::module_& m)
.def(
"compute_distance",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&>(
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>>(
&CollisionStencil::compute_distance, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance of the stencil.
Expand All @@ -89,8 +90,9 @@ void define_collision_stencil(py::module_& m)
.def(
"compute_distance_gradient",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&>(
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>>(
&CollisionStencil::compute_distance_gradient, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance gradient of the stencil w.r.t. the stencil's vertex positions.
Expand All @@ -107,8 +109,9 @@ void define_collision_stencil(py::module_& m)
.def(
"compute_distance_hessian",
py::overload_cast<
const Eigen::MatrixXd&, const Eigen::MatrixXi&,
const Eigen::MatrixXi&>(
Eigen::ConstRef<Eigen::MatrixXd>,
Eigen::ConstRef<Eigen::MatrixXi>,
Eigen::ConstRef<Eigen::MatrixXi>>(
&CollisionStencil::compute_distance_hessian, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance Hessian of the stencil w.r.t. the stencil's vertex positions.
Expand All @@ -124,7 +127,7 @@ void define_collision_stencil(py::module_& m)
py::arg("vertices"), py::arg("edges"), py::arg("faces"))
.def(
"compute_distance",
py::overload_cast<const VectorMax12d&>(
py::overload_cast<Eigen::ConstRef<VectorMax12d>>(
&CollisionStencil::compute_distance, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance of the stencil.
Expand All @@ -141,7 +144,7 @@ void define_collision_stencil(py::module_& m)
py::arg("positions"))
.def(
"compute_distance_gradient",
py::overload_cast<const VectorMax12d&>(
py::overload_cast<Eigen::ConstRef<VectorMax12d>>(
&CollisionStencil::compute_distance_gradient, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance gradient of the stencil w.r.t. the stencil's vertex positions.
Expand All @@ -158,7 +161,7 @@ void define_collision_stencil(py::module_& m)
py::arg("positions"))
.def(
"compute_distance_hessian",
py::overload_cast<const VectorMax12d&>(
py::overload_cast<Eigen::ConstRef<VectorMax12d>>(
&CollisionStencil::compute_distance_hessian, py::const_),
R"ipc_Qu8mg5v7(
Compute the distance Hessian of the stencil w.r.t. the stencil's vertex positions.
Expand All @@ -175,9 +178,11 @@ void define_collision_stencil(py::module_& m)
py::arg("positions"))
.def(
"ccd",
[](const CollisionStencil& self, const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1, const double min_distance,
const double tmax, const NarrowPhaseCCD& narrow_phase_ccd) {
[](const CollisionStencil& self,
Eigen::ConstRef<VectorMax12d> vertices_t0,
Eigen::ConstRef<VectorMax12d> vertices_t1,
const double min_distance, const double tmax,
const NarrowPhaseCCD& narrow_phase_ccd) {
double toi;
bool r = self.ccd(
vertices_t0, vertices_t1, toi, min_distance, tmax,
Expand All @@ -204,8 +209,9 @@ void define_collision_stencil(py::module_& m)
py::arg("narrow_phase_ccd") = DEFAULT_NARROW_PHASE_CCD)
.def(
"print_ccd_query",
[](const CollisionStencil& self, const VectorMax12d& vertices_t0,
const VectorMax12d& vertices_t1) -> void {
[](const CollisionStencil& self,
Eigen::ConstRef<VectorMax12d> vertices_t0,
Eigen::ConstRef<VectorMax12d> vertices_t1) -> void {
self.write_ccd_query(std::cout, vertices_t0, vertices_t1);
},
R"ipc_Qu8mg5v7(
Expand Down
Loading