From 0442a656561e7d22e942cfb2184d5020e7ea7b35 Mon Sep 17 00:00:00 2001 From: rsjtdrjgfuzkfg Date: Sun, 8 Jan 2023 17:40:09 +0100 Subject: obj: Avoid empty names and meshes This commit updates the obj importer to properly name imported meshes and permits it to skip meshes that do not contain geometry. This fixes at least one crash and several warnings and avoids unnecessary meshes being generated when importing obj files that do not contain geometry that is not assigned to a named object (such as when exporting from Blender). --- editor/import/resource_importer_obj.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'editor/import/resource_importer_obj.cpp') diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index f1fd1d5a03..ad6d41e10c 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -218,7 +218,8 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ Vector normals; Vector uvs; Vector colors; - String name; + const String default_name = "Mesh"; + String name = default_name; HashMap>> material_map; @@ -395,9 +396,12 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, bool p_ if (l.begins_with("o ") || f->eof_reached()) { if (!p_single_mesh) { - mesh->set_name(name); - r_meshes.push_back(mesh); - mesh.instantiate(); + if (mesh->get_surface_count() > 0) { + mesh->set_name(name); + r_meshes.push_back(mesh); + mesh.instantiate(); + } + name = default_name; current_group = ""; current_material = ""; } @@ -460,6 +464,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, co for (const Ref &m : meshes) { Ref mesh; mesh.instantiate(); + mesh->set_name(m->get_name()); for (int i = 0; i < m->get_surface_count(); i++) { mesh->add_surface(m->surface_get_primitive_type(i), m->surface_get_arrays(i), Array(), Dictionary(), m->surface_get_material(i)); } -- cgit v1.2.3