[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24470] trunk/blender/source/blender: Wrapped node input and output sockets in RNA.

Matt Ebb matt at mke3.net
Wed Nov 11 03:15:22 CET 2009


Revision: 24470
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24470
Author:   broken
Date:     2009-11-11 03:15:09 +0100 (Wed, 11 Nov 2009)

Log Message:
-----------
Wrapped node input and output sockets in RNA.

This allows you to set and animate the values of socket inputs and outputs, for example the value node.
It's also a step on the way to manipulating node trees via python (i.e. linking node sockets to each other).

This fixes [#19841] RGB Node in compositor not working

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_channels_defines.c
    trunk/blender/source/blender/editors/include/UI_icons.h
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_ID.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c

Modified: trunk/blender/source/blender/editors/animation/anim_channels_defines.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_defines.c	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/editors/animation/anim_channels_defines.c	2009-11-11 02:15:09 UTC (rev 24470)
@@ -1867,7 +1867,7 @@
 						strcpy(treetype, "Material");
 					sprintf(name, "Nodes:%s", treetype);
 					
-					special= ICON_NODE;
+					special= ICON_NODETREE;
 				}
 					break;
 				case SPACE_SEQ:

Modified: trunk/blender/source/blender/editors/include/UI_icons.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_icons.h	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/editors/include/UI_icons.h	2009-11-11 02:15:09 UTC (rev 24470)
@@ -54,8 +54,8 @@
 DEF_ICON(ICON_GO_LEFT)
 DEF_ICON(ICON_PLUG)
 DEF_ICON(ICON_UI)
-DEF_ICON(ICON_TEXNODE)
-DEF_ICON(ICON_TEXNODE_SEL)
+DEF_ICON(ICON_NODE)
+DEF_ICON(ICON_NODE_SEL)
 	
 	/* ui */
 DEF_ICON(ICON_FULLSCREEN)
@@ -157,7 +157,7 @@
 DEF_ICON(ICON_NLA)
 DEF_ICON(ICON_SCRIPTWIN)
 DEF_ICON(ICON_TIME)
-DEF_ICON(ICON_NODE)
+DEF_ICON(ICON_NODETREE)
 DEF_ICON(ICON_LOGIC)
 DEF_ICON(ICON_CONSOLE)
 DEF_ICON(ICON_PREFERENCES)

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2009-11-11 02:15:09 UTC (rev 24470)
@@ -197,40 +197,30 @@
 
 static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
-	uiBlock *block= uiLayoutAbsoluteBlock(layout);
 	bNode *node= ptr->data;
-	rctf *butr= &node->butr;
-	bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
+	PointerRNA sockptr;
+	PropertyRNA *prop;
 	
-	uiDefButF(block, NUM, B_NODE_EXEC, "", 
-			  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 20, 
-			  sock->ns.vec, sock->ns.min, sock->ns.max, 10, 2, "");
+	/* first socket stores value */
+	prop = RNA_struct_find_property(ptr, "outputs");
+	RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr);
+	
+	uiItemR(layout, "", 0, &sockptr, "default_value", 0);
 }
 
 static void node_buts_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)
 {
-	uiBlock *block= uiLayoutAbsoluteBlock(layout);
+	uiLayout *col;
 	bNode *node= ptr->data;
-	rctf *butr= &node->butr;
-	bNodeSocket *sock= node->outputs.first;		/* first socket stores value */
-
-	if(sock) {
-		/* enforce square box drawing */
-		uiBlockSetEmboss(block, UI_EMBOSSP);
-		
-		uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
-				  (short)butr->xmin, (short)butr->ymin, butr->xmax-butr->xmin, 12, 
-				  sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
-		uiDefButF(block, HSVCUBE, B_NODE_EXEC, "", 
-				  (short)butr->xmin, (short)butr->ymin+15, butr->xmax-butr->xmin, butr->xmax-butr->xmin -15 -15, 
-				  sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
-		uiDefButF(block, COL, B_NOP, "",		
-				  (short)butr->xmin, (short)butr->ymax-12, butr->xmax-butr->xmin, 12, 
-				  sock->ns.vec, 0.0, 0.0, -1, 0, "");
-		/* the -1 above prevents col button to popup a color picker */
-		
-		uiBlockSetEmboss(block, UI_EMBOSS);
-	}
+	PointerRNA sockptr;
+	PropertyRNA *prop;
+	
+	/* first socket stores value */
+	prop = RNA_struct_find_property(ptr, "outputs");
+	RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr);
+	
+	col = uiLayoutColumn(layout, 0);
+	uiItemR(col, "", 0, &sockptr, "default_value", 0);
 }
 
 static void node_buts_mix_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2009-11-11 02:15:09 UTC (rev 24470)
@@ -548,55 +548,25 @@
 
 /* **************  Socket callbacks *********** */
 
-static void socket_vector_menu_cb(bContext *C, void *node_v, void *ntree_v)
-{
-	if(node_v && ntree_v) {
-		NodeTagChanged(ntree_v, node_v); 
-		// addqueue(curarea->win, UI_BUT_EVENT, B_NODE_EXEC); XXX
-	}
-}
-
 /* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
 static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *socket_v)
 {
-	SpaceNode *snode= CTX_wm_space_node(C);
-	ScrArea *sa= CTX_wm_area(C);
-	bNode *node;
 	bNodeSocket *sock= socket_v;
-	bNodeStack *ns= &sock->ns;
 	uiBlock *block;
-	uiBut *bt;
 	
-	/* a bit ugly... retrieve the node the socket comes from */
-	for(node= snode->nodetree->nodes.first; node; node= node->next) {
-		bNodeSocket *sockt;
-		for(sockt= node->inputs.first; sockt; sockt= sockt->next)
-			if(sockt==sock)
-				break;
-		if(sockt)
-			break;
-	}
+	SpaceNode *snode= CTX_wm_space_node(C);
+	bNodeTree *ntree = snode->nodetree;
+	PointerRNA ptr;
+	uiLayout *layout;
 	
+	RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr);
+	
 	block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS);
 	uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN);
-
-	/* use this for a fake extra empy space around the buttons */
-	uiDefBut(block, LABEL, 0, "",			-4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
 	
-	uiBlockBeginAlign(block);
-	bt= uiDefButF(block, NUMSLI, 0, "X ",	 0,40,180,20, ns->vec, ns->min, ns->max, 10, 0, "");
-	uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
-	bt= uiDefButF(block, NUMSLI, 0, "Y ",	 0,20,180,20, ns->vec+1, ns->min, ns->max, 10, 0, "");
-	uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
-	bt= uiDefButF(block, NUMSLI, 0, "Z ",	 0,0,180,20, ns->vec+2, ns->min, ns->max, 10, 0, "");
-	uiButSetFunc(bt, socket_vector_menu_cb, node, snode->nodetree);
+	layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, sock->locx, sock->locy-8, 140, 20, U.uistyles.first), 0);
 	
-	uiBlockSetDirection(block, UI_TOP);
-	uiEndBlock(C, block);
-	
-	ED_area_tag_redraw(sa);
-	
-	return block;
+	uiItemR(layout, "", 0, &ptr, "default_value", UI_ITEM_R_EXPAND);
 }
 
 /* not a callback */
@@ -671,6 +641,8 @@
 	int /*ofs,*/ color_id= node_get_colorid(node);
 	char showname[128]; /* 128 used below */
 	View2D *v2d = &ar->v2d;
+	bNodeTree *ntree = snode->nodetree;
+	PointerRNA ptr;
 	
 	uiSetRoundBox(15-4);
 	ui_dropshadow(rct, BASIS_RAD, snode->aspect, node->flag & SELECT);
@@ -705,10 +677,10 @@
 		glEnable(GL_BLEND);
 		if(node->id->lib) {
 			float rgb[3] = {1.0f, 0.7f, 0.3f};
-			UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY, ICON_NODE, snode->aspect, rgb);
+			UI_icon_draw_aspect_color(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, rgb);
 		}
 		else {
-			UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_NODE, snode->aspect, 0.5f);
+			UI_icon_draw_aspect(iconofs, rct->ymax-NODE_DY, ICON_NODETREE, snode->aspect, 0.5f);
 		}
 		glDisable(GL_BLEND);
 	}
@@ -789,13 +761,15 @@
 		if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) {
 			socket_circle_draw(sock, NODE_SOCKSIZE);
 			
+			RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &ptr);
+			
 			if(node->block && sock->link==NULL) {
 				float *butpoin= sock->ns.vec;
 				
 				if(sock->type==SOCK_VALUE) {
-					bt= uiDefButF(node->block, NUM, B_NODE_EXEC, sock->name, 
-						  (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17, 
-						  butpoin, sock->ns.min, sock->ns.max, 10, 2, "");
+					bt=uiDefButR(node->block, NUM, B_NODE_EXEC, sock->name,
+							 (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17, 
+							  &ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
 					uiButSetFunc(bt, node_sync_cb, snode, node);
 				}
 				else if(sock->type==SOCK_VECTOR) {
@@ -808,9 +782,9 @@
 					
 					if(labelw>0) width= 40; else width= (short)node->width-NODE_DY;
 					
-					bt= uiDefButF(node->block, COL, B_NODE_EXEC, "", 
-						(short)(sock->locx+NODE_DYS), (short)sock->locy-8, width, 15, 
-						   butpoin, 0, 0, 0, 0, "");
+					bt=uiDefButR(node->block, COL, B_NODE_EXEC, "",
+								 (short)sock->locx+NODE_DYS, (short)(sock->locy)-8, width, 15, 
+								 &ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
 					uiButSetFunc(bt, node_sync_cb, snode, node);
 					
 					if(labelw>0) uiDefBut(node->block, LABEL, 0, sock->name, 
@@ -820,7 +794,7 @@
 			}
 			else {
 				
-				uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+3.0f), (short)(sock->locy-9.0f), 
+				uiDefBut(node->block, LABEL, 0, sock->name, (short)(sock->locx+7), (short)(sock->locy-9.0f), 
 						 (short)(node->width-NODE_DY), NODE_DY,  NULL, 0, 0, 0, 0, "");
 			}
 		}

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/makesrna/RNA_access.h	2009-11-11 02:15:09 UTC (rev 24470)
@@ -310,6 +310,7 @@
 extern StructRNA RNA_NlaTrack;
 extern StructRNA RNA_Node;
 extern StructRNA RNA_NodeTree;
+extern StructRNA RNA_NodeSocket;
 extern StructRNA RNA_NoiseTexture;
 extern StructRNA RNA_NorController;
 extern StructRNA RNA_Nurb;
@@ -358,6 +359,7 @@
 extern StructRNA RNA_RenderLayer;
 extern StructRNA RNA_RenderPass;
 extern StructRNA RNA_RenderResult;
+extern StructRNA RNA_RGBANodeSocket;
 extern StructRNA RNA_RigidBodyJointConstraint;
 extern StructRNA RNA_Scene;
 extern StructRNA RNA_SceneGameData;
@@ -515,7 +517,9 @@
 extern StructRNA RNA_UserPreferencesSystem;
 extern StructRNA RNA_UserPreferencesView;
 extern StructRNA RNA_UserSolidLight;
+extern StructRNA RNA_ValueNodeSocket;
 extern StructRNA RNA_VectorFont;
+extern StructRNA RNA_VectorNodeSocket;
 extern StructRNA RNA_VertexGroup;
 extern StructRNA RNA_VertexGroupElement;
 extern StructRNA RNA_VertexPaint;

Modified: trunk/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ID.c	2009-11-11 01:32:38 UTC (rev 24469)
+++ trunk/blender/source/blender/makesrna/intern/rna_ID.c	2009-11-11 02:15:09 UTC (rev 24470)
@@ -53,7 +53,7 @@
 	{ID_MA, "MATERIAL", ICON_MATERIAL_DATA, "Material", ""},
 	{ID_MB, "META", ICON_META_DATA, "MetaBall", ""},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list