[Bf-blender-cvs] [093583620c7] functions: new color socket type

Jacques Lucke noreply at git.blender.org
Tue Jul 30 13:27:51 CEST 2019


Commit: 093583620c7500112bbee9fec1ced5ebe5c5e940
Author: Jacques Lucke
Date:   Tue Jul 30 12:01:00 2019 +0200
Branches: functions
https://developer.blender.org/rB093583620c7500112bbee9fec1ced5ebe5c5e940

new color socket type

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

M	release/scripts/startup/nodes/sockets.py
M	release/scripts/startup/nodes/types.py
M	source/blender/blenlib/BLI_math.hpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/conversions.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
M	source/blender/functions/frontends/data_flow_nodes/type_mappings.cpp
M	source/blender/functions/functions/lists.cpp
M	source/blender/functions/types/numeric.cpp
M	source/blender/functions/types/numeric.hpp
M	source/blender/functions/types/numeric_lists.cpp
M	source/blender/functions/types/numeric_lists.hpp

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

diff --git a/release/scripts/startup/nodes/sockets.py b/release/scripts/startup/nodes/sockets.py
index 63886d7a6be..dee55128b56 100644
--- a/release/scripts/startup/nodes/sockets.py
+++ b/release/scripts/startup/nodes/sockets.py
@@ -101,6 +101,30 @@ class ObjectSocket(bpy.types.NodeSocket, DataSocket):
         type=bpy.types.Object,
     )
 
+    def draw_property(self, layout, node, text):
+        layout.prop(self, "value", text=text)
+
+    def get_state(self):
+        return tuple(self.value)
+
+    def restore_state(self, state):
+        self.value = state
+
+class ColorSocket(bpy.types.NodeSocket, DataSocket):
+    bl_idname = "fn_ColorSocket"
+    bl_label = "Color Socket"
+    data_type = "Color"
+    color = (0.8, 0.8, 0.2, 1)
+
+    value: FloatVectorProperty(
+        name="Value",
+        size=4,
+        default=(0.8, 0.8, 0.8, 1.0),
+        subtype='COLOR',
+        soft_min=0.0,
+        soft_max=0.0,
+    )
+
     def draw_property(self, layout, node, text):
         layout.prop(self, "value", text=text)
 
@@ -129,6 +153,8 @@ BooleanListSocket = create_simple_data_socket(
     "fn_BooleanListSocket", "Boolean List", (0.3, 0.3, 0.3, 0.5))
 ObjectListSocket = create_simple_data_socket(
     "fn_ObjectListSocket", "Object List", (0, 0, 0, 0.5))
+ColorListSocket = create_simple_data_socket(
+    "fn_ColorListSocket", "Color List", (0.8, 0.8, 0.2, 0.5))
 
 class EmitterSocket(bpy.types.NodeSocket, BaseSocket):
     bl_idname = "bp_EmitterSocket"
diff --git a/release/scripts/startup/nodes/types.py b/release/scripts/startup/nodes/types.py
index 9b5f52caa56..00046dbd598 100644
--- a/release/scripts/startup/nodes/types.py
+++ b/release/scripts/startup/nodes/types.py
@@ -8,5 +8,6 @@ type_infos.insert_data_type(s.VectorSocket, s.VectorListSocket)
 type_infos.insert_data_type(s.IntegerSocket, s.IntegerListSocket)
 type_infos.insert_data_type(s.BooleanSocket, s.BooleanListSocket)
 type_infos.insert_data_type(s.ObjectSocket, s.ObjectListSocket)
+type_infos.insert_data_type(s.ColorSocket, s.ColorListSocket)
 
 type_infos.insert_conversion_group(["Boolean", "Integer", "Float"])
diff --git a/source/blender/blenlib/BLI_math.hpp b/source/blender/blenlib/BLI_math.hpp
index acab14b5680..b2e6243cf48 100644
--- a/source/blender/blenlib/BLI_math.hpp
+++ b/source/blender/blenlib/BLI_math.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <array>
+
 #include "BLI_math_vector.h"
 #include "BLI_math_matrix.h"
 
@@ -36,6 +38,11 @@ struct float3 {
     return (float *)this;
   }
 
+  operator std::array<float, 3>()
+  {
+    return {x, y, z};
+  }
+
   float normalize_and_get_length()
   {
     return normalize_v3(*this);
@@ -214,4 +221,24 @@ struct float4x4 {
   }
 };
 
+struct rgba_f {
+  float r, g, b, a;
+
+  rgba_f() = default;
+
+  rgba_f(float r, float g, float b, float a) : r(r), g(g), b(b), a(a)
+  {
+  }
+
+  operator float *()
+  {
+    return &r;
+  }
+
+  operator std::array<float, 4>()
+  {
+    return {r, g, b, a};
+  }
+};
+
 }  // namespace BLI
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/conversions.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/conversions.cpp
index 06db3453b25..6bf147d4952 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/conversions.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/conversions.cpp
@@ -41,6 +41,7 @@ void register_conversion_inserters(GraphInserters &inserters)
   inserters.reg_conversion_inserter("Integer", "Integer List", INSERT_base_to_list);
   inserters.reg_conversion_inserter("Boolean", "Boolean List", INSERT_base_to_list);
   inserters.reg_conversion_inserter("Object", "Object List", INSERT_base_to_list);
+  inserters.reg_conversion_inserter("Color", "Color List", INSERT_base_to_list);
 }
 
 }  // namespace DataFlowNodes
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
index 50c2eb62f46..741428f26b5 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
@@ -9,6 +9,7 @@ namespace FN {
 namespace DataFlowNodes {
 
 using BLI::float3;
+using BLI::rgba_f;
 
 static void LOAD_float(PointerRNA *rna, Tuple &tuple, uint index)
 {
@@ -18,9 +19,9 @@ static void LOAD_float(PointerRNA *rna, Tuple &tuple, uint index)
 
 static void LOAD_vector(PointerRNA *rna, Tuple &tuple, uint index)
 {
-  float vector[3];
+  float3 vector;
   RNA_float_get_array(rna, "value", vector);
-  tuple.set<float3>(index, float3(vector));
+  tuple.set<float3>(index, vector);
 }
 
 static void LOAD_integer(PointerRNA *rna, Tuple &tuple, uint index)
@@ -41,6 +42,13 @@ static void LOAD_object(PointerRNA *rna, Tuple &tuple, uint index)
   tuple.set<Object *>(index, value);
 }
 
+static void LOAD_color(PointerRNA *rna, Tuple &tuple, uint index)
+{
+  rgba_f color;
+  RNA_float_get_array(rna, "value", color);
+  tuple.set<rgba_f>(index, color);
+}
+
 template<typename T> static void LOAD_empty_list(PointerRNA *UNUSED(rna), Tuple &tuple, uint index)
 {
   auto list = Types::SharedList<T>::New();
@@ -54,11 +62,13 @@ void initialize_socket_inserters(GraphInserters &inserters)
   inserters.reg_socket_loader("fn_IntegerSocket", LOAD_integer);
   inserters.reg_socket_loader("fn_BooleanSocket", LOAD_boolean);
   inserters.reg_socket_loader("fn_ObjectSocket", LOAD_object);
+  inserters.reg_socket_loader("fn_ColorSocket", LOAD_color);
   inserters.reg_socket_loader("fn_FloatListSocket", LOAD_empty_list<float>);
   inserters.reg_socket_loader("fn_VectorListSocket", LOAD_empty_list<float3>);
   inserters.reg_socket_loader("fn_IntegerListSocket", LOAD_empty_list<int32_t>);
   inserters.reg_socket_loader("fn_BooleanListSocket", LOAD_empty_list<bool>);
   inserters.reg_socket_loader("fn_ObjectListSocket", LOAD_empty_list<Object *>);
+  inserters.reg_socket_loader("fn_ColorListSocket", LOAD_empty_list<rgba_f>);
 }
 
 }  // namespace DataFlowNodes
diff --git a/source/blender/functions/frontends/data_flow_nodes/type_mappings.cpp b/source/blender/functions/frontends/data_flow_nodes/type_mappings.cpp
index 2c8f29bedfe..7df8d09fa87 100644
--- a/source/blender/functions/frontends/data_flow_nodes/type_mappings.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/type_mappings.cpp
@@ -29,6 +29,8 @@ BLI_LAZY_INIT_STATIC(StringTypeMappings, get_type_by_name_mappings)
   ADD_TYPE("fn_BooleanListSocket", "Boolean List", bool_list);
   ADD_TYPE("fn_ObjectSocket", "Object", object);
   ADD_TYPE("fn_ObjectListSocket", "Object List", object_list);
+  ADD_TYPE("fn_ColorSocket", "Color", rgba_f);
+  ADD_TYPE("fn_ColorListSocket", "Color List", rgba_f_list);
   return maps;
 
 #undef ADD_TYPE
diff --git a/source/blender/functions/functions/lists.cpp b/source/blender/functions/functions/lists.cpp
index 1cd621611e0..cd6ac1ec82a 100644
--- a/source/blender/functions/functions/lists.cpp
+++ b/source/blender/functions/functions/lists.cpp
@@ -272,6 +272,7 @@ BLI_LAZY_INIT_STATIC(ListFunctions, get_list_functions)
   insert_list_functions_for_type<int32_t>(functions, GET_TYPE_int32(), GET_TYPE_int32_list());
   insert_list_functions_for_type<bool>(functions, GET_TYPE_bool(), GET_TYPE_bool_list());
   insert_list_functions_for_type<Object *>(functions, GET_TYPE_object(), GET_TYPE_object_list());
+  insert_list_functions_for_type<rgba_f>(functions, GET_TYPE_rgba_f(), GET_TYPE_rgba_f_list());
   return functions;
 }
 
diff --git a/source/blender/functions/types/numeric.cpp b/source/blender/functions/types/numeric.cpp
index 3b94873e2a8..93d66201853 100644
--- a/source/blender/functions/types/numeric.cpp
+++ b/source/blender/functions/types/numeric.cpp
@@ -72,5 +72,13 @@ BLI_LAZY_INIT(SharedType, GET_TYPE_float3)
   return type;
 }
 
+BLI_LAZY_INIT(SharedType, GET_TYPE_rgba_f)
+{
+  SharedType type = SharedType::New("RGBA Float");
+  type->add_extension<CPPTypeInfoForType<rgba_f>>();
+  type->add_extension<FloatVectorType>(4);
+  return type;
+}
+
 }  // namespace Types
 }  // namespace FN
diff --git a/source/blender/functions/types/numeric.hpp b/source/blender/functions/types/numeric.hpp
index ed81d2ae793..8d18372738b 100644
--- a/source/blender/functions/types/numeric.hpp
+++ b/source/blender/functions/types/numeric.hpp
@@ -7,10 +7,12 @@ namespace FN {
 namespace Types {
 
 using BLI::float3;
+using BLI::rgba_f;
 
 SharedType &GET_TYPE_float();
 SharedType &GET_TYPE_int32();
 SharedType &GET_TYPE_float3();
+SharedType &GET_TYPE_rgba_f();
 
 }  // namespace Types
 }  // namespace FN
diff --git a/source/blender/functions/types/numeric_lists.cpp b/source/blender/functions/types/numeric_lists.cpp
index c36bb9d709b..e66942c32aa 100644
--- a/source/blender/functions/types/numeric_lists.cpp
+++ b/source/blender/functions/types/numeric_lists.cpp
@@ -61,5 +61,10 @@ BLI_LAZY_INIT(SharedType, GET_TYPE_object_list)
   return create_list_type<Object *>("Object List");
 }
 
+BLI_LAZY_INIT(SharedType, GET_TYPE_rgba_f_list)
+{
+  return create_list_type<rgba_f>("RGBA Float List");
+}
+
 }  // namespace Types
 }  // namespace FN
diff --git a/source/blender/functions/types/numeric_lists.hpp b/source/blender/functions/types/numeric_lists.hpp
index c97fae89005..ed3ef7c65ca 100644
--- a/source/blender/functions/types/numeric_lists.hpp
+++ b/source/blender/functions/types/numeric_lists.hpp
@@ -14,12 +14,14 @@ using SharedFloat3List = SharedList<float3>;
 using SharedInt32List = SharedList<int32_t>;
 using SharedBoolList = SharedList<bool>;
 using SharedObjectList = SharedList<Object *>;
+using SharedFloatRGBAList = SharedList<rgba_f>;
 
 SharedType &GET_TYPE_float_list();
 SharedType &GET_TYPE_float3_list();
 SharedType &GET_TYPE_int32_list();
 SharedType &GET_TYPE_bool_list();
 SharedType &GET_TYPE_object_list();
+SharedType &GET_TYPE_rgba_f_list();
 
 }  // namespace Types
 }  // namespace FN



More information about the Bf-blender-cvs mailing list