[Bf-blender-cvs] [009b37719dd] soc-2020-io-performance: Fix new Geometry creation with empty initial object.
Ankit Meel
noreply at git.blender.org
Mon Aug 10 23:23:10 CEST 2020
Commit: 009b37719ddd49bd610de0429a6a37adc01c3f5e
Author: Ankit Meel
Date: Tue Aug 11 02:52:10 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB009b37719ddd49bd610de0429a6a37adc01c3f5e
Fix new Geometry creation with empty initial object.
===================================================================
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_file_reader.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_mesh.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_nurbs.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.cc
M source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
===================================================================
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_file_reader.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_file_reader.cc
index f44a64322fe..1f4ceb5ce83 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_file_reader.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_file_reader.cc
@@ -201,9 +201,14 @@ static Geometry *create_geometry(Geometry *const prev_geometry,
if (prev_geometry && prev_geometry->get_geom_type() == GEOM_MESH) {
/* After the creation of a Geometry instance, at least one element has been found in the OBJ
* file that indicates that it is a mesh. */
- if (prev_geometry->tot_face_elems() || prev_geometry->tot_normals()) {
+ if (prev_geometry->tot_face_elems() || prev_geometry->tot_normals() ||
+ prev_geometry->tot_verts()) {
return new_geometry();
}
+ if (new_type == GEOM_MESH) {
+ prev_geometry->set_geometry_name(name);
+ return prev_geometry;
+ }
if (new_type == GEOM_CURVE) {
/* The object originally created is not a mesh now that curve data
* follows the vertex coordinates list. */
@@ -259,7 +264,6 @@ void OBJParser::parse_and_store(Vector<std::unique_ptr<Geometry>> &all_geometrie
mtl_libraries_.append(string(rest_line));
}
else if (line_key == "o") {
- /* Update index offsets to keep track of objects which have claimed their vertices. */
shaded_smooth = false;
object_group = {};
current_geometry = create_geometry(current_geometry, GEOM_MESH, rest_line, all_geometries);
@@ -300,7 +304,8 @@ void OBJParser::parse_and_store(Vector<std::unique_ptr<Geometry>> &all_geometrie
}
else if (line_key == "g") {
object_group = rest_line;
- if (object_group.find("off") != string::npos || object_group.find("null") != string::npos) {
+ if (object_group.find("off") != string::npos || object_group.find("null") != string::npos ||
+ object_group.find("default") != string::npos) {
/* Set group for future elements like faces or curves to empty. */
object_group = {};
}
@@ -415,7 +420,6 @@ void OBJParser::parse_and_store(Vector<std::unique_ptr<Geometry>> &all_geometrie
}
else if (line_key == "end") {
/* Curves mark their end this way. */
- object_group = "";
}
else if (line_key == "usemtl") {
current_geometry->material_name_.append(string(rest_line));
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mesh.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mesh.cc
index 182c4288851..86788916641 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mesh.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_mesh.cc
@@ -49,7 +49,7 @@ MeshFromGeometry::MeshFromGeometry(Main *bmain,
const Map<std::string, MTLMaterial> &materials)
: mesh_geometry_(mesh_geometry), global_vertices_(global_vertices)
{
- std::string ob_name{mesh_geometry_.geometry_name()};
+ std::string ob_name{mesh_geometry_.get_geometry_name()};
if (ob_name.empty()) {
ob_name = "Untitled";
}
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_nurbs.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_nurbs.cc
index b75dec6ccc0..6aca7eb7a89 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_nurbs.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_nurbs.cc
@@ -87,14 +87,15 @@ CurveFromGeometry::CurveFromGeometry(Main *bmain,
const GlobalVertices &global_vertices)
: curve_geometry_(geometry), global_vertices_(global_vertices)
{
- std::string ob_name = curve_geometry_.geometry_name();
+ std::string ob_name{curve_geometry_.get_geometry_name()};
if (ob_name.empty() && !curve_geometry_.group().empty()) {
ob_name = curve_geometry_.group();
}
else {
ob_name = "Untitled";
}
- blender_curve_.reset(BKE_curve_add(bmain, curve_geometry_.geometry_name().c_str(), OB_CURVE));
+
+ blender_curve_.reset(BKE_curve_add(bmain, ob_name.c_str(), OB_CURVE));
curve_object_.reset(BKE_object_add_only_object(bmain, OB_CURVE, ob_name.c_str()));
blender_curve_->flag = CU_3D;
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.cc b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.cc
index ec73d74fd03..a9d161e8d31 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.cc
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.cc
@@ -50,11 +50,16 @@ void Geometry::set_geom_type(const eGeometryType new_type)
geom_type_ = new_type;
}
-const std::string &Geometry::geometry_name() const
+std::string_view Geometry::get_geometry_name() const
{
return geometry_name_;
}
+void Geometry::set_geometry_name(std::string_view new_name)
+{
+ geometry_name_ = std::string(new_name);
+}
+
/**
* Return the vertex index ranging from zero to total vertices in a Geometry instance.
* Key ranges from zero to total vertices in an OBJ file.
diff --git a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
index b94cb953e31..598b4fca80c 100644
--- a/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
+++ b/source/blender/io/wavefront_obj/intern/wavefront_obj_im_objects.hh
@@ -135,7 +135,8 @@ class Geometry {
eGeometryType get_geom_type() const;
void set_geom_type(const eGeometryType new_type);
- const std::string &geometry_name() const;
+ std::string_view get_geometry_name() const;
+ void set_geometry_name(std::string_view new_name);
int vertex_indices_lookup(const int key) const;
int64_t tot_verts() const;
Span<FaceElement> face_elements() const;
More information about the Bf-blender-cvs
mailing list