Commit: 20cab8f8f2396611505937cb5e6e1ed2592af4d8 Author: Hans Goudey Date: Thu Dec 15 14:05:01 2022 -0600 Branches: geometry-nodes-simulation https://developer.blender.org/rB20cab8f8f2396611505937cb5e6e1ed2592af4d8
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 c1f777f5d29..7cf1e7c0966 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -1365,19 +1365,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) @@ -1948,7 +1935,7 @@ ModifierTypeInfo modifierType_Nodes = { /* deformMatrices */ nullptr, /* deformVertsEM */ nullptr, /* deformMatricesEM */ nullptr, - /* modifyMesh */ modifyMesh, + /* modifyMesh */ nullptr, /* modifyGeometrySet */ modifyGeometrySet, /* initData */ initData, _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
