| 9 | { |
| 10 | |
| 11 | TEST( 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 | } |
nothing calls this directly
no test coverage detected