Skip to content

Commit

Permalink
[geometry] Add zero_simplex_manual_test (RobotLocomotion#20323)
Browse files Browse the repository at this point in the history
This is a developer convenience for quick evaluation of volume meshes.
  • Loading branch information
rpoyner-tri authored Oct 11, 2023
1 parent 47cd611 commit 7cb258c
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
21 changes: 21 additions & 0 deletions geometry/proximity/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
load(
"//tools/skylark:drake_cc.bzl",
"drake_cc_binary",
"drake_cc_googletest",
"drake_cc_library",
"drake_cc_package_library",
Expand Down Expand Up @@ -837,6 +838,26 @@ drake_cc_library(
],
)

drake_cc_binary(
name = "zero_simplex_manual_test",
testonly = 1,
srcs = ["test/zero_simplex_manual_test.cc"],
add_test_rule = 1,
data = [
"//geometry:test_vtk_files",
],
test_rule_args = [
"--expect_fail",
"geometry/test/one_tetrahedron.vtk",
],
deps = [
":detect_zero_simplex",
":vtk_to_volume_mesh",
"//common:add_text_logging_gflags",
"@gflags",
],
)

drake_cc_googletest(
name = "aabb_test",
deps = [
Expand Down
48 changes: 48 additions & 0 deletions geometry/proximity/test/zero_simplex_manual_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include <gflags/gflags.h>

#include "drake/common/text_logging.h"
#include "drake/geometry/proximity/detect_zero_simplex.h"
#include "drake/geometry/proximity/vtk_to_volume_mesh.h"

DEFINE_bool(expect_fail, false,
"expect to find zero simplices; reverses the success/fail logic");

namespace drake {
namespace geometry {
namespace internal {
namespace {

int do_main(int argc, char* argv[]) {
gflags::SetUsageMessage(
"[INPUT-VTK-FILE]\n"
"Run zero simplex checks; summarize zero simplices;"
" fail if any are found unless --expect_fail is set");
gflags::ParseCommandLineFlags(&argc, &argv, true);
if (argc < 2) {
drake::log()->error("missing input filename");
return 1;
}

auto mesh = ReadVtkToVolumeMesh(argv[1]);
auto bad_tets = DetectTetrahedronWithAllBoundaryVertices(mesh);
auto bad_triangles = DetectInteriorTriangleWithAllBoundaryVertices(mesh);
auto bad_edges = DetectInteriorEdgeWithAllBoundaryVertices(mesh);

drake::log()->info(
"Found {} bad tetrahedra, {} bad triangles, and {} bad "
"edges from total {} tetrahedra.",
bad_tets.size(), bad_triangles.size(), bad_edges.size(),
mesh.num_elements());
bool found_bad =
(!bad_tets.empty() || !bad_triangles.empty() || !bad_edges.empty());
return found_bad ^ FLAGS_expect_fail;
}

} // namespace
} // namespace internal
} // namespace geometry
} // namespace drake

int main(int argc, char* argv[]) {
return drake::geometry::internal::do_main(argc, argv);
}

0 comments on commit 7cb258c

Please sign in to comment.