diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-08-20 17:59:19 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-08-20 17:59:19 +0400 |
commit | 6c74d1147e56b36ad682d4bdeaed68d77166e776 (patch) | |
tree | a0a067591dbb28535a1682a982e55da06f1bea34 /source | |
parent | 0f6a6c7499f0c1fa509355c5967f30a42cfa771e (diff) |
minor cleanup to node pasting.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 55 |
2 files changed, 31 insertions, 26 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index dc2f3a1a2fa..62e80645a35 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1516,7 +1516,7 @@ int BKE_node_clipboard_validate(void) if (BLI_findindex(lb, node_info->id) == -1) { /* may assign NULL */ node->id = BLI_findstring(lb, node_info->id_name + 2, offsetof(ID, name) + 2); - printf("%s %p\n", node_info->id_name, node->id); + if (node->id == NULL) { ok = FALSE; } diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 6d01fc83647..245c9cefd1f 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -2018,46 +2018,55 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op) SpaceNode *snode = CTX_wm_space_node(C); bNodeTree *ntree = snode->edittree; bNode *gnode = node_tree_get_editgroup(snode->nodetree); - float gnode_x = 0.0f, gnode_y = 0.0f; + float gnode_center[2]; const ListBase *clipboard_nodes_lb; const ListBase *clipboard_links_lb; bNode *node; bNodeLink *link; int num_nodes; - float centerx, centery; + float center[2]; int is_clipboard_valid; + /* validate pointers in the clipboard */ + is_clipboard_valid = BKE_node_clipboard_validate(); + clipboard_nodes_lb = BKE_node_clipboard_get_nodes(); + clipboard_links_lb = BKE_node_clipboard_get_links(); + + if (clipboard_nodes_lb->first == NULL) { + BKE_report(op->reports, RPT_ERROR, "Clipboard is empty"); + return OPERATOR_CANCELLED; + } + if (BKE_node_clipboard_get_type() != ntree->type) { BKE_report(op->reports, RPT_ERROR, "Clipboard nodes are an incompatible type"); return OPERATOR_CANCELLED; } + /* only warn */ + if (is_clipboard_valid == FALSE) { + BKE_report(op->reports, RPT_WARNING, "Some nodes references could not be restored, will be left empty"); + } + ED_preview_kill_jobs(C); /* deselect old nodes */ node_deselect_all(snode); /* get group node offset */ - if (gnode) - nodeToView(gnode, 0.0f, 0.0f, &gnode_x, &gnode_y); - - - /* validate pointers in the clipboard */ - is_clipboard_valid = BKE_node_clipboard_validate(); - - clipboard_nodes_lb = BKE_node_clipboard_get_nodes(); - clipboard_links_lb = BKE_node_clipboard_get_links(); + if (gnode) { + nodeToView(gnode, 0.0f, 0.0f, &gnode_center[0], &gnode_center[1]); + } + else { + zero_v2(gnode_center); + } /* calculate "barycenter" for placing on mouse cursor */ - num_nodes = 0; - centerx = centery = 0.0f; - for (node = clipboard_nodes_lb->first; node; node = node->next) { - ++num_nodes; - centerx += 0.5f * (node->totr.xmin + node->totr.xmax); - centery += 0.5f * (node->totr.ymin + node->totr.ymax); + zero_v2(center); + for (node = clipboard_nodes_lb->first, num_nodes = 0; node; node = node->next, num_nodes++) { + center[0] += 0.5f * (node->totr.xmin + node->totr.xmax); + center[1] += 0.5f * (node->totr.ymin + node->totr.ymax); } - centerx /= num_nodes; - centery /= num_nodes; + mul_v2_fl(center, 1.0 / num_nodes); /* copy nodes from clipboard */ for (node = clipboard_nodes_lb->first; node; node = node->next) { @@ -2079,8 +2088,8 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op) /* place nodes around the mouse cursor. child nodes locations are relative to parent */ if (!new_node->parent) { - new_node->locx += snode->cursor[0] - centerx - gnode_x; - new_node->locy += snode->cursor[1] - centery - gnode_y; + new_node->locx += snode->cursor[0] - center[0] - gnode_center[0]; + new_node->locy += snode->cursor[1] - center[1] - gnode_center[1]; } } @@ -2094,10 +2103,6 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op) snode_notify(C, snode); snode_dag_update(C, snode); - if (is_clipboard_valid == FALSE) { - BKE_report(op->reports, RPT_ERROR, "Some nodes ID references could not be found"); - } - return OPERATOR_FINISHED; } |