[Bf-blender-cvs] [4e78822c282] 2d: Wip

Johnny Matthews noreply at git.blender.org
Wed Feb 2 19:04:56 CET 2022


Commit: 4e78822c282de471af4bafa603b18df1f790bfb6
Author: Johnny Matthews
Date:   Tue Feb 1 15:16:03 2022 -0600
Branches: 2d
https://developer.blender.org/rB4e78822c282de471af4bafa603b18df1f790bfb6

Wip

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

M	source/blender/blenkernel/intern/node_tree_update.cc
M	source/blender/editors/space_node/drawnode.cc
M	source/blender/editors/space_node/node_relationships.cc
M	source/blender/makesrna/intern/rna_attribute.c
M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/geometry/node_geometry_tree.cc
M	source/blender/nodes/geometry/node_geometry_util.cc
M	source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_uv.cc
M	source/blender/nodes/geometry/nodes/node_geo_viewer.cc
M	source/blender/nodes/intern/node_exec.cc
M	source/blender/nodes/intern/node_geometry_exec.cc
M	source/blender/nodes/intern/node_socket_declarations.cc
M	source/blender/nodes/intern/node_util.c
M	source/blender/nodes/intern/node_util.h

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

diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc
index 0555707b64c..9fafb57ae54 100644
--- a/source/blender/blenkernel/intern/node_tree_update.cc
+++ b/source/blender/blenkernel/intern/node_tree_update.cc
@@ -618,6 +618,18 @@ static int get_internal_link_type_priority(const bNodeSocketType *from, const bN
           return 1;
       }
       return -1;
+    // case SOCK_VECTOR2D:
+    //   switch (from->type) {
+    //     case SOCK_VECTOR2D:
+    //       return 4;
+    //     case SOCK_FLOAT:
+    //       return 3;
+    //     case SOCK_INT:
+    //       return 2;
+    //     case SOCK_BOOLEAN:
+    //       return 1;
+    //   }
+    //   return -1;
     case SOCK_FLOAT:
       switch (from->type) {
         case SOCK_FLOAT:
diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc
index 5dd285a6099..6b5c00ed5bb 100644
--- a/source/blender/editors/space_node/drawnode.cc
+++ b/source/blender/editors/space_node/drawnode.cc
@@ -1434,6 +1434,13 @@ static void std_node_socket_interface_draw(bContext *UNUSED(C), uiLayout *layout
       uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
       break;
     }
+    case SOCK_VECTOR2D: {
+      uiItemR(col, ptr, "default_value", UI_ITEM_R_EXPAND, IFACE_("Default"), ICON_NONE);
+      uiLayout *sub = uiLayoutColumn(col, true);
+      uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
+      uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
+      break;
+    }
     case SOCK_BOOLEAN:
     case SOCK_RGBA:
     case SOCK_STRING: {
diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc
index 740d872bfc5..d7f0514cbb7 100644
--- a/source/blender/editors/space_node/node_relationships.cc
+++ b/source/blender/editors/space_node/node_relationships.cc
@@ -471,6 +471,7 @@ static bool socket_can_be_viewed(const OutputSocketRef &socket)
               SOCK_GEOMETRY,
               SOCK_FLOAT,
               SOCK_VECTOR,
+              SOCK_VECTOR2D,
               SOCK_INT,
               SOCK_BOOLEAN,
               SOCK_RGBA);
@@ -485,6 +486,8 @@ static CustomDataType socket_type_to_custom_data_type(const eNodeSocketDatatype
       return CD_PROP_INT32;
     case SOCK_VECTOR:
       return CD_PROP_FLOAT3;
+    case SOCK_VECTOR2D:
+      return CD_PROP_FLOAT2;
     case SOCK_BOOLEAN:
       return CD_PROP_BOOL;
     case SOCK_RGBA:
diff --git a/source/blender/makesrna/intern/rna_attribute.c b/source/blender/makesrna/intern/rna_attribute.c
index 35da353a043..1ea9b9ecbd1 100644
--- a/source/blender/makesrna/intern/rna_attribute.c
+++ b/source/blender/makesrna/intern/rna_attribute.c
@@ -123,6 +123,8 @@ static StructRNA *srna_by_custom_data_layer_type(const CustomDataType type)
       return &RNA_IntAttribute;
     case CD_PROP_FLOAT3:
       return &RNA_FloatVectorAttribute;
+    case CD_PROP_FLOAT2:
+      return &RNA_Float2Attribute;
     case CD_PROP_COLOR:
       return &RNA_FloatColorAttribute;
     case CD_MLOOPCOL:
@@ -131,8 +133,6 @@ static StructRNA *srna_by_custom_data_layer_type(const CustomDataType type)
       return &RNA_StringAttribute;
     case CD_PROP_BOOL:
       return &RNA_BoolAttribute;
-    case CD_PROP_FLOAT2:
-      return &RNA_Float2Attribute;
     default:
       return NULL;
   }
@@ -238,6 +238,9 @@ static void rna_Attribute_data_begin(CollectionPropertyIterator *iter, PointerRN
     case CD_PROP_FLOAT3:
       struct_size = sizeof(float[3]);
       break;
+    case CD_PROP_FLOAT2:
+      struct_size = sizeof(float[2]);
+      break;
     case CD_PROP_COLOR:
       struct_size = sizeof(MPropCol);
       break;
@@ -250,9 +253,6 @@ static void rna_Attribute_data_begin(CollectionPropertyIterator *iter, PointerRN
     case CD_PROP_BOOL:
       struct_size = sizeof(MBoolProperty);
       break;
-    case CD_PROP_FLOAT2:
-      struct_size = sizeof(float[2]);
-      break;
     default:
       struct_size = 0;
       length = 0;
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 83775be8c9e..24a8a9621c5 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -105,6 +105,7 @@
 using blender::Array;
 using blender::ColorGeometry4f;
 using blender::destruct_ptr;
+using blender::float2;
 using blender::float3;
 using blender::FunctionRef;
 using blender::IndexRange;
@@ -366,7 +367,8 @@ static const std::string attribute_name_suffix = "_attribute_name";
  */
 static bool socket_type_has_attribute_toggle(const bNodeSocket &socket)
 {
-  return ELEM(socket.type, SOCK_FLOAT, SOCK_VECTOR, SOCK_BOOLEAN, SOCK_RGBA, SOCK_INT);
+  return ELEM(
+      socket.type, SOCK_FLOAT, SOCK_VECTOR, SOCK_VECTOR2D, SOCK_BOOLEAN, SOCK_RGBA, SOCK_INT);
 }
 
 /**
@@ -425,6 +427,24 @@ static IDProperty *id_property_create_from_socket(const bNodeSocket &socket)
       }
       return property;
     }
+    case SOCK_VECTOR2D: {
+      bNodeSocketValueVector2d *value = (bNodeSocketValueVector2d *)socket.default_value;
+      IDPropertyTemplate idprop = {0};
+      idprop.array.len = 2;
+      idprop.array.type = IDP_FLOAT;
+      IDProperty *property = IDP_New(IDP_ARRAY, &idprop, socket.identifier);
+      copy_v2_v2((float *)IDP_Array(property), value->value);
+      IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)IDP_ui_data_ensure(property);
+      ui_data->base.rna_subtype = value->subtype;
+      ui_data->min = ui_data->soft_min = (double)value->min;
+      ui_data->max = ui_data->soft_max = (double)value->max;
+      ui_data->default_array = (double *)MEM_mallocN(sizeof(double[2]), "mod_prop_default");
+      ui_data->default_array_len = 2;
+      for (const int i : IndexRange(2)) {
+        ui_data->default_array[i] = double(value->value[i]);
+      }
+      return property;
+    }
     case SOCK_RGBA: {
       bNodeSocketValueRGBA *value = (bNodeSocketValueRGBA *)socket.default_value;
       IDPropertyTemplate idprop = {0};
@@ -501,6 +521,8 @@ static bool id_property_type_matches_socket(const bNodeSocket &socket, const IDP
       return ELEM(property.type, IDP_FLOAT, IDP_DOUBLE);
     case SOCK_INT:
       return property.type == IDP_INT;
+    case SOCK_VECTOR2D:
+      return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 2;
     case SOCK_VECTOR:
       return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 3;
     case SOCK_RGBA:
@@ -547,6 +569,12 @@ static void init_socket_cpp_value_from_property(const IDProperty &property,
       new (r_value) ValueOrField<float3>(value);
       break;
     }
+    case SOCK_VECTOR2D: {
+      float2 value;
+      copy_v2_v2(value, (const float *)IDP_Array(&property));
+      new (r_value) ValueOrField<float2>(value);
+      break;
+    }
     case SOCK_RGBA: {
       blender::ColorGeometry4f value;
       copy_v4_v4((float *)value, (const float *)IDP_Array(&property));
diff --git a/source/blender/nodes/geometry/node_geometry_tree.cc b/source/blender/nodes/geometry/node_geometry_tree.cc
index a6dec71ed06..cddb8a6eae9 100644
--- a/source/blender/nodes/geometry/node_geometry_tree.cc
+++ b/source/blender/nodes/geometry/node_geometry_tree.cc
@@ -91,8 +91,8 @@ static bool geometry_node_tree_validate_link(eNodeSocketDatatype type_a,
 {
   /* Geometry, string, object, material, texture and collection sockets can only be connected to
    * themselves. The other types can be converted between each other. */
-  if (ELEM(type_a, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_BOOLEAN, SOCK_INT) &&
-      ELEM(type_b, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_BOOLEAN, SOCK_INT)) {
+  if (ELEM(type_a, SOCK_FLOAT, SOCK_VECTOR, SOCK_VECTOR2D, SOCK_RGBA, SOCK_BOOLEAN, SOCK_INT) &&
+      ELEM(type_b, SOCK_FLOAT, SOCK_VECTOR, SOCK_VECTOR2D, SOCK_RGBA, SOCK_BOOLEAN, SOCK_INT)) {
     return true;
   }
   return type_a == type_b;
@@ -104,6 +104,7 @@ static bool geometry_node_tree_socket_type_valid(bNodeTreeType *UNUSED(ntreetype
   return nodeIsStaticSocketType(socket_type) && ELEM(socket_type->type,
                                                      SOCK_FLOAT,
                                                      SOCK_VECTOR,
+                                                     SOCK_VECTOR2D,
                                                      SOCK_RGBA,
                                                      SOCK_BOOLEAN,
                                                      SOCK_INT,
diff --git a/source/blender/nodes/geometry/node_geometry_util.cc b/source/blender/nodes/geometry/node_geometry_util.cc
index ceb9a7e1467..aaa03d3ddc8 100644
--- a/source/blender/nodes/geometry/node_geometry_util.cc
+++ b/source/blender/nodes/geometry/node_geometry_util.cc
@@ -45,6 +45,7 @@ void update_attribute_input_socket_availabilities(bNodeTree &ntree,
            (socket->type == SOCK_FLOAT && mode_ == GEO_NODE_ATTRIBUTE_INPUT_FLOAT) ||
            (socket->type == SOCK_INT && mode_ == GEO_NODE_ATTRIBUTE_INPUT_INTEGER) ||
            (socket->type == SOCK_VECTOR && mode_ == GEO_NODE_ATTRIBUTE_INPUT_VECTOR) ||
+           (socket->type == SOCK_VECTOR2D && mode_ == GEO_NODE_ATTRIBUTE_INPUT_VECTOR) ||
            (socket->type == SOCK_RGBA && mode_ == GEO_NODE_ATTRIBUTE_INPUT_COLOR));
       nodeSetSocketAvailability(&ntree, socket, socket_is_available);
     }
@@ -58,6 +59,8 @@ std::optional<CustomDataType> node_data_type_to_custom_data_type(const eNodeSock
       return CD_PROP_FLOAT;
     case SOCK_VECTOR:
       return CD_PROP_FLOAT3;
+    case SOCK_VECTOR2D:
+      return CD_PROP_FLOAT2;
     case SOCK_RGBA:
       return CD_PROP_COLOR;
     case SOCK_BOOLEAN:
diff --git a/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc b/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc
index 6c2e72cf14f..3bbc9012202 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_accumulate_field.cc
@@ -148,6 +148,8 @@ static std::optional<CustomDataType> node_type_from_other_socket(const bNode

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list