[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49586] trunk/blender/source/blender/ editors: fix for transforming parented nodes, the node would check its parent was not transformed, but in fact its parents parent could still be getting transformed still, also, the order of initializing transform data made this check unreliable.

Campbell Barton ideasman42 at gmail.com
Sun Aug 5 23:06:56 CEST 2012


Revision: 49586
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49586
Author:   campbellbarton
Date:     2012-08-05 21:06:56 +0000 (Sun, 05 Aug 2012)
Log Message:
-----------
fix for transforming parented nodes, the node would check its parent was not transformed, but in fact its parents parent could still be getting transformed still, also, the order of initializing transform data made this check unreliable.

fix for mingw broke from one of my own commits, changing header order fixes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_view.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/editors/space_node/node_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_view.c	2012-08-05 21:02:30 UTC (rev 49585)
+++ trunk/blender/source/blender/editors/space_node/node_view.c	2012-08-05 21:06:56 UTC (rev 49586)
@@ -50,11 +50,11 @@
 
 #include "UI_view2d.h"
 
+#include "MEM_guardedalloc.h"
+
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
-#include "MEM_guardedalloc.h"
-
 #include "node_intern.h"  /* own include */
 
 

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-08-05 21:02:30 UTC (rev 49585)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-08-05 21:06:56 UTC (rev 49586)
@@ -5534,7 +5534,6 @@
 
 /* transcribe given node into TransData2D for Transforming */
 static void NodeToTransData(TransData *td, TransData2D *td2d, bNode *node)
-// static void NodeToTransData(bContext *C, TransInfo *t, TransData2D *td, bNode *node)
 {
 	/* hold original location */
 	float locxy[2];
@@ -5544,10 +5543,6 @@
 	//td2d->loc2d = &node->locx; /* current location */
 
 	td->flag = 0;
-	/* exclude nodes whose parent is also transformed */
-	if (node->parent && (node->parent->flag & NODE_TRANSFORM)) {
-		td->flag |= TD_SKIP;
-	}
 
 	td->loc = td2d->loc;
 	copy_v3_v3(td->iloc, td->loc);
@@ -5570,36 +5565,48 @@
 	td->extra = node;
 }
 
-static void createTransNodeData(bContext *C, TransInfo *t)
+static int is_node_parent_select(bNode *node)
 {
+	while ((node = node->parent)) {
+		if (node->flag & NODE_TRANSFORM) {
+			return TRUE;
+		}
+	}
+	return FALSE;
+}
+
+static void createTransNodeData(bContext *UNUSED(C), TransInfo *t)
+{
 	TransData *td;
 	TransData2D *td2d;
 	SpaceNode *snode = t->sa->spacedata.first;
 	bNode *node;
 
+	t->total = 0;
+
 	if (!snode->edittree) {
-		t->total = 0;
 		return;
 	}
 
 	/* set transform flags on nodes */
 	for (node = snode->edittree->nodes.first; node; node = node->next) {
-		if ((node->flag & NODE_SELECT) || (node->parent && (node->parent->flag & NODE_TRANSFORM)))
+		if (node->flag & NODE_SELECT && is_node_parent_select(node) == FALSE) {
 			node->flag |= NODE_TRANSFORM;
-		else
+			t->total++;
+		}
+		else {
 			node->flag &= ~NODE_TRANSFORM;
+		}
 	}
 
-	t->total = CTX_DATA_COUNT(C, selected_nodes);
-
 	td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransNode TransData");
 	td2d = t->data2d = MEM_callocN(t->total * sizeof(TransData2D), "TransNode TransData2D");
 
-	CTX_DATA_BEGIN(C, bNode *, selnode, selected_nodes)
-	{
-		NodeToTransData(td++, td2d++, selnode);
+	for (node = snode->edittree->nodes.first; node; node = node->next) {
+		if (node->flag & NODE_TRANSFORM) {
+			NodeToTransData(td++, td2d++, node);
+		}
 	}
-	CTX_DATA_END
 }
 
 /* *** CLIP EDITOR *** */




More information about the Bf-blender-cvs mailing list