Model_save_load. Step 5. Test cases are changed according to changes of API in step 4. Specific logic in obj_saver is removed for standardization of API.

This commit is contained in:
Bogdan Devichev 2014-11-28 18:48:35 +02:00
parent 42562b3ddf
commit 8b1d380ba5
3 changed files with 34 additions and 24 deletions

View File

@ -159,7 +159,7 @@ main(void)
1.0, 1.0, 1.0, 1.0),
evas_3d_material_shininess_set(50.0));
eo_do(mesh, evas_3d_mesh_save("saved_man", NULL));
eo_do(mesh, evas_3d_mesh_save("saved_man.obj", NULL));
mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas,
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));

View File

@ -9,17 +9,11 @@
#include "evas_private.h"
#define OPEN_FILE(extension)\
int length=strlen(file);\
char * extension = "."#extension;\
char * _##extension##_file_name = (char *)malloc(length+4);\
strcpy(_##extension##_file_name,file);\
strcpy(_##extension##_file_name+length,extension);\
FILE * _##extension##_file = fopen(_##extension##_file_name, "w+");\
free(_##extension##_file_name);
#define SAVE_GEOMETRICS(a, format)\
vb = &f->vertices[a];\
fprintf(_obj_file, "o %s\n",file);\
fprintf(_obj_file, "o %s\n",_obj_file_name);\
if (vb->data == NULL)\
{\
ERR("Reading of geometrics is failed.");\
@ -34,7 +28,7 @@
}
static void
_save_mesh(Evas_3D_Mesh_Data *pd, const char *file, Evas_3D_Mesh_Frame *f)
_save_mesh(Evas_3D_Mesh_Data *pd, const char *_obj_file_name, Evas_3D_Mesh_Frame *f)
{
Evas_3D_Vertex_Buffer *vb;
time_t current_time;
@ -45,7 +39,7 @@ _save_mesh(Evas_3D_Mesh_Data *pd, const char *file, Evas_3D_Mesh_Frame *f)
OPEN_FILE(obj)
if (!_obj_file)
{
ERR("File open '%s' for save failed", file);
ERR("File open '%s' for save failed", _obj_file_name);
return;
}
fprintf(_obj_file, "# Evas_3D saver OBJ v0.03 \n");//_obj_file created in macro
@ -69,7 +63,7 @@ _save_mesh(Evas_3D_Mesh_Data *pd, const char *file, Evas_3D_Mesh_Frame *f)
}
fprintf(_obj_file,"# Current time is %s \n", c_time_string);
fprintf(_obj_file,"mtllib %s.mtl \n\n", file);
fprintf(_obj_file,"mtllib %s.mtl \n\n", _obj_file_name);
/* Adding geometrics to file. */
if (f == NULL)
@ -95,14 +89,14 @@ _save_mesh(Evas_3D_Mesh_Data *pd, const char *file, Evas_3D_Mesh_Frame *f)
}
static void
_save_material(Evas_3D_Mesh_Data *pd EINA_UNUSED, const char *file, Evas_3D_Mesh_Frame *f)
_save_material(Evas_3D_Mesh_Data *pd EINA_UNUSED, const char *_mtl_file_name, Evas_3D_Mesh_Frame *f)
{
Evas_3D_Material_Data *mat = eo_data_scope_get(f->material, EVAS_3D_MATERIAL_CLASS);
OPEN_FILE(mtl)
if (!_mtl_file)
{
ERR("File open '%s' for save failed", file);
ERR("File open '%s' for save failed", _mtl_file_name);
return;
}
fprintf(_mtl_file, "# Evas_3D saver OBJ v0.03 \n");//_mtl_file created in macro
@ -129,9 +123,24 @@ _save_material(Evas_3D_Mesh_Data *pd EINA_UNUSED, const char *file, Evas_3D_Mesh
}
void
evas_model_save_file_obj(Evas_3D_Mesh *mesh, const char *file, Evas_3D_Mesh_Frame *f)
evas_model_save_file_obj(Evas_3D_Mesh *mesh, const char *_obj_file_name, Evas_3D_Mesh_Frame *f)
{
int len;
char *without_extention, *_mtl_extension, *_mtl_file_name;
len = strlen(_obj_file_name);
without_extention = (char*)malloc((len - 4) * sizeof(char));
_mtl_extension = ".mtl";
_mtl_file_name = (char *)malloc(len * sizeof(char));
memcpy(without_extention, _obj_file_name, len-4);
strcpy(_mtl_file_name, without_extention);
strcpy(_mtl_file_name + len - 4, _mtl_extension);
Evas_3D_Mesh_Data *pd = eo_data_scope_get(mesh, EVAS_3D_MESH_CLASS);
_save_mesh(pd, file, f);
_save_material(pd, file, f);
_save_mesh(pd, _obj_file_name, f);
_save_material(pd, _mtl_file_name, f);
free(without_extention);
free(_mtl_file_name);
}

View File

@ -34,7 +34,7 @@
src2 += f2->vertices[a].element_count; \
}
#define CHECK_MESHES_IN_FOLDER(folder, type, type_to_check) \
#define CHECK_MESHES_IN_FOLDER(folder, ext) \
it = eina_file_direct_ls(folder); \
EINA_ITERATOR_FOREACH(it, file) \
{ \
@ -42,9 +42,10 @@
mesh2 = eo_add(EVAS_3D_MESH_CLASS, e); \
fail_if(mesh == NULL); \
fail_if(mesh2 == NULL); \
eo_do(mesh, evas_3d_mesh_file_set(type, file->path, NULL)); \
eo_do(mesh, evas_3d_mesh_save(type_to_check, buffer, NULL)); \
eo_do(mesh2, evas_3d_mesh_file_set(type_to_check, buffer, NULL)); \
snprintf(buffer, PATH_MAX, "%s", ext); \
eo_do(mesh, evas_3d_mesh_file_set(file->path, NULL)); \
eo_do(mesh, evas_3d_mesh_save(buffer, NULL)); \
eo_do(mesh2, evas_3d_mesh_file_set(buffer, NULL)); \
res = _compare_meshes(mesh, mesh2); \
fail_if(res == 1); \
eo_del(mesh2); \
@ -111,10 +112,10 @@ START_TEST(evas_object_mesh_loader_saver)
snprintf(buffer, PATH_MAX, "%s", tmp);
CHECK_MESHES_IN_FOLDER(TESTS_OBJ_MESH_DIR, EVAS_3D_MESH_FILE_TYPE_OBJ, EVAS_3D_MESH_FILE_TYPE_EET)
CHECK_MESHES_IN_FOLDER(TESTS_MD2_MESH_DIR, EVAS_3D_MESH_FILE_TYPE_MD2, EVAS_3D_MESH_FILE_TYPE_EET)
CHECK_MESHES_IN_FOLDER(TESTS_PLY_MESH_DIR, EVAS_3D_MESH_FILE_TYPE_PLY, EVAS_3D_MESH_FILE_TYPE_EET)
CHECK_MESHES_IN_FOLDER(TESTS_PLY_MESH_DIR, EVAS_3D_MESH_FILE_TYPE_PLY, EVAS_3D_MESH_FILE_TYPE_PLY)
CHECK_MESHES_IN_FOLDER(TESTS_OBJ_MESH_DIR, ".eet")
CHECK_MESHES_IN_FOLDER(TESTS_MD2_MESH_DIR, ".eet")
CHECK_MESHES_IN_FOLDER(TESTS_PLY_MESH_DIR, ".eet")
CHECK_MESHES_IN_FOLDER(TESTS_PLY_MESH_DIR, ".ply")
eina_iterator_free(it);