Blender  V2.93
node_util.c File Reference
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include "DNA_node_types.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_colortools.h"
#include "BKE_node.h"
#include "RNA_access.h"
#include "RNA_enum_types.h"
#include "MEM_guardedalloc.h"
#include "node_util.h"

Go to the source code of this file.

Functions

Storage Data
void node_free_curves (bNode *node)
 
void node_free_standard_storage (bNode *node)
 
void node_copy_curves (bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node)
 
void node_copy_standard_storage (bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node)
 
void * node_initexec_curves (bNodeExecContext *UNUSED(context), bNode *node, bNodeInstanceKey UNUSED(key))
 
Updates
void node_sock_label (bNodeSocket *sock, const char *name)
 
void node_sock_label_clear (bNodeSocket *sock)
 
void node_math_update (bNodeTree *UNUSED(ntree), bNode *node)
 
Labels
void node_blend_label (bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 
void node_image_label (bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 
void node_math_label (bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 
void node_vector_math_label (bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 
void node_filter_label (bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
 
Link Insertion
static bool node_link_socket_match (const bNodeSocket *a, const bNodeSocket *b)
 
static int node_count_links (const bNodeTree *ntree, const bNodeSocket *socket)
 
static bNodeSocketnode_find_linkable_socket (bNodeTree *ntree, bNode *node, bNodeSocket *to_socket)
 
void node_insert_link_default (bNodeTree *ntree, bNode *node, bNodeLink *link)
 
Internal Links (mute and disconnect)
static int node_datatype_priority (eNodeSocketDatatype from, eNodeSocketDatatype to)
 
static bNodeSocketselect_internal_link_input (bNode *node, bNodeSocket *output)
 
void node_update_internal_links_default (bNodeTree *ntree, bNode *node)
 
Default value RNA access
float node_socket_get_float (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock)
 
void node_socket_set_float (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, float value)
 
void node_socket_get_color (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, float *value)
 
void node_socket_set_color (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, const float *value)
 
void node_socket_get_vector (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, float *value)
 
void node_socket_set_vector (bNodeTree *ntree, bNode *UNUSED(node), bNodeSocket *sock, const float *value)
 

Function Documentation

◆ node_blend_label()

void node_blend_label ( bNodeTree UNUSEDntree,
bNode node,
char *  label,
int  maxlen 
)

◆ node_copy_curves()

void node_copy_curves ( bNodeTree UNUSEDdest_ntree,
bNode dest_node,
const bNode src_node 
)

◆ node_copy_standard_storage()

void node_copy_standard_storage ( bNodeTree UNUSEDdest_ntree,
bNode dest_node,
const bNode src_node 
)

Definition at line 67 of file node_util.c.

References MEM_dupallocN, and bNode::storage.

Referenced by copy(), register_node_type_cmp_alphaover(), register_node_type_cmp_antialiasing(), register_node_type_cmp_bilateralblur(), register_node_type_cmp_blur(), register_node_type_cmp_bokehimage(), register_node_type_cmp_boxmask(), register_node_type_cmp_channel_matte(), register_node_type_cmp_chroma_matte(), register_node_type_cmp_color_matte(), register_node_type_cmp_color_spill(), register_node_type_cmp_colorbalance(), register_node_type_cmp_colorcorrection(), register_node_type_cmp_crop(), register_node_type_cmp_dblur(), register_node_type_cmp_defocus(), register_node_type_cmp_denoise(), register_node_type_cmp_diff_matte(), register_node_type_cmp_dilateerode(), register_node_type_cmp_distance_matte(), register_node_type_cmp_ellipsemask(), register_node_type_cmp_glare(), register_node_type_cmp_keying(), register_node_type_cmp_keyingscreen(), register_node_type_cmp_lensdist(), register_node_type_cmp_luma_matte(), register_node_type_cmp_map_value(), register_node_type_cmp_mask(), register_node_type_cmp_movieclip(), register_node_type_cmp_planetrackdeform(), register_node_type_cmp_setalpha(), register_node_type_cmp_splitviewer(), register_node_type_cmp_sunbeams(), register_node_type_cmp_tonemap(), register_node_type_cmp_trackpos(), register_node_type_cmp_translate(), register_node_type_cmp_valtorgb(), register_node_type_cmp_vecblur(), register_node_type_cmp_viewer(), register_node_type_fn_input_vector(), register_node_type_frame(), register_node_type_geo_align_rotation_to_vector(), register_node_type_geo_attribute_clamp(), register_node_type_geo_attribute_color_ramp(), register_node_type_geo_attribute_combine_xyz(), register_node_type_geo_attribute_compare(), register_node_type_geo_attribute_convert(), register_node_type_geo_attribute_map_range(), register_node_type_geo_attribute_math(), register_node_type_geo_attribute_mix(), register_node_type_geo_attribute_proximity(), register_node_type_geo_attribute_randomize(), register_node_type_geo_attribute_separate_xyz(), register_node_type_geo_attribute_vector_math(), register_node_type_geo_collection_info(), register_node_type_geo_mesh_primitive_circle(), register_node_type_geo_mesh_primitive_cone(), register_node_type_geo_mesh_primitive_cylinder(), register_node_type_geo_mesh_primitive_line(), register_node_type_geo_object_info(), register_node_type_geo_point_instance(), register_node_type_geo_point_rotate(), register_node_type_geo_point_scale(), register_node_type_geo_point_translate(), register_node_type_geo_points_to_volume(), register_node_type_geo_volume_to_mesh(), register_node_type_sh_attribute(), register_node_type_sh_normal_map(), register_node_type_sh_output_aov(), register_node_type_sh_tangent(), register_node_type_sh_tex_brick(), register_node_type_sh_tex_checker(), register_node_type_sh_tex_environment(), register_node_type_sh_tex_gradient(), register_node_type_sh_tex_ies(), register_node_type_sh_tex_image(), register_node_type_sh_tex_magic(), register_node_type_sh_tex_musgrave(), register_node_type_sh_tex_noise(), register_node_type_sh_tex_sky(), register_node_type_sh_tex_voronoi(), register_node_type_sh_tex_wave(), register_node_type_sh_uvmap(), register_node_type_sh_valtorgb(), register_node_type_sh_vect_transform(), register_node_type_sh_vertex_color(), register_node_type_tex_image(), and register_node_type_tex_valtorgb().

◆ node_count_links()

static int node_count_links ( const bNodeTree ntree,
const bNodeSocket socket 
)
static

Definition at line 267 of file node_util.c.

References count, ELEM, bNodeTree::links, LISTBASE_FOREACH, and ntree.

Referenced by node_find_linkable_socket().

◆ node_datatype_priority()

static int node_datatype_priority ( eNodeSocketDatatype  from,
eNodeSocketDatatype  to 
)
static

Common datatype priorities, works for compositor, shader and texture nodes alike defines priority of datatype connection based on output type (to): < 0: never connect these types. >= 0: priority of connection (higher values chosen first).

Definition at line 350 of file node_util.c.

References from, SOCK_BOOLEAN, SOCK_COLLECTION, SOCK_FLOAT, SOCK_GEOMETRY, SOCK_INT, SOCK_OBJECT, SOCK_RGBA, SOCK_SHADER, SOCK_STRING, and SOCK_VECTOR.

Referenced by select_internal_link_input().

◆ node_filter_label()

void node_filter_label ( bNodeTree UNUSEDntree,
bNode node,
char *  label,
int  maxlen 
)

◆ node_find_linkable_socket()

static bNodeSocket* node_find_linkable_socket ( bNodeTree ntree,
bNode node,
bNodeSocket to_socket 
)
static

◆ node_free_curves()

void node_free_curves ( bNode node)

◆ node_free_standard_storage()

void node_free_standard_storage ( bNode node)

Definition at line 55 of file node_util.c.

References MEM_freeN, and node.

Referenced by register_node_type_cmp_alphaover(), register_node_type_cmp_antialiasing(), register_node_type_cmp_bilateralblur(), register_node_type_cmp_blur(), register_node_type_cmp_bokehimage(), register_node_type_cmp_boxmask(), register_node_type_cmp_channel_matte(), register_node_type_cmp_chroma_matte(), register_node_type_cmp_color_matte(), register_node_type_cmp_color_spill(), register_node_type_cmp_colorbalance(), register_node_type_cmp_colorcorrection(), register_node_type_cmp_crop(), register_node_type_cmp_dblur(), register_node_type_cmp_defocus(), register_node_type_cmp_denoise(), register_node_type_cmp_diff_matte(), register_node_type_cmp_dilateerode(), register_node_type_cmp_distance_matte(), register_node_type_cmp_ellipsemask(), register_node_type_cmp_glare(), register_node_type_cmp_keying(), register_node_type_cmp_keyingscreen(), register_node_type_cmp_lensdist(), register_node_type_cmp_luma_matte(), register_node_type_cmp_map_value(), register_node_type_cmp_mask(), register_node_type_cmp_movieclip(), register_node_type_cmp_planetrackdeform(), register_node_type_cmp_setalpha(), register_node_type_cmp_splitviewer(), register_node_type_cmp_sunbeams(), register_node_type_cmp_tonemap(), register_node_type_cmp_trackpos(), register_node_type_cmp_translate(), register_node_type_cmp_valtorgb(), register_node_type_cmp_vecblur(), register_node_type_cmp_viewer(), register_node_type_fn_input_vector(), register_node_type_frame(), register_node_type_geo_align_rotation_to_vector(), register_node_type_geo_attribute_clamp(), register_node_type_geo_attribute_color_ramp(), register_node_type_geo_attribute_combine_xyz(), register_node_type_geo_attribute_compare(), register_node_type_geo_attribute_convert(), register_node_type_geo_attribute_map_range(), register_node_type_geo_attribute_math(), register_node_type_geo_attribute_mix(), register_node_type_geo_attribute_proximity(), register_node_type_geo_attribute_randomize(), register_node_type_geo_attribute_separate_xyz(), register_node_type_geo_attribute_vector_math(), register_node_type_geo_collection_info(), register_node_type_geo_mesh_primitive_circle(), register_node_type_geo_mesh_primitive_cone(), register_node_type_geo_mesh_primitive_cylinder(), register_node_type_geo_mesh_primitive_line(), register_node_type_geo_object_info(), register_node_type_geo_point_instance(), register_node_type_geo_point_rotate(), register_node_type_geo_point_scale(), register_node_type_geo_point_translate(), register_node_type_geo_points_to_volume(), register_node_type_geo_volume_to_mesh(), register_node_type_sh_attribute(), register_node_type_sh_normal_map(), register_node_type_sh_output_aov(), register_node_type_sh_tangent(), register_node_type_sh_tex_brick(), register_node_type_sh_tex_checker(), register_node_type_sh_tex_environment(), register_node_type_sh_tex_gradient(), register_node_type_sh_tex_ies(), register_node_type_sh_tex_image(), register_node_type_sh_tex_magic(), register_node_type_sh_tex_musgrave(), register_node_type_sh_tex_noise(), register_node_type_sh_tex_sky(), register_node_type_sh_tex_voronoi(), register_node_type_sh_tex_wave(), register_node_type_sh_uvmap(), register_node_type_sh_valtorgb(), register_node_type_sh_vect_transform(), register_node_type_sh_vertex_color(), register_node_type_tex_image(), register_node_type_tex_output(), and register_node_type_tex_valtorgb().

◆ node_image_label()

void node_image_label ( bNodeTree UNUSEDntree,
bNode node,
char *  label,
int  maxlen 
)

◆ node_initexec_curves()

void* node_initexec_curves ( bNodeExecContext UNUSEDcontext,
bNode node,
bNodeInstanceKey   UNUSEDkey 
)

◆ node_insert_link_default()

void node_insert_link_default ( bNodeTree ntree,
bNode node,
bNodeLink link 
)

The idea behind this is: When a user connects an input to a socket that is already linked (and if its not an Multi Input Socket), we try to find a replacement socket for the link that we try to overwrite and connect that previous link to the new socket.

Definition at line 305 of file node_util.c.

References bNodeTree::links, LISTBASE_FOREACH_MUTABLE, node, node_find_linkable_socket(), nodeRemLink(), nodeSocketLinkLimit(), ntree, NULL, bNodeLink::tonode, bNodeLink::tosock, and bNodeSocket::total_inputs.

Referenced by cmp_node_type_base(), fn_node_type_base(), geo_node_type_base(), register_node_type_cmp_custom_group(), register_node_type_cmp_group(), register_node_type_geo_custom_group(), register_node_type_geo_group(), register_node_type_sh_custom_group(), register_node_type_sh_group(), register_node_type_tex_group(), sh_node_type_base(), and tex_node_type_base().

◆ node_link_socket_match()

static bool node_link_socket_match ( const bNodeSocket a,
const bNodeSocket b 
)
static

Definition at line 242 of file node_util.c.

References Freestyle::a, bNodeSocket::name, and bNodeSocket::typeinfo.

Referenced by node_find_linkable_socket().

◆ node_math_label()

void node_math_label ( bNodeTree UNUSEDntree,
bNode node,
char *  label,
int  maxlen 
)

◆ node_math_update()

void node_math_update ( bNodeTree UNUSEDntree,
bNode node 
)

◆ node_sock_label()

void node_sock_label ( bNodeSocket sock,
const char *  name 
)

◆ node_sock_label_clear()

void node_sock_label_clear ( bNodeSocket sock)

Definition at line 93 of file node_util.c.

References bNodeSocket::label.

Referenced by node_math_update(), and node_shader_update_vector_math().

◆ node_socket_get_color()

void node_socket_get_color ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock,
float value 
)

Definition at line 573 of file node_util.c.

References ntree, ptr, RNA_float_get_array(), RNA_NodeSocket, and RNA_pointer_create().

Referenced by setup_stack().

◆ node_socket_get_float()

float node_socket_get_float ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock 
)

Definition at line 559 of file node_util.c.

References ntree, ptr, RNA_float_get(), RNA_NodeSocket, and RNA_pointer_create().

Referenced by setup_stack().

◆ node_socket_get_vector()

void node_socket_get_vector ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock,
float value 
)

Definition at line 590 of file node_util.c.

References ntree, ptr, RNA_float_get_array(), RNA_NodeSocket, and RNA_pointer_create().

Referenced by setup_stack().

◆ node_socket_set_color()

void node_socket_set_color ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock,
const float value 
)

Definition at line 580 of file node_util.c.

References ntree, ptr, RNA_float_set_array(), RNA_NodeSocket, and RNA_pointer_create().

◆ node_socket_set_float()

void node_socket_set_float ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock,
float  value 
)

Definition at line 566 of file node_util.c.

References ntree, ptr, RNA_float_set(), RNA_NodeSocket, and RNA_pointer_create().

◆ node_socket_set_vector()

void node_socket_set_vector ( bNodeTree ntree,
bNode UNUSEDnode,
bNodeSocket sock,
const float value 
)

Definition at line 597 of file node_util.c.

References ntree, ptr, RNA_float_set_array(), RNA_NodeSocket, and RNA_pointer_create().

◆ node_update_internal_links_default()

void node_update_internal_links_default ( bNodeTree ntree,
bNode node 
)

◆ node_vector_math_label()

void node_vector_math_label ( bNodeTree UNUSEDntree,
bNode node,
char *  label,
int  maxlen 
)

◆ select_internal_link_input()

static bNodeSocket* select_internal_link_input ( bNode node,
bNodeSocket output 
)
static