18TEST_CASE(
"marching_component_tri",
"[components][marching]")
20 const int64_t input_tag_value_0 = 0;
21 const int64_t input_tag_value_1 = 1;
22 const int64_t isosurface_tag_value = 2;
29 tests::DEBUG_TriMesh m = tests::hex_plus_two_with_position();
32 options.
position_handle = m.get_attribute_handle<
double>(
"vertices", PrimitiveType::Vertex);
33 options.
label_handles[PrimitiveType::Vertex] = m.register_attribute<int64_t>(
35 PrimitiveType::Vertex,
40 m.register_attribute<int64_t>(
"marching_edge_tag", PrimitiveType::Edge, 1);
42 options.
input_values = {input_tag_value_0, input_tag_value_1};
45 int64_t expected_isosurface_vertex_num = 0;
46 int64_t expected_isosurface_edge_num = 0;
52 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
55 expected_isosurface_vertex_num = 6;
56 expected_isosurface_edge_num = 6;
62 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
66 expected_isosurface_vertex_num = 9;
67 expected_isosurface_edge_num = 8;
73 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
78 expected_isosurface_vertex_num = 10;
79 expected_isosurface_edge_num = 8;
81 SECTION(
"0-4-5-with-filter")
85 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
91 m.register_attribute<int64_t>(
"edge_filter", PrimitiveType::Edge, 1);
101 expected_isosurface_vertex_num = 5;
102 expected_isosurface_edge_num = 4;
105 int64_t expected_vertex_num =
106 m.get_all(PrimitiveType::Vertex).size() + expected_isosurface_vertex_num;
110 const auto& vertices = m.get_all(PrimitiveType::Vertex);
112 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
115 CHECK(vertices.size() == expected_vertex_num);
117 int64_t isosurface_vertex_num = 0;
118 for (
const Tuple& v : vertices) {
120 isosurface_vertex_num++;
123 CHECK(isosurface_vertex_num == expected_isosurface_vertex_num);
126 const auto& edges = m.get_all(PrimitiveType::Edge);
128 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Edge]);
131 int64_t isosurface_edge_num = 0;
132 for (
const Tuple& e : edges) {
134 isosurface_edge_num++;
137 CHECK(isosurface_edge_num == expected_isosurface_edge_num);
142 for (
const Tuple& v : vertices) {
147 int64_t tagged_neighbors = 0;
148 for (
const Tuple& neigh : one_ring) {
154 if (m.is_boundary_vertex(v)) {
155 CHECK(tagged_neighbors == 1);
157 CHECK(tagged_neighbors == 2);
165 writer(
"marching_2d_result",
"vertices", m,
true,
true,
true,
false);
170TEST_CASE(
"marching_component_tet",
"[components][marching]")
172 const int64_t input_tag_value_0 = 0;
173 const int64_t input_tag_value_1 = 1;
174 const int64_t isosurface_tag_value = 2;
184 tests_3d::DEBUG_TetMesh m = tests_3d::three_incident_tets_with_positions();
187 options.
position_handle = m.get_attribute_handle<
double>(
"vertices", PrimitiveType::Vertex);
188 options.
label_handles[PrimitiveType::Vertex] = m.register_attribute<int64_t>(
190 PrimitiveType::Vertex,
195 m.register_attribute<int64_t>(
"marching_edge_tag", PrimitiveType::Edge, 1);
197 m.register_attribute<int64_t>(
"marching_face_tag", PrimitiveType::Triangle, 1);
199 options.
input_values = {input_tag_value_0, input_tag_value_1};
203 int64_t expected_isosurface_vertex_num = 0;
204 int64_t expected_isosurface_face_num = 0;
210 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
214 expected_isosurface_vertex_num = 8;
215 expected_isosurface_face_num = 6;
221 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
225 expected_isosurface_vertex_num = 5;
226 expected_isosurface_face_num = 3;
232 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
238 expected_isosurface_vertex_num = 8;
239 expected_isosurface_face_num = 6;
242 int64_t expected_vertex_num =
243 m.get_all(PrimitiveType::Vertex).size() + expected_isosurface_vertex_num;
246 std::vector<attribute::MeshAttributeHandle> pass_through_attributes;
247 pass_through_attributes.emplace_back(
248 m.get_attribute_handle<
double>(
"vertices", PrimitiveType::Vertex));
252 const auto& vertices = m.get_all(PrimitiveType::Vertex);
254 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Vertex]);
257 CHECK(vertices.size() == expected_vertex_num);
259 int64_t isosurface_vertex_num = 0;
260 for (
const Tuple& v : vertices) {
262 isosurface_vertex_num++;
265 CHECK(isosurface_vertex_num == expected_isosurface_vertex_num);
269 const auto& faces = m.get_all(PrimitiveType::Triangle);
271 m.create_accessor<int64_t>(options.
label_handles[PrimitiveType::Triangle]);
273 int64_t isosurface_face_num = 0;
274 for (
const Tuple& f : faces) {
276 isosurface_face_num++;
279 CHECK(isosurface_face_num == expected_isosurface_face_num);
284 writer(
"marching_3d_result",
"vertices", m,
true,
true,
true,
true);