Commit: af6c8c5778263caad5f6fa78bbf0c1371646295f
Author: Hans Goudey
Date: Thu Jan 6 07:21:42 2022 -0600
Branches: temp-geometry-nodes-extrude-mesh
https://developer.blender.org/rBaf6c8c5778263caad5f6fa78bbf0c1371646295f
Add the strength input to scale the offset input
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index bab1d5b9554..ed297f78866 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -37,7 +37,8 @@ static void node_declare(NodeDeclarationBuilder &b)
{
b.add_input<decl::Geometry>("Mesh").supported_type(GEO_COMPONENT_TYPE_MESH);
b.add_input<decl::Bool>(N_("Selection")).default_value(true).supports_field().hide_value();
-
b.add_input<decl::Vector>(N_("Offset")).supports_field().subtype(PROP_TRANSLATION);
+
b.add_input<decl::Vector>(N_("Offset")).subtype(PROP_TRANSLATION).implicit_field().hide_value();
+
b.add_input<decl::Float>(N_("Strength")).default_value(1.0f).supports_field();
b.add_input<decl::Bool>(N_("Individual"));
b.add_output<decl::Geometry>("Mesh");
b.add_output<decl::Bool>(N_("Top")).field_source();
@@ -1202,9 +1203,18 @@ static void node_geo_exec(GeoNodeExecParams params)
GeometrySet geometry_set = params.extract_input<GeometrySet>("Mesh");
Field<bool> selection = params.extract_input<Field<bool>>("Selection");
Field<float3> offset = params.extract_input<Field<float3>>("Offset");
+ Field<float> strength = params.extract_input<Field<float>>("Strength");
const NodeGeometryExtrudeMesh &storage = node_storage(params.node());
GeometryNodeExtrudeMeshMode mode =
static_cast<GeometryNodeExtrudeMeshMode>(storage.mode);
+ /* Create a combined field from the offset and the strength so the field
evaluator
+ * can take care of the multiplication and to simplify each extrude
function. */
+ static fn::CustomMF_SI_SI_SO<float3, float, float3> multiply_fn{
+ "Scale", [](const float3 &offset, const float strength) { return offset
* strength; }};
+ std::shared_ptr<FieldOperation> multiply_op =
std::make_shared<FieldOperation>(
+ FieldOperation(multiply_fn, {std::move(offset), std::move(strength)}));
+ const Field<float3> final_offset{std::move(multiply_op)};
+
AttributeOutputs attribute_outputs;
if (params.output_is_required("Top")) {
attribute_outputs.top_id = StrongAnonymousAttributeID("Top");
@@ -1221,17 +1231,17 @@ static void node_geo_exec(GeoNodeExecParams params)
MeshComponent &component =
geometry_set.get_component_for_write<MeshComponent>();
switch (mode) {
case GEO_NODE_EXTRUDE_MESH_VERTICES:
- extrude_mesh_vertices(component, selection, offset,
attribute_outputs);
+ extrude_mesh_vertices(component, selection, final_offset,
attribute_outputs);
break;
case GEO_NODE_EXTRUDE_MESH_EDGES:
- extrude_mesh_edges(component, selection, offset, attribute_outputs);
+ extrude_mesh_edges(component, selection, final_offset,
attribute_outputs);
break;
case GEO_NODE_EXTRUDE_MESH_FACES: {
if (extrude_individual) {
- extrude_individual_mesh_faces(component, selection, offset,
attribute_outputs);
+ extrude_individual_mesh_faces(component, selection, final_offset,
attribute_outputs);
}
else {
- extrude_mesh_faces(component, selection, offset,
attribute_outputs);
+ extrude_mesh_faces(component, selection, final_offset,
attribute_outputs);
}
break;
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs