IO: add PLY export test coverage for loose edges and loose vertices

The input file contains a partial cube, with two regular faces, two
loose edges and one loose vertex. This checks whether the loose vertex
for example is included into the output when exporting with UVs
(loose verts do not have UVs in Blender, so they should get (0,0) UV
in PLY).
This commit is contained in:
Aras Pranckevicius
2023-03-20 09:30:53 +02:00
parent 4c70d9e11a
commit 5584c1cb53

View File

@@ -426,37 +426,107 @@ class ply_exporter_ply_data_test : public ply_export_test {
}
};
TEST_F(ply_exporter_ply_data_test, CubeLoadPLYDataVertices)
TEST_F(ply_exporter_ply_data_test, CubeLoadPLYData)
{
PLYExportParams params = {};
PlyData plyData = load_ply_data_from_blendfile(
"io_tests" SEP_STR "blend_geometry" SEP_STR "cube_all_data.blend", params);
PlyData plyData = load_ply_data_from_blendfile("io_tests/blend_geometry/cube_all_data.blend",
params);
EXPECT_EQ(plyData.vertices.size(), 8);
EXPECT_EQ(plyData.uv_coordinates.size(), 0);
}
TEST_F(ply_exporter_ply_data_test, CubeLoadPLYDataUV)
{
PLYExportParams params = {};
params.export_uv = true;
PlyData plyData = load_ply_data_from_blendfile(
"io_tests" SEP_STR "blend_geometry" SEP_STR "cube_all_data.blend", params);
PlyData plyData = load_ply_data_from_blendfile("io_tests/blend_geometry/cube_all_data.blend",
params);
EXPECT_EQ(plyData.vertices.size(), 8);
EXPECT_EQ(plyData.uv_coordinates.size(), 8);
}
TEST_F(ply_exporter_ply_data_test, CubeLooseEdgesLoadPLYData)
{
PLYExportParams params = {};
params.forward_axis = IO_AXIS_Y;
params.up_axis = IO_AXIS_Z;
params.global_scale = 1.0f;
PlyData plyData = load_ply_data_from_blendfile(
"io_tests/blend_geometry/cube_loose_edges_verts.blend", params);
float3 exp_vertices[] = {
{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1},
};
std::pair<int, int> exp_edges[] = {{7, 6}, {6, 4}};
uint32_t exp_face_sizes[] = {4, 4};
uint32_t exp_faces[] = {5, 1, 3, 7, 5, 4, 0, 1};
EXPECT_EQ(plyData.vertices.size(), ARRAY_SIZE(exp_vertices));
EXPECT_EQ(plyData.uv_coordinates.size(), 0);
EXPECT_EQ(plyData.edges.size(), ARRAY_SIZE(exp_edges));
EXPECT_EQ(plyData.face_sizes.size(), ARRAY_SIZE(exp_face_sizes));
EXPECT_EQ(plyData.face_vertices.size(), ARRAY_SIZE(exp_faces));
EXPECT_EQ_ARRAY(exp_vertices, plyData.vertices.data(), ARRAY_SIZE(exp_vertices));
EXPECT_EQ_ARRAY(exp_edges, plyData.edges.data(), ARRAY_SIZE(exp_edges));
EXPECT_EQ_ARRAY(exp_face_sizes, plyData.face_sizes.data(), ARRAY_SIZE(exp_face_sizes));
EXPECT_EQ_ARRAY(exp_faces, plyData.face_vertices.data(), ARRAY_SIZE(exp_faces));
}
TEST_F(ply_exporter_ply_data_test, CubeLooseEdgesLoadPLYDataUV)
{
PLYExportParams params = {};
params.forward_axis = IO_AXIS_Y;
params.up_axis = IO_AXIS_Z;
params.global_scale = 1.0f;
params.export_uv = true;
PlyData plyData = load_ply_data_from_blendfile(
"io_tests/blend_geometry/cube_loose_edges_verts.blend", params);
float3 exp_vertices[] = {
{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1},
};
float2 exp_uv[] = {
{0.625f, 0.5f},
{0.375f, 0.5f},
{0, 0},
{0.375f, 0.75f},
{0.625f, 0.25f},
{0.125f, 0.5f},
{0.375f, 0.25f},
{0, 0},
{0.125f, 0.75f},
};
std::pair<int, int> exp_edges[] = {{8, 7}, {7, 4}};
uint32_t exp_face_sizes[] = {4, 4};
uint32_t exp_faces[] = {5, 1, 3, 8, 6, 4, 0, 1};
EXPECT_EQ(plyData.vertices.size(), 9);
EXPECT_EQ(plyData.uv_coordinates.size(), 9);
EXPECT_EQ(plyData.edges.size(), ARRAY_SIZE(exp_edges));
EXPECT_EQ(plyData.face_sizes.size(), ARRAY_SIZE(exp_face_sizes));
EXPECT_EQ(plyData.face_vertices.size(), ARRAY_SIZE(exp_faces));
EXPECT_EQ_ARRAY(exp_vertices, plyData.vertices.data(), ARRAY_SIZE(exp_vertices));
EXPECT_EQ_ARRAY(exp_uv, plyData.uv_coordinates.data(), ARRAY_SIZE(exp_uv));
EXPECT_EQ_ARRAY(exp_edges, plyData.edges.data(), ARRAY_SIZE(exp_edges));
EXPECT_EQ_ARRAY(exp_face_sizes, plyData.face_sizes.data(), ARRAY_SIZE(exp_face_sizes));
EXPECT_EQ_ARRAY(exp_faces, plyData.face_vertices.data(), ARRAY_SIZE(exp_faces));
}
TEST_F(ply_exporter_ply_data_test, SuzanneLoadPLYDataUV)
{
PLYExportParams params = {};
params.export_uv = true;
PlyData plyData = load_ply_data_from_blendfile(
"io_tests" SEP_STR "blend_geometry" SEP_STR "suzanne_all_data.blend", params);
PlyData plyData = load_ply_data_from_blendfile("io_tests/blend_geometry/suzanne_all_data.blend",
params);
EXPECT_EQ(plyData.uv_coordinates.size(), 542);
}
TEST_F(ply_exporter_ply_data_test, CubeLoadPLYDataUVDisabled)
{
PLYExportParams params = {};
params.export_uv = false;
PlyData plyData = load_ply_data_from_blendfile(
"io_tests" SEP_STR "blend_geometry" SEP_STR "cube_all_data.blend", params);
EXPECT_EQ(plyData.uv_coordinates.size(), 0);
}
} // namespace blender::io::ply