Blender V4.3
blender::nodes::inverse_eval Namespace Reference

Classes

class  InverseEvalParams
 
struct  LocalInverseEvalTargets
 
struct  SocketToUpdate
 

Typedefs

using RNAValueVariant = std::variant<float, int, bool>
 

Functions

std::optional< SocketValueVariantconvert_single_socket_value (const bNodeSocket &old_socket, const bNodeSocket &new_socket, const SocketValueVariant &old_value)
 
static void evaluate_node_elem_upstream (const NodeInContext &ctx_node, Vector< const bNodeSocket * > &r_modified_inputs, Map< SocketInContext, ElemVariant > &elem_by_socket)
 
static bool propagate_socket_elem (const SocketInContext &ctx_from, const SocketInContext &ctx_to, Map< SocketInContext, ElemVariant > &elem_by_socket)
 
static void get_input_elems_to_propagate (const NodeInContext &ctx_node, Vector< const bNodeSocket * > &r_sockets, Map< SocketInContext, ElemVariant > &elem_by_socket)
 
LocalInverseEvalTargets find_local_inverse_eval_targets (const bNodeTree &tree, const SocketElem &initial_socket_elem)
 
static void evaluate_node_elem_downstream_filtered (const NodeInContext &ctx_node, const Map< SocketInContext, ElemVariant > &elem_by_socket_filter, Map< SocketInContext, ElemVariant > &elem_by_socket, Vector< const bNodeSocket * > &r_outputs_to_propagate)
 
static bool propagate_value_elem_filtered (const SocketInContext &ctx_from, const SocketInContext &ctx_to, const Map< SocketInContext, ElemVariant > &elem_by_socket_filter, Map< SocketInContext, ElemVariant > &elem_by_socket)
 
void foreach_element_on_inverse_eval_path (const ComputeContext &initial_context, const SocketElem &initial_socket_elem, FunctionRef< void(const ComputeContext &context)> foreach_context_fn, FunctionRef< void(const ComputeContext &context, const bNodeSocket &socket, const ElemVariant &elem)> foreach_socket_fn)
 
static bool set_rna_property (bContext &C, ID &id, const StringRefNull rna_path, const RNAValueVariant &value_variant)
 
static bool set_rna_property_float3 (bContext &C, ID &id, const StringRefNull rna_path, const float3 &value)
 
static bool set_socket_value (bContext &C, bNodeSocket &socket, const SocketValueVariant &value_variant)
 
static bool set_value_node_value (bContext &C, bNode &node, const SocketValueVariant &value_variant)
 
static bool set_modifier_value (bContext &C, Object &object, NodesModifierData &nmd, const bNodeTreeInterfaceSocket &interface_socket, const SocketValueVariant &value_variant)
 
std::optional< SocketValueVariantget_logged_socket_value (geo_eval_log::GeoTreeLog &tree_log, const bNodeSocket &socket)
 
static void backpropagate_socket_values_through_node (const NodeInContext &ctx_node, geo_eval_log::GeoModifierLog &eval_log, Map< SocketInContext, SocketValueVariant > &value_by_socket, Vector< const bNodeSocket * > &r_modified_inputs)
 
bool backpropagate_socket_values (bContext &C, Object &object, NodesModifierData &nmd, geo_eval_log::GeoModifierLog &eval_log, const Span< SocketToUpdate > sockets_to_update)
 

Typedef Documentation

◆ RNAValueVariant

Definition at line 359 of file inverse_eval.cc.

Function Documentation

◆ backpropagate_socket_values()

bool blender::nodes::inverse_eval::backpropagate_socket_values ( bContext & C,
Object & object,
NodesModifierData & nmd,
geo_eval_log::GeoModifierLog & eval_log,
Span< SocketToUpdate > sockets_to_update )

◆ backpropagate_socket_values_through_node()

◆ convert_single_socket_value()

std::optional< bke::SocketValueVariant > blender::nodes::inverse_eval::convert_single_socket_value ( const bNodeSocket & old_socket,
const bNodeSocket & new_socket,
const bke::SocketValueVariant & old_value )

◆ evaluate_node_elem_downstream_filtered()

◆ evaluate_node_elem_upstream()

◆ find_local_inverse_eval_targets()

◆ foreach_element_on_inverse_eval_path()

void blender::nodes::inverse_eval::foreach_element_on_inverse_eval_path ( const ComputeContext & initial_context,
const SocketElem & initial_socket_elem,
FunctionRef< void(const ComputeContext &context)> foreach_context_fn,
FunctionRef< void(const ComputeContext &context, const bNodeSocket &socket, const ElemVariant &elem)> foreach_socket_fn )

Traverses the inverse evaluation path that starts at the given socket in a specific compute context.

Parameters
initial_contextCompute context where the inverse evaluation starts (e.g. may be deep in some nested node group).
initial_socket_elemSocket and value element that is propagated backwards.
foreach_context_fnIf provided, it is called for each compute context that is touched by the inverse evaluation path.
foreach_socket_fnIf provided, it is called for each socket on the inverse evaluation path.

Definition at line 273 of file inverse_eval.cc.

References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), BLI_assert, blender::nodes::value_elem::SocketElem::elem, blender::nodes::partial_eval::eval_downstream(), blender::nodes::partial_eval::eval_upstream(), evaluate_node_elem_downstream_filtered(), evaluate_node_elem_upstream(), blender::Vector< T, InlineBufferCapacity, Allocator >::extend(), get_input_elems_to_propagate(), blender::nodes::partial_eval::UpstreamEvalTargets::group_inputs, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::items(), blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::keys(), blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::lookup(), propagate_socket_elem(), propagate_value_elem_filtered(), blender::nodes::value_elem::SocketElem::socket, blender::nodes::partial_eval::UpstreamEvalTargets::sockets, and blender::nodes::partial_eval::UpstreamEvalTargets::value_nodes.

Referenced by blender::nodes::gizmos::foreach_compute_context_on_gizmo_path(), blender::nodes::gizmos::foreach_socket_on_gizmo_path(), and blender::nodes::gizmos::get_editable_gizmo_elem().

◆ get_input_elems_to_propagate()

◆ get_logged_socket_value()

std::optional< SocketValueVariant > blender::nodes::inverse_eval::get_logged_socket_value ( geo_eval_log::GeoTreeLog & tree_log,
const bNodeSocket & socket )

◆ propagate_socket_elem()

◆ propagate_value_elem_filtered()

◆ set_modifier_value()

◆ set_rna_property()

◆ set_rna_property_float3()

static bool blender::nodes::inverse_eval::set_rna_property_float3 ( bContext & C,
ID & id,
const StringRefNull rna_path,
const float3 & value )
static

Definition at line 456 of file inverse_eval.cc.

References set_rna_property().

Referenced by set_modifier_value(), set_socket_value(), and set_value_node_value().

◆ set_socket_value()

static bool blender::nodes::inverse_eval::set_socket_value ( bContext & C,
bNodeSocket & socket,
const SocketValueVariant & value_variant )
static

◆ set_value_node_value()

static bool blender::nodes::inverse_eval::set_value_node_value ( bContext & C,
bNode & node,
const SocketValueVariant & value_variant )
static