diff options
author | Aras Pranckevicius <aras@nesnausk.org> | 2022-08-03 09:49:56 +0300 |
---|---|---|
committer | Aras Pranckevicius <aras@nesnausk.org> | 2022-08-03 09:49:56 +0300 |
commit | 89f0fedb5cfcde8d2d29f4cf08f3cfa194c375b2 (patch) | |
tree | 6ad75e76870c045a5908ef4101a41502af2bbbb5 /source/blender/io/wavefront_obj | |
parent | ead8260a49debaeb69967b2b4d2b62bf97333328 (diff) |
Fix T97769: new OBJ exporter does not replace spaces in object names
The Python based exporter was replacing spaces with underscores
in object/group names, mostly to handle cases where names could begin
or end with spaces. The new exporter was not doing that. Note: spaces
in material names were already handled by the new exporter.
Fixes T97769. Updated test coverage expectations; one of the test
files has an object with a space in the name.
Diffstat (limited to 'source/blender/io/wavefront_obj')
-rw-r--r-- | source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc | 15 | ||||
-rw-r--r-- | source/blender/io/wavefront_obj/tests/obj_importer_tests.cc | 2 |
2 files changed, 12 insertions, 5 deletions
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc index 731587bfcea..36a9cf1b9ae 100644 --- a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc +++ b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc @@ -179,13 +179,19 @@ void OBJWriter::write_mtllib_name(const StringRefNull mtl_filepath) const fh.write_to_file(outfile_); } +static void spaces_to_underscores(std::string &r_name) +{ + std::replace(r_name.begin(), r_name.end(), ' ', '_'); +} + void OBJWriter::write_object_name(FormatHandler<eFileType::OBJ> &fh, const OBJMesh &obj_mesh_data) const { - const char *object_name = obj_mesh_data.get_object_name(); + std::string object_name = obj_mesh_data.get_object_name(); + spaces_to_underscores(object_name); if (export_params_.export_object_groups) { - const std::string object_name = obj_mesh_data.get_object_name(); - const char *mesh_name = obj_mesh_data.get_object_mesh_name(); + std::string mesh_name = obj_mesh_data.get_object_mesh_name(); + spaces_to_underscores(mesh_name); fh.write<eOBJSyntaxElement::object_group>(object_name + "_" + mesh_name); return; } @@ -389,7 +395,8 @@ void OBJWriter::write_poly_elements(FormatHandler<eFileType::OBJ> &fh, mat_name = MATERIAL_GROUP_DISABLED; } if (export_params_.export_material_groups) { - const std::string object_name = obj_mesh_data.get_object_name(); + std::string object_name = obj_mesh_data.get_object_name(); + spaces_to_underscores(object_name); fh.write<eOBJSyntaxElement::object_group>(object_name + "_" + mat_name); } buf.write<eOBJSyntaxElement::poly_usemtl>(mat_name); diff --git a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc index 4055d892332..339f672c3e0 100644 --- a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc +++ b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc @@ -290,7 +290,7 @@ TEST_F(obj_importer_test, import_nurbs_mesh) { Expectation expect[] = { {"OBCube", OB_MESH, 8, 12, 6, 24, float3(1, 1, -1), float3(-1, 1, 1)}, - {"OBTorus Knot", + {"OBTorus_Knot", OB_MESH, 108, 108, |