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
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs