diff --git a/src/examples/evas/evas-3d-obj.c b/src/examples/evas/evas-3d-obj.c index 2634502355..d19a36db91 100644 --- a/src/examples/evas/evas-3d-obj.c +++ b/src/examples/evas/evas-3d-obj.c @@ -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)); diff --git a/src/modules/evas/model_savers/obj/evas_model_save_obj.c b/src/modules/evas/model_savers/obj/evas_model_save_obj.c index 35773e304f..1cc7e8a744 100644 --- a/src/modules/evas/model_savers/obj/evas_model_save_obj.c +++ b/src/modules/evas/model_savers/obj/evas_model_save_obj.c @@ -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); } diff --git a/src/tests/evas/evas_test_mesh.c b/src/tests/evas/evas_test_mesh.c index 7bfa61381c..dde1dd348f 100644 --- a/src/tests/evas/evas_test_mesh.c +++ b/src/tests/evas/evas_test_mesh.c @@ -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);