Cleanup: Use Span to iterate over nodes instead of ListBase
Since 90ea1b7643
, there is always a span of nodes
available at runtime. This is easier to read and write.
This commit is contained in:
parent
c5e71cebaa
commit
5b8e2ebd97
Notes:
blender-bot
2023-02-16 18:12:54 +01:00
Referenced by commit c2a0decbf3
, Cleanup: Use Span to iterate over nodes instead of ListBase
|
@ -71,6 +71,7 @@
|
|||
#include "BKE_lib_id.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_node_tree_update.h"
|
||||
#include "BKE_packedFile.h"
|
||||
#include "BKE_report.h"
|
||||
|
@ -2743,7 +2744,7 @@ static void image_walk_ntree_all_users(
|
|||
{
|
||||
switch (ntree->type) {
|
||||
case NTREE_SHADER:
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id) {
|
||||
if (node->type == SH_NODE_TEX_IMAGE) {
|
||||
NodeTexImage *tex = static_cast<NodeTexImage *>(node->storage);
|
||||
|
@ -2759,7 +2760,7 @@ static void image_walk_ntree_all_users(
|
|||
}
|
||||
break;
|
||||
case NTREE_TEXTURE:
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id && node->type == TEX_NODE_IMAGE) {
|
||||
Image *ima = (Image *)node->id;
|
||||
ImageUser *iuser = static_cast<ImageUser *>(node->storage);
|
||||
|
@ -2768,7 +2769,7 @@ static void image_walk_ntree_all_users(
|
|||
}
|
||||
break;
|
||||
case NTREE_COMPOSIT:
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id && node->type == CMP_NODE_IMAGE) {
|
||||
Image *ima = (Image *)node->id;
|
||||
ImageUser *iuser = static_cast<ImageUser *>(node->storage);
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#include "BKE_material.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_scene.h"
|
||||
#include "BKE_vfont.h"
|
||||
|
@ -1387,7 +1388,7 @@ static bool ntree_foreach_texnode_recursive(bNodeTree *nodetree,
|
|||
{
|
||||
const bool do_image_nodes = (slot_filter & PAINT_SLOT_IMAGE) != 0;
|
||||
const bool do_color_attributes = (slot_filter & PAINT_SLOT_COLOR_ATTRIBUTE) != 0;
|
||||
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
|
||||
for (bNode *node : nodetree->all_nodes()) {
|
||||
if (do_image_nodes && node->typeinfo->nclass == NODE_CLASS_TEXTURE &&
|
||||
node->typeinfo->type == SH_NODE_TEX_IMAGE && node->id) {
|
||||
if (!callback(node, userdata)) {
|
||||
|
|
|
@ -166,9 +166,9 @@ static void ntree_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, cons
|
|||
}
|
||||
|
||||
/* update node->parent pointers */
|
||||
LISTBASE_FOREACH (bNode *, new_node, &ntree_dst->nodes) {
|
||||
if (new_node->parent) {
|
||||
new_node->parent = dst_runtime.nodes_by_id.lookup_key_as(new_node->parent->identifier);
|
||||
for (bNode *node : ntree_dst->all_nodes()) {
|
||||
if (node->parent) {
|
||||
node->parent = dst_runtime.nodes_by_id.lookup_key_as(node->parent->identifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -323,7 +323,7 @@ static void node_foreach_id(ID *id, LibraryForeachIDData *data)
|
|||
|
||||
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, ntree->gpd, IDWALK_CB_USER);
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
BKE_LIB_FOREACHID_PROCESS_ID(data, node->id, IDWALK_CB_USER);
|
||||
|
||||
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
|
||||
|
@ -363,7 +363,7 @@ static void node_foreach_cache(ID *id,
|
|||
#endif
|
||||
|
||||
if (nodetree->type == NTREE_COMPOSIT) {
|
||||
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
|
||||
for (bNode *node : nodetree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_MOVIEDISTORTION) {
|
||||
key.offset_in_ID = size_t(BLI_ghashutil_strhash_p(node->name));
|
||||
function_callback(id, &key, (void **)&node->storage, 0, user_data);
|
||||
|
@ -378,7 +378,7 @@ static void node_foreach_path(ID *id, BPathForeachPathData *bpath_data)
|
|||
|
||||
switch (ntree->type) {
|
||||
case NTREE_SHADER: {
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == SH_NODE_SCRIPT) {
|
||||
NodeShaderScript *nss = reinterpret_cast<NodeShaderScript *>(node->storage);
|
||||
BKE_bpath_foreach_path_fixed_process(bpath_data, nss->filepath);
|
||||
|
@ -495,7 +495,7 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree)
|
|||
BKE_animdata_blend_write(writer, ntree->adt);
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
BLO_write_struct(writer, bNode, node);
|
||||
|
||||
if (node->prop) {
|
||||
|
@ -1229,7 +1229,7 @@ static void update_typeinfo(Main *bmain,
|
|||
}
|
||||
|
||||
/* initialize nodes */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (nodetype && STREQ(node->idname, nodetype->idname)) {
|
||||
node_set_typeinfo(C, ntree, node, unregister ? nullptr : nodetype);
|
||||
}
|
||||
|
@ -1266,7 +1266,7 @@ void ntreeSetTypes(const bContext *C, bNodeTree *ntree)
|
|||
{
|
||||
ntree_set_typeinfo(ntree, ntreeTypeFind(ntree->idname));
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
node_set_typeinfo(C, ntree, node, nodeTypeFind(node->idname));
|
||||
|
||||
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
|
||||
|
@ -2023,7 +2023,7 @@ void nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_so
|
|||
|
||||
bool nodeFindNodeTry(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_sockindex)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
ListBase *sockets = (sock->in_out == SOCK_IN) ? &node->inputs : &node->outputs;
|
||||
int i;
|
||||
LISTBASE_FOREACH_INDEX (bNodeSocket *, tsock, sockets, i) {
|
||||
|
@ -2778,7 +2778,7 @@ static void node_preview_init_tree_recursive(bNodeInstanceHash *previews,
|
|||
const int xsize,
|
||||
const int ysize)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
bNodeInstanceKey key = BKE_node_instance_key(parent_key, ntree, node);
|
||||
|
||||
if (BKE_node_preview_used(node)) {
|
||||
|
@ -2811,7 +2811,7 @@ static void node_preview_tag_used_recursive(bNodeInstanceHash *previews,
|
|||
bNodeTree *ntree,
|
||||
bNodeInstanceKey parent_key)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
bNodeInstanceKey key = BKE_node_instance_key(parent_key, ntree, node);
|
||||
|
||||
if (BKE_node_preview_used(node)) {
|
||||
|
@ -2926,7 +2926,7 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
|
|||
|
||||
static void node_unlink_attached(bNodeTree *ntree, bNode *parent)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->parent == parent) {
|
||||
nodeDetachNode(ntree, node);
|
||||
}
|
||||
|
@ -3454,7 +3454,7 @@ bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup)
|
|||
if (ntree == lookup) {
|
||||
return true;
|
||||
}
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (const bNode *node : ntree->all_nodes()) {
|
||||
if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id) {
|
||||
if (ntreeHasTree((bNodeTree *)node->id, lookup)) {
|
||||
return true;
|
||||
|
@ -3494,7 +3494,7 @@ bNode *nodeGetActive(bNodeTree *ntree)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & NODE_ACTIVE) {
|
||||
return node;
|
||||
}
|
||||
|
@ -3526,7 +3526,7 @@ void nodeClearActive(bNodeTree *ntree)
|
|||
return;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
node->flag &= ~NODE_ACTIVE;
|
||||
}
|
||||
}
|
||||
|
@ -3540,7 +3540,7 @@ void nodeSetActive(bNodeTree *ntree, bNode *node)
|
|||
SET_FLAG_FROM_TEST(flags_to_set, is_texture_class, NODE_ACTIVE_TEXTURE);
|
||||
|
||||
/* Make sure only one node is active per node tree. */
|
||||
LISTBASE_FOREACH (bNode *, tnode, &ntree->nodes) {
|
||||
for (bNode *tnode : ntree->all_nodes()) {
|
||||
tnode->flag &= ~flags_to_set;
|
||||
}
|
||||
node->flag |= flags_to_set;
|
||||
|
@ -3974,7 +3974,7 @@ void ntreeUpdateAllUsers(Main *main, ID *id)
|
|||
|
||||
/* Update all users of ngroup, to add/remove sockets as needed. */
|
||||
FOREACH_NODETREE_BEGIN (main, ntree, owner_id) {
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id == id) {
|
||||
BKE_ntree_update_tag_node_property(ntree, node);
|
||||
need_update = true;
|
||||
|
@ -4315,7 +4315,7 @@ bool BKE_node_tree_iter_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetre
|
|||
void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int layer_index)
|
||||
{
|
||||
BLI_assert(layer_index != -1);
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) {
|
||||
if (node->custom1 == layer_index) {
|
||||
node->custom1 = 0;
|
||||
|
|
|
@ -733,7 +733,7 @@ struct NodeTreeRelations {
|
|||
this->ensure_all_trees();
|
||||
|
||||
for (bNodeTree *ntree : *all_trees_) {
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1012,7 +1012,7 @@ class NodeTreeMainUpdater {
|
|||
#ifdef DEBUG
|
||||
/* Check the uniqueness of node identifiers. */
|
||||
Set<int32_t> node_identifiers;
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
BLI_assert(node->identifier > 0);
|
||||
node_identifiers.add_new(node->identifier);
|
||||
}
|
||||
|
@ -1053,7 +1053,7 @@ class NodeTreeMainUpdater {
|
|||
void update_individual_nodes(bNodeTree &ntree)
|
||||
{
|
||||
Vector<bNode *> group_inout_nodes;
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
nodeDeclarationEnsure(&ntree, node);
|
||||
if (this->should_update_individual_node(ntree, *node)) {
|
||||
bNodeType &ntype = *node->typeinfo;
|
||||
|
@ -1610,7 +1610,7 @@ class NodeTreeMainUpdater {
|
|||
void reset_changed_flags(bNodeTree &ntree)
|
||||
{
|
||||
ntree.runtime->changed_flag = NTREE_CHANGED_NOTHING;
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
node->runtime->changed_flag = NTREE_CHANGED_NOTHING;
|
||||
node->runtime->update = 0;
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
|
||||
|
@ -1728,7 +1728,7 @@ void BKE_ntree_update_tag_parent_change(bNodeTree *ntree, bNode *node)
|
|||
void BKE_ntree_update_tag_id_changed(Main *bmain, ID *id)
|
||||
{
|
||||
FOREACH_NODETREE_BEGIN (bmain, ntree, ntree_id) {
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id == id) {
|
||||
node->runtime->update |= NODE_UPDATE_ID;
|
||||
add_node_tag(ntree, node, NTREE_CHANGED_NODE_PROPERTY);
|
||||
|
|
|
@ -79,6 +79,7 @@
|
|||
#include "BKE_main.h"
|
||||
#include "BKE_mask.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_pointcache.h"
|
||||
|
@ -1449,7 +1450,7 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id)
|
|||
/* patch for missing scene IDs, can't be in do-versions */
|
||||
static void composite_patch(bNodeTree *ntree, Scene *scene)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->id == nullptr &&
|
||||
((node->type == CMP_NODE_R_LAYERS) ||
|
||||
(node->type == CMP_NODE_CRYPTOMATTE && node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER))) {
|
||||
|
|
|
@ -730,7 +730,7 @@ static void texture_nodes_fetch_images_for_pool(Tex *texture,
|
|||
bNodeTree *ntree,
|
||||
struct ImagePool *pool)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == SH_NODE_TEX_IMAGE && node->id != nullptr) {
|
||||
Image *image = (Image *)node->id;
|
||||
BKE_image_pool_acquire_ibuf(image, &texture->iuser, pool);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "BKE_main.h"
|
||||
#include "BKE_main_namemap.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
|
@ -115,7 +116,7 @@ void version_node_socket_name(bNodeTree *ntree,
|
|||
const char *old_name,
|
||||
const char *new_name)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == node_type) {
|
||||
change_node_socket_name(&node->inputs, old_name, new_name);
|
||||
change_node_socket_name(&node->outputs, old_name, new_name);
|
||||
|
@ -128,7 +129,7 @@ void version_node_input_socket_name(bNodeTree *ntree,
|
|||
const char *old_name,
|
||||
const char *new_name)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == node_type) {
|
||||
change_node_socket_name(&node->inputs, old_name, new_name);
|
||||
}
|
||||
|
@ -140,7 +141,7 @@ void version_node_output_socket_name(bNodeTree *ntree,
|
|||
const char *old_name,
|
||||
const char *new_name)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == node_type) {
|
||||
change_node_socket_name(&node->outputs, old_name, new_name);
|
||||
}
|
||||
|
@ -164,7 +165,7 @@ bNodeSocket *version_node_add_socket_if_not_exist(bNodeTree *ntree,
|
|||
|
||||
void version_node_id(bNodeTree *ntree, const int node_type, const char *new_name)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == node_type) {
|
||||
if (!STREQ(node->idname, new_name)) {
|
||||
strcpy(node->idname, new_name);
|
||||
|
@ -191,7 +192,7 @@ void version_node_socket_index_animdata(Main *bmain,
|
|||
continue;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type != node_type) {
|
||||
continue;
|
||||
}
|
||||
|
@ -216,7 +217,7 @@ void version_node_socket_index_animdata(Main *bmain,
|
|||
|
||||
void version_socket_update_is_used(bNodeTree *ntree)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
|
||||
socket->flag &= ~SOCK_IN_USE;
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
#include "BKE_material.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_node_tree_update.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_screen.h"
|
||||
|
@ -598,7 +599,7 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
|
|||
ma->roughness = 0.5f;
|
||||
|
||||
if (ma->nodetree) {
|
||||
LISTBASE_FOREACH (bNode *, node, &ma->nodetree->nodes) {
|
||||
for (bNode *node : ma->nodetree->all_nodes()) {
|
||||
if (node->type == SH_NODE_BSDF_PRINCIPLED) {
|
||||
bNodeSocket *roughness_socket = nodeFindSocket(node, SOCK_IN, "Roughness");
|
||||
bNodeSocketValueFloat *roughness_data = static_cast<bNodeSocketValueFloat *>(
|
||||
|
|
|
@ -1764,7 +1764,7 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
|
|||
}
|
||||
|
||||
/* nodetree's nodes... */
|
||||
LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
|
||||
for (bNode *bnode : ntree->all_nodes()) {
|
||||
build_idproperties(bnode->prop);
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &bnode->inputs) {
|
||||
build_nodetree_socket(socket);
|
||||
|
|
|
@ -2627,7 +2627,7 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
|
|||
RELATION_FLAG_NO_FLUSH);
|
||||
}
|
||||
/* nodetree's nodes... */
|
||||
LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
|
||||
for (bNode *bnode : ntree->all_nodes()) {
|
||||
build_idproperties(bnode->prop);
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &bnode->inputs) {
|
||||
build_nodetree_socket(socket);
|
||||
|
|
|
@ -34,10 +34,9 @@
|
|||
#include "BKE_linestyle.h"
|
||||
#include "BKE_modifier.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_particle.h"
|
||||
#ifdef WITH_FREESTYLE
|
||||
#endif
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_prototypes.h"
|
||||
|
@ -163,7 +162,7 @@ static void buttons_texture_modifier_geonodes_users_add(Object *ob,
|
|||
PointerRNA ptr;
|
||||
PropertyRNA *prop;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &node_tree->nodes) {
|
||||
for (bNode *node : node_tree->all_nodes()) {
|
||||
if (node->type == NODE_GROUP && node->id) {
|
||||
/* Recurse into the node group */
|
||||
buttons_texture_modifier_geonodes_users_add(ob, nmd, (bNodeTree *)node->id, users);
|
||||
|
@ -442,7 +441,7 @@ static void template_texture_select(bContext *C, void *user_p, void *UNUSED(arg)
|
|||
ct->texture = nullptr;
|
||||
|
||||
/* Not totally sure if we should also change selection? */
|
||||
LISTBASE_FOREACH (bNode *, node, &user->ntree->nodes) {
|
||||
for (bNode *node : user->ntree->all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
nodeSetSelected(user->node, true);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "BKE_context.h"
|
||||
#include "BKE_idprop.h"
|
||||
#include "BKE_lib_id.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_node_tree_update.h"
|
||||
#include "BKE_screen.h"
|
||||
|
||||
|
@ -91,7 +92,7 @@ static void add_group_input_node_fn(nodes::LinkSearchOpParams ¶ms)
|
|||
ED_node_tree_propagate_change(¶ms.C, CTX_data_main(¶ms.C), ¶ms.node_tree);
|
||||
|
||||
/* Hide the new input in all other group input nodes, to avoid making them taller. */
|
||||
LISTBASE_FOREACH (bNode *, node, ¶ms.node_tree.nodes) {
|
||||
for (bNode *node : params.node_tree.all_nodes()) {
|
||||
if (node->type == NODE_GROUP_INPUT) {
|
||||
bNodeSocket *new_group_input_socket = (bNodeSocket *)BLI_findlink(&node->outputs,
|
||||
group_input_index);
|
||||
|
|
|
@ -2621,7 +2621,7 @@ static void count_multi_input_socket_links(bNodeTree &ntree, SpaceNode &snode)
|
|||
}
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
|
||||
if (socket->flag & SOCK_MULTI_INPUT) {
|
||||
socket->runtime->total_inputs = counts.lookup_default(socket, 0);
|
||||
|
|
|
@ -116,7 +116,7 @@ float2 node_link_calculate_multi_input_position(const float2 &socket_position,
|
|||
|
||||
static void compo_tag_output_nodes(bNodeTree *nodetree, int recalc_flags)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
|
||||
for (bNode *node : nodetree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_COMPOSITE) {
|
||||
if (recalc_flags & COM_RECALC_COMPOSITE) {
|
||||
node->flag |= NODE_DO_OUTPUT_RECALC;
|
||||
|
@ -505,7 +505,7 @@ void ED_node_shader_default(const bContext *C, ID *id)
|
|||
|
||||
ma->nodetree = ntreeCopyTree(bmain, ma_default->nodetree);
|
||||
ma->nodetree->owner_id = &ma->id;
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ma->nodetree->nodes) {
|
||||
for (bNode *node_iter : ma->nodetree->all_nodes()) {
|
||||
BLI_strncpy(node_iter->name, DATA_(node_iter->name), NODE_MAXSTR);
|
||||
nodeUniqueName(ma->nodetree, node_iter);
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ void ED_node_set_active(
|
|||
|
||||
/* generic node group output: set node as active output */
|
||||
if (node->type == NODE_GROUP_OUTPUT) {
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
|
||||
for (bNode *node_iter : ntree->all_nodes()) {
|
||||
if (node_iter->type == NODE_GROUP_OUTPUT) {
|
||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||
}
|
||||
|
@ -700,7 +700,7 @@ void ED_node_set_active(
|
|||
SH_NODE_OUTPUT_WORLD,
|
||||
SH_NODE_OUTPUT_LIGHT,
|
||||
SH_NODE_OUTPUT_LINESTYLE)) {
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
|
||||
for (bNode *node_iter : ntree->all_nodes()) {
|
||||
if (node_iter->type == node->type) {
|
||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||
}
|
||||
|
@ -759,7 +759,7 @@ void ED_node_set_active(
|
|||
else if (ntree->type == NTREE_COMPOSIT) {
|
||||
/* make active viewer, currently only 1 supported... */
|
||||
if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
|
||||
for (bNode *node_iter : ntree->all_nodes()) {
|
||||
if (ELEM(node_iter->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
|
||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||
}
|
||||
|
@ -776,7 +776,7 @@ void ED_node_set_active(
|
|||
}
|
||||
else if (node->type == CMP_NODE_COMPOSITE) {
|
||||
if (was_output == 0) {
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
|
||||
for (bNode *node_iter : ntree->all_nodes()) {
|
||||
if (node_iter->type == CMP_NODE_COMPOSITE) {
|
||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||
}
|
||||
|
@ -804,7 +804,7 @@ void ED_node_set_active(
|
|||
else if (ntree->type == NTREE_GEOMETRY) {
|
||||
if (node->type == GEO_NODE_VIEWER) {
|
||||
if ((node->flag & NODE_DO_OUTPUT) == 0) {
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
|
||||
for (bNode *node_iter : ntree->all_nodes()) {
|
||||
if (node_iter->type == GEO_NODE_VIEWER) {
|
||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||
}
|
||||
|
@ -1362,7 +1362,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
|
|||
Map<const ID *, ID *> duplicated_node_groups;
|
||||
|
||||
bNode *lastnode = (bNode *)ntree->nodes.last;
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
bNode *new_node = bke::node_copy_with_mapping(
|
||||
ntree, *node, LIB_ID_COPY_DEFAULT, true, socket_map);
|
||||
|
@ -1429,11 +1429,11 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
|
||||
/* clear flags for recursive depth-first iteration */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
node->flag &= ~NODE_TEST;
|
||||
}
|
||||
/* reparent copied nodes */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if ((node->flag & SELECT) && !(node->flag & NODE_TEST)) {
|
||||
node_duplicate_reparent_recursive(ntree, node_map, node);
|
||||
}
|
||||
|
@ -1445,7 +1445,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
|
||||
/* deselect old nodes, select the copies instead */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
/* has been set during copy above */
|
||||
bNode *newnode = node_map.lookup(node);
|
||||
|
@ -1500,6 +1500,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
|
|||
Main *bmain = CTX_data_main(C);
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
Scene *curscene = CTX_data_scene(C);
|
||||
bNodeTree &edit_tree = *snode->edittree;
|
||||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||
|
||||
|
@ -1508,7 +1509,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
|
|||
scene->id.tag |= LIB_TAG_DOIT;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : edit_tree.all_nodes()) {
|
||||
if ((node->type == CMP_NODE_R_LAYERS) ||
|
||||
(node->type == CMP_NODE_CRYPTOMATTE && node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER)) {
|
||||
ID *id = node->id;
|
||||
|
@ -1523,7 +1524,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
|
|||
}
|
||||
}
|
||||
|
||||
ED_node_tree_propagate_change(C, bmain, snode->edittree);
|
||||
ED_node_tree_propagate_change(C, bmain, &edit_tree);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -1551,7 +1552,7 @@ int node_render_changed_exec(bContext *C, wmOperator * /*op*/)
|
|||
* All the nodes are using same render result, so there is no need to do
|
||||
* anything smart about check how exactly scene is used. */
|
||||
bNode *node = nullptr;
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &sce->nodetree->nodes) {
|
||||
for (bNode *node_iter : sce->nodetree->all_nodes()) {
|
||||
if (node_iter->id == (ID *)sce) {
|
||||
node = node_iter;
|
||||
break;
|
||||
|
@ -1610,7 +1611,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
|
|||
* If the flag is not set on all nodes, it is set.
|
||||
*/
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
|
||||
if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0) {
|
||||
|
@ -1629,7 +1630,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
|
|||
}
|
||||
}
|
||||
}
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
|
||||
if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0) {
|
||||
|
@ -1721,7 +1722,7 @@ static int node_deactivate_viewer_exec(bContext *C, wmOperator * /*op*/)
|
|||
|
||||
bNode *active_viewer = viewer_path::find_geometry_nodes_viewer(workspace.viewer_path, snode);
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
if (node->type != GEO_NODE_VIEWER) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1798,7 +1799,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator * /*op*/)
|
|||
|
||||
/* Toggle for all selected nodes */
|
||||
bool hidden = false;
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
if (node_has_hidden_sockets(node)) {
|
||||
hidden = true;
|
||||
|
@ -1807,7 +1808,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator * /*op*/)
|
|||
}
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
node_set_hidden_sockets(snode, node, !hidden);
|
||||
}
|
||||
|
@ -1848,7 +1849,7 @@ static int node_mute_exec(bContext *C, wmOperator * /*op*/)
|
|||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if ((node->flag & SELECT) && !node->typeinfo->no_muting) {
|
||||
node->flag ^= NODE_MUTED;
|
||||
BKE_ntree_update_tag_node_mute(snode->edittree, node);
|
||||
|
@ -2198,7 +2199,7 @@ static int node_copy_color_exec(bContext *C, wmOperator * /*op*/)
|
|||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (node->flag & NODE_SELECT && node != active_node) {
|
||||
if (active_node->flag & NODE_CUSTOM_COLOR) {
|
||||
node->flag |= NODE_CUSTOM_COLOR;
|
||||
|
@ -2249,7 +2250,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator * /*op*/)
|
|||
Map<const bNode *, bNode *> node_map;
|
||||
Map<const bNodeSocket *, bNodeSocket *> socket_map;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
/* No ID refcounting, this node is virtual,
|
||||
* detached from any actual Blender data currently. */
|
||||
|
@ -2801,7 +2802,7 @@ static bool node_shader_script_update_text_recursive(RenderEngine *engine,
|
|||
done_trees.add_new(ntree);
|
||||
|
||||
/* update each script that is using this text datablock */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == NODE_GROUP) {
|
||||
bNodeTree *ngroup = (bNodeTree *)node->id;
|
||||
if (ngroup && !done_trees.contains(ngroup)) {
|
||||
|
|
|
@ -440,7 +440,7 @@ static bool node_group_separate_selected(
|
|||
Main &bmain, bNodeTree &ntree, bNodeTree &ngroup, const float2 &offset, const bool make_copy)
|
||||
{
|
||||
/* deselect all nodes in the target tree */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
|
||||
|
@ -642,7 +642,7 @@ void NODE_OT_group_separate(wmOperatorType *ot)
|
|||
/** \name Make Group Operator
|
||||
* \{ */
|
||||
|
||||
static bool node_group_make_use_node(bNode &node, bNode *gnode)
|
||||
static bool node_group_make_use_node(const bNode &node, bNode *gnode)
|
||||
{
|
||||
return (&node != gnode && !ELEM(node.type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT) &&
|
||||
(node.flag & NODE_SELECT));
|
||||
|
@ -659,7 +659,7 @@ static bool node_group_make_test_selected(bNodeTree &ntree,
|
|||
bNodeTree *ngroup = ntreeAddTree(nullptr, "Pseudo Node Group", ntree_idname);
|
||||
|
||||
/* check poll functions for selected nodes */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (node_group_make_use_node(*node, gnode)) {
|
||||
const char *disabled_hint = nullptr;
|
||||
if (node->typeinfo->poll_instance &&
|
||||
|
@ -699,7 +699,7 @@ static bool node_group_make_test_selected(bNodeTree &ntree,
|
|||
link->fromnode->runtime->done |= 2;
|
||||
}
|
||||
}
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (!(node->flag & NODE_SELECT) && node != gnode && node->runtime->done == 3) {
|
||||
return false;
|
||||
}
|
||||
|
@ -713,7 +713,7 @@ static int node_get_selected_minmax(
|
|||
int totselect = 0;
|
||||
|
||||
INIT_MINMAX2(min, max);
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (const bNode *node : ntree.all_nodes()) {
|
||||
if (node_group_make_use_node(*node, gnode)) {
|
||||
float2 loc;
|
||||
nodeToView(node, node->offsetx, node->offsety, &loc.x, &loc.y);
|
||||
|
@ -814,7 +814,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
|
|||
static const float offsety = 0.0f;
|
||||
|
||||
/* deselect all nodes in the target tree */
|
||||
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
|
||||
|
@ -835,7 +835,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
|
|||
|
||||
/* Detach unselected nodes inside frames when the frame is put into the group. Otherwise the
|
||||
* `parent` pointer becomes dangling. */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (node->parent == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
@ -979,7 +979,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
|
|||
}
|
||||
|
||||
/* move nodes in the group to the center */
|
||||
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
if (node_group_make_use_node(*node, gnode) && !node->parent) {
|
||||
node->locx -= center[0];
|
||||
node->locy -= center[1];
|
||||
|
@ -988,7 +988,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
|
|||
|
||||
/* Expose all unlinked sockets too but only the visible ones. */
|
||||
if (expose_visible) {
|
||||
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
if (node_group_make_use_node(*node, gnode)) {
|
||||
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
|
||||
bool skip = false;
|
||||
|
|
|
@ -343,7 +343,7 @@ static void snode_autoconnect(SpaceNode &snode, const bool allow_multiple, const
|
|||
bNodeTree *ntree = snode.edittree;
|
||||
Vector<bNode *> sorted_nodes;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & NODE_SELECT) {
|
||||
sorted_nodes.append(node);
|
||||
}
|
||||
|
@ -616,7 +616,7 @@ static int view_socket(const bContext &C,
|
|||
{
|
||||
bNode *viewer_node = nullptr;
|
||||
/* Try to find a viewer that is already active. */
|
||||
LISTBASE_FOREACH (bNode *, node, &btree.nodes) {
|
||||
for (bNode *node : btree.all_nodes()) {
|
||||
if (is_viewer_node(*node)) {
|
||||
if (node->flag & NODE_DO_OUTPUT) {
|
||||
viewer_node = node;
|
||||
|
@ -636,7 +636,7 @@ static int view_socket(const bContext &C,
|
|||
}
|
||||
|
||||
if (viewer_node == nullptr) {
|
||||
LISTBASE_FOREACH (bNode *, node, &btree.nodes) {
|
||||
for (bNode *node : btree.all_nodes()) {
|
||||
if (is_viewer_node(*node)) {
|
||||
viewer_node = node;
|
||||
break;
|
||||
|
@ -1554,7 +1554,7 @@ static int detach_links_exec(bContext *C, wmOperator * /*op*/)
|
|||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
nodeInternalRelink(&ntree, node);
|
||||
}
|
||||
|
@ -1593,7 +1593,7 @@ static int node_parent_set_exec(bContext *C, wmOperator * /*op*/)
|
|||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (node == frame) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1679,11 +1679,11 @@ static int node_join_exec(bContext *C, wmOperator * /*op*/)
|
|||
nodeSetActive(&ntree, frame_node);
|
||||
|
||||
/* reset tags */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
node->runtime->done = 0;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (!(node->runtime->done & NODE_JOIN_DONE)) {
|
||||
node_join_attach_recursive(ntree, node, frame_node, selected_nodes);
|
||||
}
|
||||
|
@ -1844,13 +1844,13 @@ static int node_detach_exec(bContext *C, wmOperator * /*op*/)
|
|||
bNodeTree &ntree = *snode.edittree;
|
||||
|
||||
/* reset tags */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
node->runtime->done = 0;
|
||||
}
|
||||
/* detach nodes recursively
|
||||
* relative order is preserved here!
|
||||
*/
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
|
||||
for (bNode *node : ntree.all_nodes()) {
|
||||
if (!(node->runtime->done & NODE_DETACH_DONE)) {
|
||||
node_detach_recursive(ntree, node);
|
||||
}
|
||||
|
@ -2166,7 +2166,7 @@ static void node_parent_offset_apply(NodeInsertOfsData *data, bNode *parent, con
|
|||
|
||||
/* Flag all children as offset to prevent them from being offset
|
||||
* separately (they've already moved with the parent). */
|
||||
LISTBASE_FOREACH (bNode *, node, &data->ntree->nodes) {
|
||||
for (bNode *node : data->ntree->all_nodes()) {
|
||||
if (nodeIsChildOf(parent, node)) {
|
||||
/* NODE_TEST is used to flag nodes that shouldn't be offset (again) */
|
||||
node->flag |= NODE_TEST;
|
||||
|
@ -2201,12 +2201,12 @@ static bool node_link_insert_offset_frame_chain_cb(bNode *fromnode,
|
|||
/**
|
||||
* Applies #NodeInsertOfsData.offset_x to all children of \a parent.
|
||||
*/
|
||||
static void node_link_insert_offset_frame_chains(const bNodeTree *ntree,
|
||||
static void node_link_insert_offset_frame_chains(bNodeTree *ntree,
|
||||
const bNode *parent,
|
||||
NodeInsertOfsData *data,
|
||||
const bool reversed)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (nodeIsChildOf(parent, node)) {
|
||||
nodeChainIter(ntree, node, node_link_insert_offset_frame_chain_cb, data, reversed);
|
||||
}
|
||||
|
@ -2384,7 +2384,7 @@ static int node_insert_offset_modal(bContext *C, wmOperator *op, const wmEvent *
|
|||
|
||||
/* handle animation - do this before possibly aborting due to duration, since
|
||||
* main thread might be so busy that node hasn't reached final position yet */
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (UNLIKELY(node->runtime->anim_ofsx)) {
|
||||
const float endval = node->runtime->anim_init_locx + node->runtime->anim_ofsx;
|
||||
if (IS_EQF(node->locx, endval) == false) {
|
||||
|
@ -2410,7 +2410,7 @@ static int node_insert_offset_modal(bContext *C, wmOperator *op, const wmEvent *
|
|||
if (duration > NODE_INSOFS_ANIM_DURATION) {
|
||||
WM_event_remove_timer(CTX_wm_manager(C), nullptr, iofsd->anim_timer);
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
node->runtime->anim_init_locx = node->runtime->anim_ofsx = 0.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -247,7 +247,7 @@ static void node_socket_toggle(bNode *node, bNodeSocket &sock, bool deselect_nod
|
|||
|
||||
void node_deselect_all(SpaceNode &snode)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
nodeSetSelected(node, false);
|
||||
}
|
||||
}
|
||||
|
@ -259,7 +259,7 @@ void node_deselect_all_input_sockets(SpaceNode &snode, const bool deselect_nodes
|
|||
* We can do that more efficiently here.
|
||||
*/
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
bool sel = false;
|
||||
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
|
||||
|
@ -289,7 +289,7 @@ void node_deselect_all_output_sockets(SpaceNode &snode, const bool deselect_node
|
|||
* We can do that more efficiently here.
|
||||
*/
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
|
||||
for (bNode *node : snode.edittree->all_nodes()) {
|
||||
bool sel = false;
|
||||
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
|
||||
|
@ -334,7 +334,7 @@ Set<bNode *> get_selected_nodes(bNodeTree &node_tree)
|
|||
static bool node_select_grouped_type(bNodeTree &node_tree, bNode &node_act)
|
||||
{
|
||||
bool changed = false;
|
||||
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
if ((node->flag & SELECT) == 0) {
|
||||
if (node->type == node_act.type) {
|
||||
nodeSetSelected(node, true);
|
||||
|
@ -348,7 +348,7 @@ static bool node_select_grouped_type(bNodeTree &node_tree, bNode &node_act)
|
|||
static bool node_select_grouped_color(bNodeTree &node_tree, bNode &node_act)
|
||||
{
|
||||
bool changed = false;
|
||||
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
if ((node->flag & SELECT) == 0) {
|
||||
if (compare_v3v3(node->color, node_act.color, 0.005f)) {
|
||||
nodeSetSelected(node, true);
|
||||
|
@ -375,7 +375,7 @@ static bool node_select_grouped_name(bNodeTree &node_tree, bNode &node_act, cons
|
|||
suf_act = node_act.name;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
if (node->flag & SELECT) {
|
||||
continue;
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ void node_select_single(bContext &C, bNode &node)
|
|||
const wmWindowManager *wm = CTX_wm_manager(&C);
|
||||
bool active_texture_changed = false;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node_iter, &node_tree.nodes) {
|
||||
for (bNode *node_iter : node_tree.all_nodes()) {
|
||||
if (node_iter != &node) {
|
||||
nodeSetSelected(node_iter, false);
|
||||
}
|
||||
|
@ -771,7 +771,7 @@ static int node_box_select_exec(bContext *C, wmOperator *op)
|
|||
node_deselect_all(snode);
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
|
||||
for (bNode *node : node_tree.all_nodes()) {
|
||||
bool is_inside = false;
|
||||
|
||||
switch (node->type) {
|
||||
|
@ -1326,7 +1326,7 @@ static void node_find_update_fn(const bContext *C,
|
|||
|
||||
StringSearch *search = BLI_string_search_new();
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
char name[256];
|
||||
node_find_create_label(node, name, ARRAY_SIZE(name));
|
||||
BLI_string_search_add(search, name, node, 0);
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "BKE_lib_id.h"
|
||||
#include "BKE_lib_remap.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_screen.h"
|
||||
|
||||
#include "ED_node.h"
|
||||
|
@ -330,7 +331,7 @@ static bool any_node_uses_id(const bNodeTree *ntree, const ID *id)
|
|||
if (ELEM(nullptr, ntree, id)) {
|
||||
return false;
|
||||
}
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (const bNode *node : ntree->all_nodes()) {
|
||||
if (node->id == id) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
#include "BKE_node_tree_update.h"
|
||||
#include "BKE_report.h"
|
||||
|
||||
|
@ -128,8 +129,8 @@ static void createTransNodeData(bContext * /*C*/, TransInfo *t)
|
|||
t->flag = t->flag & ~T_PROP_EDIT_ALL;
|
||||
|
||||
/* set transform flags on nodes */
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
if (node->flag & NODE_SELECT && is_node_parent_select(node) == false) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & NODE_SELECT && !is_node_parent_select(node)) {
|
||||
node->flag |= NODE_TRANSFORM;
|
||||
tc->data_len++;
|
||||
}
|
||||
|
@ -145,7 +146,7 @@ static void createTransNodeData(bContext * /*C*/, TransInfo *t)
|
|||
TransData *td = tc->data = MEM_cnew_array<TransData>(tc->data_len, __func__);
|
||||
TransData2D *td2d = tc->data_2d = MEM_cnew_array<TransData2D>(tc->data_len, __func__);
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
|
||||
for (bNode *node : snode->edittree->all_nodes()) {
|
||||
if (node->flag & NODE_TRANSFORM) {
|
||||
NodeToTransData(td++, td2d++, node, dpi_fac);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ void activate_geometry_node(Main &bmain, SpaceNode &snode, bNode &node)
|
|||
if (wm == nullptr) {
|
||||
return;
|
||||
}
|
||||
LISTBASE_FOREACH (bNode *, iter_node, &snode.edittree->nodes) {
|
||||
for (bNode *iter_node : snode.edittree->all_nodes()) {
|
||||
if (iter_node->type == GEO_NODE_VIEWER) {
|
||||
SET_FLAG_FROM_TEST(iter_node->flag, iter_node == &node, NODE_DO_OUTPUT);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "BKE_image_format.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
|
||||
#include "IMB_colormanagement.h"
|
||||
|
||||
|
@ -454,7 +455,7 @@ static bNode *traverse_channel(bNodeSocket *input, const short target_type)
|
|||
* material's node tree. Returns null if no instance of either type was found. */
|
||||
static bNode *find_bsdf_node(Material *material)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &material->nodetree->nodes) {
|
||||
for (bNode *node : material->nodetree->all_nodes()) {
|
||||
if (ELEM(node->type, SH_NODE_BSDF_PRINCIPLED, SH_NODE_BSDF_DIFFUSE)) {
|
||||
return node;
|
||||
}
|
||||
|
|
|
@ -196,7 +196,7 @@ void ntreeCompositUpdateRLayers(bNodeTree *ntree)
|
|||
return;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_R_LAYERS) {
|
||||
node_cmp_rlayers_outputs(ntree, node);
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ void ntreeCompositTagRender(Scene *scene)
|
|||
for (Scene *sce_iter = (Scene *)G_MAIN->scenes.first; sce_iter;
|
||||
sce_iter = (Scene *)sce_iter->id.next) {
|
||||
if (sce_iter->nodetree) {
|
||||
LISTBASE_FOREACH (bNode *, node, &sce_iter->nodetree->nodes) {
|
||||
for (bNode *node : sce_iter->nodetree->all_nodes()) {
|
||||
if (node->id == (ID *)scene || node->type == CMP_NODE_COMPOSITE) {
|
||||
BKE_ntree_update_tag_node_property(sce_iter->nodetree, node);
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ void ntreeCompositClearTags(bNodeTree *ntree)
|
|||
return;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
node->runtime->need_exec = 0;
|
||||
if (node->type == NODE_GROUP) {
|
||||
ntreeCompositClearTags((bNodeTree *)node->id);
|
||||
|
|
|
@ -185,7 +185,7 @@ static bNode *node_get_active(bNodeTree *ntree, int sub_activity)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->flag & sub_activity) {
|
||||
activetexnode = node;
|
||||
/* if active we can return immediately */
|
||||
|
@ -221,7 +221,7 @@ static bNode *node_get_active(bNodeTree *ntree, int sub_activity)
|
|||
|
||||
if (hasgroup) {
|
||||
/* node active texture node in this tree, look inside groups */
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == NODE_GROUP) {
|
||||
bNode *tnode = node_get_active((bNodeTree *)node->id, sub_activity);
|
||||
if (tnode && ((tnode->flag & sub_activity) || !inactivenode)) {
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_node_runtime.hh"
|
||||
|
||||
#include "NOD_common.h"
|
||||
#include "node_common.h"
|
||||
|
@ -24,7 +25,7 @@ static void group_gpu_copy_inputs(bNode *gnode, GPUNodeStack *in, bNodeStack *gs
|
|||
{
|
||||
bNodeTree *ngroup = (bNodeTree *)gnode->id;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
if (node->type == NODE_GROUP_INPUT) {
|
||||
int a;
|
||||
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->outputs, a) {
|
||||
|
@ -44,7 +45,7 @@ static void group_gpu_move_outputs(bNode *gnode, GPUNodeStack *out, bNodeStack *
|
|||
{
|
||||
bNodeTree *ngroup = (bNodeTree *)gnode->id;
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
|
||||
for (bNode *node : ngroup->all_nodes()) {
|
||||
if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
|
||||
int a;
|
||||
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->inputs, a) {
|
||||
|
|
|
@ -1046,7 +1046,7 @@ static int compositor_needs_render(Scene *sce, int this_scene)
|
|||
return 1;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (const bNode *node : ntree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
|
||||
if (this_scene == 0 || node->id == nullptr || node->id == &sce->id) {
|
||||
return 1;
|
||||
|
@ -1071,7 +1071,7 @@ static void do_render_compositor_scenes(Render *re)
|
|||
/* now foreach render-result node we do a full render */
|
||||
/* results are stored in a way compositor will find it */
|
||||
GSet *scenes_rendered = BLI_gset_ptr_new(__func__);
|
||||
LISTBASE_FOREACH (bNode *, node, &re->scene->nodetree->nodes) {
|
||||
for (bNode *node : re->scene->nodetree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
|
||||
if (node->id && node->id != (ID *)re->scene) {
|
||||
Scene *scene = (Scene *)node->id;
|
||||
|
@ -1400,7 +1400,7 @@ static bool check_valid_compositing_camera(Scene *scene,
|
|||
ReportList *reports)
|
||||
{
|
||||
if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
|
||||
LISTBASE_FOREACH (bNode *, node, &scene->nodetree->nodes) {
|
||||
for (bNode *node : scene->nodetree->all_nodes()) {
|
||||
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
|
||||
Scene *sce = node->id ? (Scene *)node->id : scene;
|
||||
if (sce->camera == nullptr) {
|
||||
|
@ -1508,15 +1508,15 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool node_tree_has_compositor_output(bNodeTree *ntree)
|
||||
static bool node_tree_has_compositor_output(const bNodeTree *ntree)
|
||||
{
|
||||
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
|
||||
for (const bNode *node : ntree->all_nodes()) {
|
||||
if (ELEM(node->type, CMP_NODE_COMPOSITE, CMP_NODE_OUTPUT_FILE)) {
|
||||
return true;
|
||||
}
|
||||
if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) {
|
||||
if (node->id) {
|
||||
if (node_tree_has_compositor_output((bNodeTree *)node->id)) {
|
||||
if (node_tree_has_compositor_output((const bNodeTree *)node->id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue