Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_nodes.cc
| Show First 20 Lines • Show All 1,223 Lines • ▼ Show 20 Lines | static void modifyGeometry(ModifierData *md, | ||||
| if (first_output_socket->idname() != "NodeSocketGeometry") { | if (first_output_socket->idname() != "NodeSocketGeometry") { | ||||
| BKE_modifier_set_error(ctx->object, md, "Node group's first output must be a geometry"); | BKE_modifier_set_error(ctx->object, md, "Node group's first output must be a geometry"); | ||||
| geometry_set.clear(); | geometry_set.clear(); | ||||
| return; | return; | ||||
| } | } | ||||
| geometry_set = compute_geometry( | geometry_set = compute_geometry( | ||||
| tree, input_nodes, output_node, std::move(geometry_set), nmd, ctx); | tree, input_nodes, output_node, std::move(geometry_set), nmd, ctx); | ||||
| if (geometry_set.has_mesh() && ctx->object->type == OB_MESH) { | |||||
| /* Add #CD_ORIGINDEX layers if they don't exist already. This is required because the | |||||
| * #eModifierTypeFlag_SupportsMapping flag is set. If the layers did not exist before, it is | |||||
| * assumed that the output mesh does not have a mapping to the original mesh. */ | |||||
| Mesh &mesh = *geometry_set.get_mesh_for_write(); | |||||
| CustomData_add_layer(&mesh.vdata, CD_ORIGINDEX, CD_DEFAULT, nullptr, mesh.totvert); | |||||
| CustomData_add_layer(&mesh.edata, CD_ORIGINDEX, CD_DEFAULT, nullptr, mesh.totedge); | |||||
| CustomData_add_layer(&mesh.pdata, CD_ORIGINDEX, CD_DEFAULT, nullptr, mesh.totpoly); | |||||
| } | |||||
| } | } | ||||
| static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) | ||||
| { | { | ||||
| GeometrySet geometry_set = GeometrySet::create_with_mesh(mesh, GeometryOwnershipType::Editable); | GeometrySet geometry_set = GeometrySet::create_with_mesh(mesh, GeometryOwnershipType::Editable); | ||||
| modifyGeometry(md, ctx, geometry_set); | modifyGeometry(md, ctx, geometry_set); | ||||
| ▲ Show 20 Lines • Show All 475 Lines • Show Last 20 Lines | |||||