diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2017-08-28 10:21:57 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2017-08-28 10:21:57 +0300 |
commit | fb7c003e9927c44cb8f05376555fd65cae86d379 (patch) | |
tree | 479356d22bfb7ae9d0ea8710dcbf4d2b7ccd3e3e | |
parent | caded470a6d0a9e002451ef1050032c4b882379d (diff) |
Simple CSV mesh loading for tests.strand_editmode
File paths are crude and preliminary.
-rw-r--r-- | tests/gtests/blenkernel/BKE_mesh_sample_test.cc | 27 | ||||
-rw-r--r-- | tests/gtests/blenkernel/BKE_mesh_test_util.cc | 43 | ||||
-rw-r--r-- | tests/gtests/blenkernel/BKE_mesh_test_util.h | 2 |
3 files changed, 69 insertions, 3 deletions
diff --git a/tests/gtests/blenkernel/BKE_mesh_sample_test.cc b/tests/gtests/blenkernel/BKE_mesh_sample_test.cc index 4efde074523..34c0b82342f 100644 --- a/tests/gtests/blenkernel/BKE_mesh_sample_test.cc +++ b/tests/gtests/blenkernel/BKE_mesh_sample_test.cc @@ -12,13 +12,17 @@ extern "C" { #include "MEM_guardedalloc.h" #include "BLI_math.h" +#include "BLI_path_util.h" #include "BLI_rand.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" +#include "BKE_appdir.h" #include "BKE_cdderivedmesh.h" #include "BKE_DerivedMesh.h" +#include "BKE_global.h" +#include "BKE_main.h" #include "BKE_mesh.h" #include "BKE_mesh_sample.h" } @@ -47,6 +51,7 @@ public: void load_mesh(const float (*verts)[3], int numverts, const int (*edges)[2], int numedges, const int *faces, const int *face_lengths, int numfaces); + void load_mesh(const char *filename); void unload_mesh(); void generate_samples_simple(struct MeshSampleGenerator *gen); @@ -86,6 +91,19 @@ void MeshSampleTest::load_mesh(const float (*verts)[3], int numverts, m_dm = CDDM_from_mesh(m_mesh); } +void MeshSampleTest::load_mesh(const char *filename) +{ + const char *folder = BKE_appdir_folder_id(BLENDER_DATAFILES, "tests"); + char path[FILE_MAX]; + + BLI_make_file_string(G.main->name, path, folder, filename); + + if (path[0]) { + m_mesh = BKE_mesh_test_from_csv(path); + m_dm = CDDM_from_mesh(m_mesh); + } +} + void MeshSampleTest::unload_mesh() { if (m_dm) { @@ -101,9 +119,12 @@ void MeshSampleTest::unload_mesh() void MeshSampleTest::SetUp() { - int numverts = ARRAY_SIZE(verts); - int numfaces = ARRAY_SIZE(face_lengths); - load_mesh(verts, numverts, NULL, 0, faces, face_lengths, numfaces); + load_mesh("suzanne.csv"); + if (!m_dm) { + int numverts = ARRAY_SIZE(verts); + int numfaces = ARRAY_SIZE(face_lengths); + load_mesh(verts, numverts, NULL, 0, faces, face_lengths, numfaces); + } m_samples = (MeshSample *)MEM_mallocN(sizeof(MeshSample) * m_numsamples, "mesh samples"); } diff --git a/tests/gtests/blenkernel/BKE_mesh_test_util.cc b/tests/gtests/blenkernel/BKE_mesh_test_util.cc index f72ee7c74d0..6dbed2c4533 100644 --- a/tests/gtests/blenkernel/BKE_mesh_test_util.cc +++ b/tests/gtests/blenkernel/BKE_mesh_test_util.cc @@ -1,5 +1,6 @@ /* Apache License, Version 2.0 */ +#include <fstream> #include <iostream> #include <iomanip> @@ -212,6 +213,48 @@ Mesh* BKE_mesh_test_from_data( return me; } +Mesh* BKE_mesh_test_from_csv(const char *filename) +{ + std::ifstream ifs (filename, std::ifstream::in); + + char delim; + + int numverts, numloops, numfaces; + float (*verts)[3] = NULL; + int *loops = NULL; + int *face_lengths = NULL; + + ifs >> numverts; + ifs >> delim; + verts = (float (*)[3])MEM_mallocN(sizeof(float[3]) * numverts, "verts"); + for (int i = 0; i < numverts; ++i) { + ifs >> verts[i][0]; + ifs >> delim; + ifs >> verts[i][1]; + ifs >> delim; + ifs >> verts[i][2]; + ifs >> delim; + } + + ifs >> numloops; + ifs >> delim; + loops = (int *)MEM_mallocN(sizeof(int) * numloops, "loops"); + for (int i = 0; i < numloops; ++i) { + ifs >> loops[i]; + ifs >> delim; + } + + ifs >> numfaces; + ifs >> delim; + face_lengths = (int *)MEM_mallocN(sizeof(int) * numfaces, "face_lengths"); + for (int i = 0; i < numfaces; ++i) { + ifs >> face_lengths[i]; + ifs >> delim; + } + + return BKE_mesh_test_from_data(verts, numverts, NULL, 0, loops, face_lengths, numfaces); +} + void BKE_mesh_test_dump_verts(Mesh *me, std::ostream &str) { int numverts = me->totvert; diff --git a/tests/gtests/blenkernel/BKE_mesh_test_util.h b/tests/gtests/blenkernel/BKE_mesh_test_util.h index e0c5c0d38ff..6ab5f9b1236 100644 --- a/tests/gtests/blenkernel/BKE_mesh_test_util.h +++ b/tests/gtests/blenkernel/BKE_mesh_test_util.h @@ -9,6 +9,8 @@ struct Mesh* BKE_mesh_test_from_data( const int (*edges)[2], int numedges, const int *loops, const int *face_lengths, int numfaces); +struct Mesh* BKE_mesh_test_from_csv(const char *filename); + void BKE_mesh_test_dump_verts(struct Mesh *me, std::ostream &str); void BKE_mesh_test_dump_edges(struct Mesh *me, std::ostream &str); void BKE_mesh_test_dump_faces(struct Mesh *me, std::ostream &str); |