[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56272] trunk/blender/source/blender/ editors/space_node/node_edit.c: Fix #35068: bpy.ops.node. output_file_add_socket() now works on the active node

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Apr 24 18:59:56 CEST 2013


Revision: 56272
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56272
Author:   blendix
Date:     2013-04-24 16:59:56 +0000 (Wed, 24 Apr 2013)
Log Message:
-----------
Fix #35068: bpy.ops.node.output_file_add_socket() now works on the active node
if there is no "node" in the context, for scripting convenience.

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	2013-04-24 16:36:50 UTC (rev 56271)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2013-04-24 16:59:56 UTC (rev 56272)
@@ -1704,16 +1704,22 @@
 {
 	Scene *scene = CTX_data_scene(C);
 	SpaceNode *snode = CTX_wm_space_node(C);
-	PointerRNA ptr;
-	bNodeTree *ntree;
-	bNode *node;
+	PointerRNA ptr = CTX_data_pointer_get(C, "node");
+	bNodeTree *ntree = NULL;
+	bNode *node = NULL;
 	char file_path[MAX_NAME];
 
-	ptr = CTX_data_pointer_get(C, "node");
-	if (!ptr.data)
+	if (ptr.data) {
+		node = ptr.data;
+		ntree = ptr.id.data;
+	}
+	else if (snode && snode->edittree) {
+		ntree = snode->edittree;
+		node = nodeGetActive(snode->edittree);
+	}
+
+	if (!node)
 		return OPERATOR_CANCELLED;
-	node = ptr.data;
-	ntree = ptr.id.data;
 
 	RNA_string_get(op->ptr, "file_path", file_path);
 	ntreeCompositOutputFileAddSocket(ntree, node, file_path, &scene->r.im_format);
@@ -1746,13 +1752,20 @@
 {
 	SpaceNode *snode = CTX_wm_space_node(C);
 	PointerRNA ptr = CTX_data_pointer_get(C, "node");
-	bNodeTree *ntree;
-	bNode *node;
+	bNodeTree *ntree = NULL;
+	bNode *node = NULL;
 	
-	if (!ptr.data)
+	if (ptr.data) {
+		node = ptr.data;
+		ntree = ptr.id.data;
+	}
+	else if (snode && snode->edittree) {
+		ntree = snode->edittree;
+		node = nodeGetActive(snode->edittree);
+	}
+
+	if (!node)
 		return OPERATOR_CANCELLED;
-	node = ptr.data;
-	ntree = ptr.id.data;
 	
 	if (!ntreeCompositOutputFileRemoveActiveSocket(ntree, node))
 		return OPERATOR_CANCELLED;
@@ -1783,14 +1796,19 @@
 {
 	SpaceNode *snode = CTX_wm_space_node(C);
 	PointerRNA ptr = CTX_data_pointer_get(C, "node");
-	bNode *node;
+	bNode *node = NULL;
 	NodeImageMultiFile *nimf;
 	bNodeSocket *sock;
 	int direction;
 	
-	if (!ptr.data)
+	if (ptr.data)
+		node = ptr.data;
+	else if (snode && snode->edittree)
+		node = nodeGetActive(snode->edittree);
+
+	if (!node)
 		return OPERATOR_CANCELLED;
-	node = ptr.data;
+
 	nimf = node->storage;
 	
 	sock = BLI_findlink(&node->inputs, nimf->active_input);
@@ -2277,6 +2295,7 @@
 {
 	Scene *scene = CTX_data_scene(C);
 	RenderEngineType *type = RE_engines_find(scene->r.engine);
+	SpaceNode *snode = CTX_wm_space_node(C);
 	bNode *node;
 	Text *text;
 
@@ -2286,6 +2305,10 @@
 
 	/* see if we have a shader script node in context */
 	node = CTX_data_pointer_get_type(C, "node", &RNA_ShaderNodeScript).data;
+
+	if (!node && snode && snode->edittree)
+		node = nodeGetActive(snode->edittree);
+
 	if (node && node->type == SH_NODE_SCRIPT) {
 		NodeShaderScript *nss = node->storage;
 
@@ -2332,7 +2355,10 @@
 {
 	Main *bmain = CTX_data_main(C);
 	Scene *scene = CTX_data_scene(C);
+	SpaceNode *snode = CTX_wm_space_node(C);
 	PointerRNA nodeptr = CTX_data_pointer_get_type(C, "node", &RNA_ShaderNodeScript);
+	bNodeTree *ntree = NULL;
+	bNode *node = NULL;
 	RenderEngine *engine;
 	RenderEngineType *type;
 	int found = FALSE;
@@ -2342,11 +2368,18 @@
 	engine = RE_engine_create(type);
 	engine->reports = op->reports;
 
+	/* get node */
 	if (nodeptr.data) {
+		ntree = nodeptr.id.data;
+		node = nodeptr.data;
+	}
+	else if (snode && snode->edittree) {
+		ntree = snode->edittree;
+		node = nodeGetActive(snode->edittree);
+	}
+
+	if (node) {
 		/* update single node */
-		bNodeTree *ntree = nodeptr.id.data;
-		bNode *node = nodeptr.data;
-
 		type->update_script_node(engine, ntree, node);
 
 		found = TRUE;




More information about the Bf-blender-cvs mailing list