forked from pz4kybsvg/Conception
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
#include "drake/geometry/make_mesh_for_deformable.h"
|
|
|
|
#include <utility>
|
|
|
|
#include "drake/common/drake_assert.h"
|
|
#include "drake/geometry/proximity/make_mesh_from_vtk.h"
|
|
#include "drake/geometry/proximity/make_sphere_mesh.h"
|
|
|
|
namespace drake {
|
|
namespace geometry {
|
|
namespace internal {
|
|
|
|
std::unique_ptr<VolumeMesh<double>> MeshBuilderForDeformable::Build(
|
|
const Shape& shape, double resolution_hint) {
|
|
DRAKE_DEMAND(resolution_hint > 0.0);
|
|
ReifyData data{resolution_hint, nullptr};
|
|
shape.Reify(this, &data);
|
|
return std::move(data.mesh);
|
|
}
|
|
|
|
void MeshBuilderForDeformable::ImplementGeometry(const Mesh& mesh_spec,
|
|
void* user_data) {
|
|
DRAKE_DEMAND(user_data != nullptr);
|
|
ReifyData& data = *static_cast<ReifyData*>(user_data);
|
|
data.mesh = std::make_unique<VolumeMesh<double>>(
|
|
MakeVolumeMeshFromVtk<double>(mesh_spec));
|
|
}
|
|
|
|
void MeshBuilderForDeformable::ImplementGeometry(const Sphere& sphere,
|
|
void* user_data) {
|
|
DRAKE_DEMAND(user_data != nullptr);
|
|
ReifyData& data = *static_cast<ReifyData*>(user_data);
|
|
DRAKE_DEMAND(data.resolution_hint > 0);
|
|
// Relying on move construction from r-value return from MakeSphereVolumeMesh.
|
|
data.mesh = std::make_unique<VolumeMesh<double>>(MakeSphereVolumeMesh<double>(
|
|
sphere, data.resolution_hint,
|
|
TessellationStrategy::kDenseInteriorVertices));
|
|
}
|
|
|
|
void MeshBuilderForDeformable::ThrowUnsupportedGeometry(
|
|
const std::string& shape_name) {
|
|
throw std::logic_error(
|
|
fmt::format("MeshBuilderForDeformable: We don't yet generate deformable "
|
|
"meshes from {}.",
|
|
shape_name));
|
|
}
|
|
|
|
} // namespace internal
|
|
} // namespace geometry
|
|
} // namespace drake
|