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

Reply via email to