MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / TEST

Function TEST

source/MRTest/MRPolylineTrimWithPlane.cpp:11–68  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9{
10
11TEST( MRMesh, ExtractSectionsFromPolyline )
12{
13 Plane3f plane( { 1.f, 0.f, 0.f }, 1.f );
14
15 auto check = [&plane] ( const std::vector<Vector3f>& points, float eps, std::vector<EdgeSegment> edgeSegmentsOut, UndirectedEdgeBitSet positiveEdgesOut )
16 {
17 Polyline3 polyline;
18 polyline.addFromPoints( points.data(), points.size(), false );
19 UndirectedEdgeBitSet positiveEdgesIn;
20 std::vector<EdgeSegment> edgeSegmentsIn = extractSectionsFromPolyline( polyline, plane, eps, &positiveEdgesIn );
21 EXPECT_EQ( edgeSegmentsIn, edgeSegmentsOut );
22 EXPECT_EQ( positiveEdgesIn, positiveEdgesOut );
23 };
24
25 UndirectedEdgeBitSet bsOne;
26 bsOne.autoResizeSet( 0_ue );
27
28 // eps == 0.f
29 std::vector<std::vector<std::vector<EdgeSegment>>> expectedEdgeSegments( 3 );
30 std::vector<std::vector<UndirectedEdgeBitSet>> expectedPositiveEdges( 3 );
31
32 expectedEdgeSegments[0] = std::vector<std::vector<EdgeSegment>>{ {}, { {0_e, 1.f, 1.f} }, { {0_e, 0.5f, 0.5f} } };
33 expectedEdgeSegments[1] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 1.f, 1.f} }, {}, {} };
34 expectedEdgeSegments[2] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 0.5f, 0.5f} }, {}, {} };
35
36 expectedPositiveEdges[0] = { {}, {}, {} };
37 expectedPositiveEdges[1] = { {}, bsOne, bsOne };
38 expectedPositiveEdges[2] = { {}, bsOne, bsOne };
39
40 for ( int i = 0; i < 3; ++i )
41 {
42 for ( int j = 0; j < 3; ++j )
43 check( { {float( i ), 0.f, 0.f}, {float( j ), 1.f, 0.f} }, 0.f, expectedEdgeSegments[i][j], expectedPositiveEdges[i][j] );
44 }
45
46
47 // eps > 0.f
48 plane = Plane3f( { 1.f, 0.f, 0.f }, 2.f );
49
50 expectedEdgeSegments.resize( 5 );
51 expectedPositiveEdges.resize( 5 );
52
53 expectedEdgeSegments[0] = std::vector<std::vector<EdgeSegment>>{ {}, { {0_e, 1.f, 1.f} }, { {0_e, 0.5f, 1.f} }, { {0_e, 1 / 3.f, 1.f} }, { {0_e, 0.25f, 0.75f} } };
54 expectedEdgeSegments[1] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 1.f, 1.f} }, { {0_e, 0.f, 1.f} }, { {0_e, 0.f, 1.f} }, { {0_e, 0.f, 1.f} }, { {0_e, 0.f, 1 - 1 / 3.f} } };
55 expectedEdgeSegments[2] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 0.5f, 1.f} }, { {1_e, 0.f, 1.f} }, { {0_e, 0.f, 1.f} }, { {0_e, 0.f, 1.f} }, { {0_e, 0.f, 0.5f} } };
56 expectedEdgeSegments[3] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 1 / 3.f, 1.f} }, { {1_e, 0.f, 1.f} }, { {1_e, 0.f, 1.f} }, {}, {} };
57 expectedEdgeSegments[4] = std::vector<std::vector<EdgeSegment>>{ { {1_e, 0.25f, 0.75f} }, { {1_e, 0.f, 1 - 1 / 3.f} }, { {1_e, 0.0f, 0.5f} }, {}, {} };
58
59 expectedPositiveEdges[0] = { {}, {}, {}, {}, {} };
60 for ( int i = 1; i < 5; ++i )
61 expectedPositiveEdges[i] = { {}, bsOne, bsOne, bsOne, bsOne };
62
63 for ( int i = 0; i < 5; ++i )
64 {
65 for ( int j = 0; j < 5; ++j )
66 check( { {float( i ), 0.f, 0.f}, {float( j ), 1.f, 0.f} }, 1.f, expectedEdgeSegments[i][j], expectedPositiveEdges[i][j] );
67 }
68}

Callers

nothing calls this directly

Calls 13

addFromPointsMethod · 0.80
push_backMethod · 0.80
subdivideWithPlaneFunction · 0.50
trimWithPlaneFunction · 0.50
dataMethod · 0.45
sizeMethod · 0.45
autoResizeSetMethod · 0.45
resizeMethod · 0.45
setMethod · 0.45
isClosedMethod · 0.45
validMethod · 0.45

Tested by

no test coverage detected