[Bf-blender-cvs] [9c102058e10] functions: new Get Image Color on Surface node
Jacques Lucke
noreply at git.blender.org
Tue Dec 3 12:24:56 CET 2019
Commit: 9c102058e10bdac48efdfb311392ad332be72a5f
Author: Jacques Lucke
Date: Tue Dec 3 11:51:47 2019 +0100
Branches: functions
https://developer.blender.org/rB9c102058e10bdac48efdfb311392ad332be72a5f
new Get Image Color on Surface node
===================================================================
M release/scripts/startup/nodes/function_nodes/object_mesh.py
M source/blender/functions/CMakeLists.txt
M source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
M source/blender/functions/intern/multi_functions/mixed.cc
M source/blender/functions/intern/multi_functions/mixed.h
===================================================================
diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py b/release/scripts/startup/nodes/function_nodes/object_mesh.py
index 514348fcc60..a505c9e1962 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -1,6 +1,7 @@
import bpy
from bpy.props import *
from .. base import FunctionNode
+from .. node_builder import NodeBuilder
class ObjectMeshNode(bpy.types.Node, FunctionNode):
bl_idname = "fn_ObjectMeshNode"
@@ -52,4 +53,21 @@ class GetWeightOnSurfaceNode(bpy.types.Node, FunctionNode):
builder.fixed_output("weight", "Weight", "Float")
def draw(self, layout):
- layout.prop(self, "vertex_group_name", text="", icon="GROUP_VERTEX")
\ No newline at end of file
+ layout.prop(self, "vertex_group_name", text="", icon="GROUP_VERTEX")
+
+
+class GetImageColorOnSurfaceNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_GetImageColorOnSurfaceNode"
+ bl_label = "Get Image Color on Surface"
+
+ image: PointerProperty(
+ name="Image",
+ type=bpy.types.Image,
+ )
+
+ def declaration(self, builder: NodeBuilder):
+ builder.fixed_input("location", "Location", "Surface Location")
+ builder.fixed_output("color", "Color", "Color")
+
+ def draw(self, layout):
+ layout.prop(self, "image", text="")
\ No newline at end of file
diff --git a/source/blender/functions/CMakeLists.txt b/source/blender/functions/CMakeLists.txt
index 81c31b155ec..3c23d7244c1 100644
--- a/source/blender/functions/CMakeLists.txt
+++ b/source/blender/functions/CMakeLists.txt
@@ -6,9 +6,10 @@ set(INC
../blenkernel
../depsgraph
../windowmanager
+ ../imbuf
../../../intern/guardedalloc
)
-
+
set(INC_SYS
${LLVM_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
diff --git a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
index e1cb56d7424..14ca7251ab7 100644
--- a/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/inlined_tree_multi_function_network/mappings_nodes.cc
@@ -71,6 +71,12 @@ static void INSERT_get_weight_on_surface(VNodeMFNetworkBuilder &builder)
builder.set_constructed_matching_fn<MF_GetWeightOnSurface>(std::move(group_name));
}
+static void INSERT_get_image_color_on_surface(VNodeMFNetworkBuilder &builder)
+{
+ Image *image = (Image *)RNA_pointer_get(builder.rna(), "image").data;
+ builder.set_constructed_matching_fn<MF_GetImageColorOnSurface>(image);
+}
+
static void INSERT_particle_is_in_group(VNodeMFNetworkBuilder &builder)
{
builder.set_constructed_matching_fn<MF_ParticleIsInGroup>();
@@ -173,60 +179,69 @@ static void build_variadic_math_fn(VNodeMFNetworkBuilder &builder,
static void INSERT_add_floats(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](float a, float b) -> float { return a + b; }, 0.0f);
+ build_variadic_math_fn(
+ builder, +[](float a, float b) -> float { return a + b; }, 0.0f);
}
static void INSERT_multiply_floats(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](float a, float b) -> float { return a * b; }, 1.0f);
+ build_variadic_math_fn(
+ builder, +[](float a, float b) -> float { return a * b; }, 1.0f);
}
static void INSERT_minimum_floats(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](float a, float b) -> float { return std::min(a, b); }, 0.0f);
+ build_variadic_math_fn(
+ builder, +[](float a, float b) -> float { return std::min(a, b); }, 0.0f);
}
static void INSERT_maximum_floats(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](float a, float b) -> float { return std::max(a, b); }, 0.0f);
+ build_variadic_math_fn(
+ builder, +[](float a, float b) -> float { return std::max(a, b); }, 0.0f);
}
static void INSERT_subtract_floats(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a, float b) -> float { return a - b; });
+ build_math_fn(
+ builder, +[](float a, float b) -> float { return a - b; });
}
static void INSERT_divide_floats(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a, float b) -> float { return (b != 0.0f) ? a / b : 0.0f; });
+ build_math_fn(
+ builder, +[](float a, float b) -> float { return (b != 0.0f) ? a / b : 0.0f; });
}
static void INSERT_power_floats(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a, float b) -> float {
- return (a >= 0.0f) ? (float)std::pow(a, b) : 0.0f;
- });
+ build_math_fn(
+ builder,
+ +[](float a, float b) -> float { return (a >= 0.0f) ? (float)std::pow(a, b) : 0.0f; });
}
static void INSERT_sqrt_float(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder,
- +[](float a) -> float { return (a >= 0.0f) ? (float)std::sqrt(a) : 0.0f; });
+ build_math_fn(
+ builder, +[](float a) -> float { return (a >= 0.0f) ? (float)std::sqrt(a) : 0.0f; });
}
static void INSERT_abs_float(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a) -> float { return std::abs(a); });
+ build_math_fn(
+ builder, +[](float a) -> float { return std::abs(a); });
}
static void INSERT_sine_float(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a) -> float { return std::sin(a); });
+ build_math_fn(
+ builder, +[](float a) -> float { return std::sin(a); });
}
static void INSERT_cosine_float(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a) -> float { return std::cos(a); });
+ build_math_fn(
+ builder, +[](float a) -> float { return std::cos(a); });
}
static void INSERT_add_vectors(VNodeMFNetworkBuilder &builder)
@@ -241,7 +256,8 @@ static void INSERT_multiply_vectors(VNodeMFNetworkBuilder &builder)
static void INSERT_subtract_vectors(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float3 a, float3 b) -> float3 { return a - b; });
+ build_math_fn(
+ builder, +[](float3 a, float3 b) -> float3 { return a - b; });
}
static void INSERT_divide_vectors(VNodeMFNetworkBuilder &builder)
@@ -256,7 +272,8 @@ static void INSERT_vector_cross_product(VNodeMFNetworkBuilder &builder)
static void INSERT_reflect_vector(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float3 a, float3 b) { return a.reflected(b.normalized()); });
+ build_math_fn(
+ builder, +[](float3 a, float3 b) { return a.reflected(b.normalized()); });
}
static void INSERT_project_vector(VNodeMFNetworkBuilder &builder)
@@ -276,22 +293,26 @@ static void INSERT_vector_distance(VNodeMFNetworkBuilder &builder)
static void INSERT_boolean_and(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](bool a, bool b) { return a && b; }, true);
+ build_variadic_math_fn(
+ builder, +[](bool a, bool b) { return a && b; }, true);
}
static void INSERT_boolean_or(VNodeMFNetworkBuilder &builder)
{
- build_variadic_math_fn(builder, +[](bool a, bool b) { return a || b; }, false);
+ build_variadic_math_fn(
+ builder, +[](bool a, bool b) { return a || b; }, false);
}
static void INSERT_boolean_not(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](bool a) -> bool { return !a; });
+ build_math_fn(
+ builder, +[](bool a) -> bool { return !a; });
}
static void INSERT_compare(VNodeMFNetworkBuilder &builder)
{
- build_math_fn(builder, +[](float a, float b) -> bool { return a < b; });
+ build_math_fn(
+ builder, +[](float a, float b) -> bool { return a < b; });
}
static void INSERT_perlin_noise(VNodeMFNetworkBuilder &builder)
@@ -365,6 +386,8 @@ void add_inlined_tree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
mappings.xnode_inserters.add_new("fn_ObjectMeshNode", INSERT_object_mesh_info);
mappings.xnode_inserters.add_new("fn_GetPositionOnSurfaceNode", INSERT_get_position_on_surface);
mappings.xnode_inserters.add_new("fn_GetWeightOnSurfaceNode", INSERT_get_weight_on_surface);
+ mappings.xnode_inserters.add_new("fn_GetImageColorOnSurfaceNode",
+ INSERT_get_image_color_on_surface);
mappings.xnode_inserters.add_new("fn_IsInGroupNode", INSERT_particle_is_in_group);
mappings.xnode_inserters.add_new("fn_TextLengthNode", INSERT_text_length);
mappings.xnode_inserters.add_new("fn_VertexInfoNode", INSERT_vertex_info);
diff --git a/source/blender/functions/intern/multi_functions/mixed.cc b/source/blender/functions/intern/multi_functions/mixed.cc
index 37f90595534..6969bc0d649 100644
--- a/source/blender/functions/intern/multi_functions/mixed.cc
+++ b/source/blender/functions/intern/multi_functions/mixed.cc
@@ -14,7 +14,11 @@
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
+#include "DNA_customdata_types.h"
+#include "IMB_imbuf_types.h"
+
+#include "BKE_customdata.h"
#include "BKE_surface_location.h"
#include "BKE_mesh_runtime.h"
#include "BKE_deform.h"
@@ -22,8 +26,10 @@
namespace FN {
using BKE::SurfaceLocation;
+using BLI::float2;
using BLI::float3;
using BLI::float4x4;
+using BLI::rgba_b;
using BLI::rgba_f;
using BLI::TemporaryArray;
@@ -354,7 +360,7 @@ void MF_GetWeightOnSurface::call(MFMask mask, MFParams params, MFContext context
continue;
}
- Object *object = persistent_surfaces_opt->data->lookup((uint32_t)location.surface_id());
+ Object *object = persistent_surfaces_opt->data->lookup(location.surface_id());
if (object == nullptr) {
r_weights[i] = 0.0f;
continue;
@@ -389,6 +395,95 @@ void MF_GetWeightOnSurface::call(MFMask mask, MFParams params, MFContext context
}
}
+MF_GetImageColorOnSurface::MF_GetImageColorOnSurface(Image *image) : m_image(image)
+{
+ MFSignatureBuilder signature("Get Image Color on Surface");
+ signature.single_input<SurfaceLocation>("Surface Location");
+ signature.single_output<rgba_f>("Color");
+ this->set_signature(signature);
+}
+
+static void get_colors_on_surface(MFMask mask,
+ MFParams params,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list