[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49523] trunk/blender/source/blender/ editors/space_node/node_edit.c: Fix for node clipboard copy operator for Frame nodes.

Lukas Toenne lukas.toenne at googlemail.com
Fri Aug 3 12:18:53 CEST 2012


Revision: 49523
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49523
Author:   lukastoenne
Date:     2012-08-03 10:18:52 +0000 (Fri, 03 Aug 2012)
Log Message:
-----------
Fix for node clipboard copy operator for Frame nodes. Was redirecting the parent pointer of the original instead of the copied nodes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2012-08-03 09:54:08 UTC (rev 49522)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2012-08-03 10:18:52 UTC (rev 49523)
@@ -1919,6 +1919,22 @@
 		}
 	}
 
+	/* ensure valid pointers */
+	for (node = ntree->nodes.first; node; node = node->next) {
+		if (node->flag & SELECT) {
+			bNode *new_node = node->new_node;
+			if (new_node->parent) {
+				/* parent pointer must be redirected to new node or detached if parent is not copied */
+				if (new_node->parent->flag & NODE_SELECT) {
+					new_node->parent = new_node->parent->new_node;
+				}
+				else {
+					nodeDetachNode(new_node);
+				}
+			}
+		}
+	}
+
 	/* copy links between selected nodes
 	 * NB: this depends on correct node->new_node and sock->new_sock pointers from above copy!
 	 */
@@ -1938,16 +1954,6 @@
 		}
 	}
 
-	/* reparent copied nodes */
-	for (node = ntree->nodes.first; node; node = node->next) {
-		if ((node->flag & SELECT) && node->parent) {
-			if (node->parent->flag & SELECT)
-				node->parent = node->parent->new_node;
-			else
-				node->parent = NULL;
-		}
-	}
-
 	return OPERATOR_FINISHED;
 }
 
@@ -1995,27 +2001,28 @@
 
 	/* copy nodes from clipboard */
 	for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
-		bNode *newnode = nodeCopyNode(ntree, node);
+		bNode *new_node = nodeCopyNode(ntree, node);
 
 		/* pasted nodes are selected */
-		node_select(newnode);
+		node_select(new_node);
 
 		/* place nodes around the mouse cursor */
-		newnode->locx += snode->mx - centerx;
-		newnode->locy += snode->my - centery;
+		new_node->locx += snode->mx - centerx;
+		new_node->locy += snode->my - centery;
 	}
+	
+	/* reparent copied nodes */
+	for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
+		bNode *new_node = node->new_node;
+		if (new_node->parent)
+			new_node->parent = new_node->parent->new_node;
+	}
 
 	for (link = nodeClipboardGetLinks()->first; link; link = link->next) {
 		nodeAddLink(ntree, link->fromnode->new_node, link->fromsock->new_sock,
 		            link->tonode->new_node, link->tosock->new_sock);
 	}
 
-	/* reparent copied nodes */
-	for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
-		if (node->new_node->parent)
-			node->new_node->parent = node->new_node->parent->new_node;
-	}
-
 	ntreeUpdateTree(snode->edittree);
 
 	snode_notify(C, snode);




More information about the Bf-blender-cvs mailing list