[Bf-blender-cvs] [b1494bcea7b] master: Geometry Nodes: Add error message when applying modifier with no mesh

Hans Goudey noreply at git.blender.org
Thu Dec 15 21:22:29 CET 2022


Commit: b1494bcea7b6bb6088c5ad245889fa687ed23699
Author: Hans Goudey
Date:   Thu Dec 15 14:05:01 2022 -0600
Branches: master
https://developer.blender.org/rBb1494bcea7b6bb6088c5ad245889fa687ed23699

Geometry Nodes: Add error message when applying modifier with no mesh

If the resulting geometry from applying a geometry nodes modifier
contains no mesh, give an error message. This gives people something to
search and makes the behavior more purposeful.

Also remove the `modifyMesh` implementation from the geometry nodes
modifier, since it isn't necessary anymore. And remove the existing
"Modifier returned error, skipping apply" message which was cryptic
and redundant if applying returns an actual error message.

Resolves T103229

Differential Revision: https://developer.blender.org/D16782

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

M	source/blender/editors/object/object_modifier.cc
M	source/blender/modifiers/intern/MOD_nodes.cc

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

diff --git a/source/blender/editors/object/object_modifier.cc b/source/blender/editors/object/object_modifier.cc
index 2fa37f205ab..2401fdf2d93 100644
--- a/source/blender/editors/object/object_modifier.cc
+++ b/source/blender/editors/object/object_modifier.cc
@@ -694,7 +694,8 @@ static Mesh *create_applied_mesh_for_modifier(Depsgraph *depsgraph,
                                               Object *ob_eval,
                                               ModifierData *md_eval,
                                               const bool use_virtual_modifiers,
-                                              const bool build_shapekey_layers)
+                                              const bool build_shapekey_layers,
+                                              ReportList *reports)
 {
   Mesh *me = ob_eval->runtime.data_orig ? reinterpret_cast<Mesh *>(ob_eval->runtime.data_orig) :
                                           reinterpret_cast<Mesh *>(ob_eval->data);
@@ -766,9 +767,21 @@ static Mesh *create_applied_mesh_for_modifier(Depsgraph *depsgraph,
       add_shapekey_layers(*mesh_temp, *me);
     }
 
-    result = mti->modifyMesh(md_eval, &mectx, mesh_temp);
-    if (mesh_temp != result) {
-      BKE_id_free(nullptr, mesh_temp);
+    if (mti->modifyGeometrySet) {
+      GeometrySet geometry_set = GeometrySet::create_with_mesh(mesh_temp,
+                                                               GeometryOwnershipType::Owned);
+      mti->modifyGeometrySet(md_eval, &mectx, &geometry_set);
+      if (!geometry_set.has_mesh()) {
+        BKE_report(reports, RPT_ERROR, "Evaluated geometry from modifier does not contain a mesh");
+        return nullptr;
+      }
+      result = geometry_set.get_component_for_write<MeshComponent>().release();
+    }
+    else {
+      result = mti->modifyMesh(md_eval, &mectx, mesh_temp);
+      if (mesh_temp != result) {
+        BKE_id_free(nullptr, mesh_temp);
+      }
     }
   }
 
@@ -817,7 +830,8 @@ static bool modifier_apply_shape(Main *bmain,
                                                           DEG_get_evaluated_object(depsgraph, ob),
                                                           md_eval,
                                                           true,
-                                                          false);
+                                                          false,
+                                                          reports);
     if (!mesh_applied) {
       BKE_report(reports, RPT_ERROR, "Modifier is disabled or returned error, skipping apply");
       return false;
@@ -883,9 +897,9 @@ static bool modifier_apply_obdata(
           /* It's important not to apply virtual modifiers (e.g. shape-keys) because they're kept,
            * causing them to be applied twice, see: T97758. */
           false,
-          true);
+          true,
+          reports);
       if (!mesh_applied) {
-        BKE_report(reports, RPT_ERROR, "Modifier returned error, skipping apply");
         return false;
       }
 
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index f5ede42b0ad..64261ae5b10 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -1309,19 +1309,6 @@ static void modifyGeometry(ModifierData *md,
   }
 }
 
-static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
-{
-  GeometrySet geometry_set = GeometrySet::create_with_mesh(mesh, GeometryOwnershipType::Editable);
-
-  modifyGeometry(md, ctx, geometry_set);
-
-  Mesh *new_mesh = geometry_set.get_component_for_write<MeshComponent>().release();
-  if (new_mesh == nullptr) {
-    return BKE_mesh_new_nomain(0, 0, 0, 0, 0);
-  }
-  return new_mesh;
-}
-
 static void modifyGeometrySet(ModifierData *md,
                               const ModifierEvalContext *ctx,
                               GeometrySet *geometry_set)
@@ -1882,7 +1869,7 @@ ModifierTypeInfo modifierType_Nodes = {
     /* deformMatrices */ nullptr,
     /* deformVertsEM */ nullptr,
     /* deformMatricesEM */ nullptr,
-    /* modifyMesh */ modifyMesh,
+    /* modifyMesh */ nullptr,
     /* modifyGeometrySet */ modifyGeometrySet,
 
     /* initData */ initData,



More information about the Bf-blender-cvs mailing list