[Bf-blender-cvs] [b21c16b627c] curve-nodes-modifier: Fix surface objects again

Hans Goudey noreply at git.blender.org
Tue Jul 13 01:40:49 CEST 2021


Commit: b21c16b627c1821f9c427043d7cb75f5f8ae4fa8
Author: Hans Goudey
Date:   Tue Jul 6 16:35:11 2021 -0500
Branches: curve-nodes-modifier
https://developer.blender.org/rBb21c16b627c1821f9c427043d7cb75f5f8ae4fa8

Fix surface objects again

===================================================================

M	source/blender/blenkernel/intern/displist.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/displist.cc b/source/blender/blenkernel/intern/displist.cc
index 0bf9f1f3252..0df00e4c362 100644
--- a/source/blender/blenkernel/intern/displist.cc
+++ b/source/blender/blenkernel/intern/displist.cc
@@ -836,10 +836,10 @@ void BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph,
  * \return True if the deformed curve control point data should be implicitly
  * converted directly to a mesh, or false it can be left as curve data via #CurveEval.
  */
-static bool do_mesh_conversion(const Curve *curve,
-                               ModifierData *first_modifier,
-                               const Scene *scene,
-                               const ModifierMode required_mode)
+static bool do_curve_implicit_mesh_conversion(const Curve *curve,
+                                              ModifierData *first_modifier,
+                                              const Scene *scene,
+                                              const ModifierMode required_mode)
 {
   /* Do implicit conversion to mesh with the object bevel mode. */
   if (curve->bevel_mode == CU_BEV_MODE_OBJECT && curve->bevobj != nullptr) {
@@ -902,7 +902,7 @@ static GeometrySet curve_calc_modifiers_post(Depsgraph *depsgraph,
                          pretessellatePoint->next;
 
   GeometrySet geometry_set;
-  if (ELEM(ob->type, OB_CURVE, OB_FONT) && do_mesh_conversion(cu, md, scene, required_mode)) {
+  if (ob->type == OB_SURF || do_curve_implicit_mesh_conversion(cu, md, scene, required_mode)) {
     Mesh *mesh = BKE_mesh_new_nomain_from_curve_displist(ob, dispbase);
     /* Copy materials, since BKE_mesh_new_nomain_from_curve_displist() doesn't. */
     mesh->mat = (Material **)MEM_dupallocN(cu->mat);
@@ -1084,6 +1084,9 @@ static void evaluate_surface_object(Depsgraph *depsgraph,
   curve_to_filledpoly(cu, r_dispbase);
   GeometrySet geometry_set = curve_calc_modifiers_post(
       depsgraph, scene, ob, r_dispbase, for_render);
+  if (!geometry_set.has_mesh()) {
+    geometry_set.replace_mesh(BKE_mesh_new_nomain(0, 0, 0, 0, 0));
+  }
   MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
   *r_final = mesh_component.release();
 }



More information about the Bf-blender-cvs mailing list