Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/space_node/node_group.c')
-rw-r--r--source/blender/editors/space_node/node_group.c96
1 files changed, 64 insertions, 32 deletions
diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c
index 808d9375d22..3de389dca7c 100644
--- a/source/blender/editors/space_node/node_group.c
+++ b/source/blender/editors/space_node/node_group.c
@@ -106,12 +106,15 @@ static const char *group_node_idname(bContext *C)
{
SpaceNode *snode = CTX_wm_space_node(C);
- if (ED_node_is_shader(snode))
+ if (ED_node_is_shader(snode)) {
return "ShaderNodeGroup";
- else if (ED_node_is_compositor(snode))
+ }
+ else if (ED_node_is_compositor(snode)) {
return "CompositorNodeGroup";
- else if (ED_node_is_texture(snode))
+ }
+ else if (ED_node_is_texture(snode)) {
return "TextureNodeGroup";
+ }
return "";
}
@@ -121,10 +124,12 @@ static bNode *node_group_get_active(bContext *C, const char *node_idname)
SpaceNode *snode = CTX_wm_space_node(C);
bNode *node = nodeGetActive(snode->edittree);
- if (node && STREQ(node->idname, node_idname))
+ if (node && STREQ(node->idname, node_idname)) {
return node;
- else
+ }
+ else {
return NULL;
+ }
}
/* ***************** Edit Group operator ************* */
@@ -143,11 +148,13 @@ static int node_group_edit_exec(bContext *C, wmOperator *op)
if (gnode && !exit) {
bNodeTree *ngroup = (bNodeTree *)gnode->id;
- if (ngroup)
+ if (ngroup) {
ED_node_tree_push(snode, ngroup, gnode);
+ }
}
- else
+ else {
ED_node_tree_pop(snode);
+ }
WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL);
@@ -185,8 +192,9 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode)
ngroup = (bNodeTree *)gnode->id;
/* clear new pointers, set in copytree */
- for (node = ntree->nodes.first; node; node = node->next)
+ for (node = ntree->nodes.first; node; node = node->next) {
node->new_node = NULL;
+ }
/* wgroup is a temporary copy of the NodeTree we're merging in
* - all of wgroup's nodes are transferred across to their new home
@@ -217,8 +225,9 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode)
RNA_pointer_create(&wgroup->id, &RNA_Node, node, &ptr);
path = RNA_path_from_ID_to_struct(&ptr);
- if (path)
+ if (path) {
BLI_addtail(&anim_basepaths, BLI_genericNodeN(path));
+ }
}
/* migrate node */
@@ -359,8 +368,9 @@ static int node_group_ungroup_exec(bContext *C, wmOperator *op)
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
gnode = node_group_get_active(C, node_idname);
- if (!gnode)
+ if (!gnode) {
return OPERATOR_CANCELLED;
+ }
if (gnode->id && node_group_ungroup(bmain, snode->edittree, gnode)) {
ntreeUpdateTree(bmain, snode->nodetree);
@@ -402,18 +412,21 @@ static int node_group_separate_selected(
ListBase anim_basepaths = {NULL, NULL};
/* deselect all nodes in the target tree */
- for (node = ntree->nodes.first; node; node = node->next)
+ for (node = ntree->nodes.first; node; node = node->next) {
nodeSetSelected(node, false);
+ }
/* clear new pointers, set in BKE_node_copy_ex(). */
- for (node = ngroup->nodes.first; node; node = node->next)
+ for (node = ngroup->nodes.first; node; node = node->next) {
node->new_node = NULL;
+ }
/* add selected nodes into the ntree */
for (node = ngroup->nodes.first; node; node = node_next) {
node_next = node->next;
- if (!(node->flag & NODE_SELECT))
+ if (!(node->flag & NODE_SELECT)) {
continue;
+ }
/* ignore interface nodes */
if (ELEM(node->type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT)) {
@@ -440,13 +453,15 @@ static int node_group_separate_selected(
RNA_pointer_create(&ngroup->id, &RNA_Node, newnode, &ptr);
path = RNA_path_from_ID_to_struct(&ptr);
- if (path)
+ if (path) {
BLI_addtail(&anim_basepaths, BLI_genericNodeN(path));
+ }
}
/* ensure valid parent pointers, detach if parent stays inside the group */
- if (newnode->parent && !(newnode->parent->flag & NODE_SELECT))
+ if (newnode->parent && !(newnode->parent->flag & NODE_SELECT)) {
nodeDetachNode(newnode);
+ }
/* migrate node */
BLI_remlink(&ngroup->nodes, newnode);
@@ -469,8 +484,9 @@ static int node_group_separate_selected(
if (make_copy) {
/* make a copy of internal links */
- if (fromselect && toselect)
+ if (fromselect && toselect) {
nodeAddLink(ntree, link->fromnode->new_node, link->fromsock->new_sock, link->tonode->new_node, link->tosock->new_sock);
+ }
}
else {
/* move valid links over, delete broken links */
@@ -502,8 +518,9 @@ static int node_group_separate_selected(
}
ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
- if (!make_copy)
+ if (!make_copy) {
ngroup->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
+ }
return 1;
}
@@ -633,16 +650,19 @@ static bool node_group_make_test_selected(bNodeTree *ntree, bNode *gnode, const
/* free local pseudo node tree again */
ntreeFreeTree(ngroup);
MEM_freeN(ngroup);
- if (!ok)
+ if (!ok) {
return false;
+ }
/* check if all connections are OK, no unselected node has both
* inputs and outputs to a selection */
for (link = ntree->links.first; link; link = link->next) {
- if (node_group_make_use_node(link->fromnode, gnode))
+ if (node_group_make_use_node(link->fromnode, gnode)) {
link->tonode->done |= 1;
- if (node_group_make_use_node(link->tonode, gnode))
+ }
+ if (node_group_make_use_node(link->tonode, gnode)) {
link->fromnode->done |= 2;
+ }
}
for (node = ntree->nodes.first; node; node = node->next) {
if (!(node->flag & NODE_SELECT) &&
@@ -696,16 +716,18 @@ 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 */
- for (node = ngroup->nodes.first; node; node = node->next)
+ for (node = ngroup->nodes.first; node; node = node->next) {
nodeSetSelected(node, false);
+ }
totselect = node_get_selected_minmax(ntree, gnode, min, max);
add_v2_v2v2(center, min, max);
mul_v2_fl(center, 0.5f);
/* auto-add interface for "solo" nodes */
- if (totselect == 1)
+ if (totselect == 1) {
expose_all = true;
+ }
/* move nodes over */
for (node = ntree->nodes.first; node; node = nextn) {
@@ -721,13 +743,15 @@ static void node_group_make_insert_selected(const bContext *C, bNodeTree *ntree,
RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
path = RNA_path_from_ID_to_struct(&ptr);
- if (path)
+ if (path) {
BLI_addtail(&anim_basepaths, BLI_genericNodeN(path));
+ }
}
/* ensure valid parent pointers, detach if parent stays outside the group */
- if (node->parent && !(node->parent->flag & NODE_SELECT))
+ if (node->parent && !(node->parent->flag & NODE_SELECT)) {
nodeDetachNode(node);
+ }
/* change node-collection membership */
BLI_remlink(&ntree->nodes, node);
@@ -857,8 +881,9 @@ static void node_group_make_insert_selected(const bContext *C, bNodeTree *ntree,
break;
}
}
- if (skip)
+ if (skip) {
continue;
+ }
iosock = ntreeAddSocketInterfaceFromSocket(ngroup, node, sock);
@@ -872,11 +897,14 @@ static void node_group_make_insert_selected(const bContext *C, bNodeTree *ntree,
for (sock = node->outputs.first; sock; sock = sock->next) {
bNodeSocket *iosock, *output_sock;
bool skip = false;
- for (link = ngroup->links.first; link; link = link->next)
- if (link->fromsock == sock)
+ for (link = ngroup->links.first; link; link = link->next) {
+ if (link->fromsock == sock) {
skip = true;
- if (skip)
+ }
+ }
+ if (skip) {
continue;
+ }
iosock = ntreeAddSocketInterfaceFromSocket(ngroup, node, sock);
@@ -906,8 +934,9 @@ static bNode *node_group_make_from_selected(const bContext *C, bNodeTree *ntree,
totselect = node_get_selected_minmax(ntree, NULL, min, max);
/* don't make empty group */
- if (totselect == 0)
+ if (totselect == 0) {
return NULL;
+ }
/* new nodetree */
ngroup = ntreeAddTree(bmain, "NodeGroup", ntreetype);
@@ -939,8 +968,9 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
- if (!node_group_make_test_selected(ntree, NULL, ntree_idname, op->reports))
+ if (!node_group_make_test_selected(ntree, NULL, ntree_idname, op->reports)) {
return OPERATOR_CANCELLED;
+ }
gnode = node_group_make_from_selected(C, ntree, node_idname, ntree_idname);
@@ -995,12 +1025,14 @@ static int node_group_insert_exec(bContext *C, wmOperator *op)
gnode = node_group_get_active(C, node_idname);
- if (!gnode || !gnode->id)
+ if (!gnode || !gnode->id) {
return OPERATOR_CANCELLED;
+ }
ngroup = (bNodeTree *)gnode->id;
- if (!node_group_make_test_selected(ntree, gnode, ngroup->idname, op->reports))
+ if (!node_group_make_test_selected(ntree, gnode, ngroup->idname, op->reports)) {
return OPERATOR_CANCELLED;
+ }
node_group_make_insert_selected(C, ntree, gnode);