[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55645] trunk/blender/source/blender: Fix for node groups, now exposing a socket will copy the default value from internal nodes again .

Lukas Toenne lukas.toenne at googlemail.com
Thu Mar 28 11:32:04 CET 2013


Revision: 55645
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55645
Author:   lukastoenne
Date:     2013-03-28 10:32:04 +0000 (Thu, 28 Mar 2013)
Log Message:
-----------
Fix for node groups, now exposing a socket will copy the default value from internal nodes again. Also this value can be changed in the node group Interface panel.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/NOD_socket.h
    trunk/blender/source/blender/nodes/intern/node_common.c
    trunk/blender/source/blender/nodes/intern/node_socket.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2013-03-28 08:21:29 UTC (rev 55644)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2013-03-28 10:32:04 UTC (rev 55645)
@@ -120,6 +120,7 @@
 	void (*interface_draw_color)(struct bContext *C, struct PointerRNA *ptr, float *r_color);
 	void (*interface_register_properties)(struct bNodeTree *ntree, struct bNodeSocket *stemp, struct StructRNA *data_srna);
 	void (*interface_init_socket)(struct bNodeTree *ntree, struct bNodeSocket *stemp, struct bNode *node, struct bNodeSocket *sock, const char *data_path);
+	void (*interface_verify_socket)(struct bNodeTree *ntree, struct bNodeSocket *stemp, struct bNode *node, struct bNodeSocket *sock, const char *data_path);
 	void (*interface_from_socket)(struct bNodeTree *ntree, struct bNodeSocket *stemp, struct bNode *node, struct bNodeSocket *sock);
 	
 	/* RNA integration */

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2013-03-28 08:21:29 UTC (rev 55644)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2013-03-28 10:32:04 UTC (rev 55645)
@@ -1668,7 +1668,6 @@
 		MEM_freeN(sock->prop);
 	}
 	
-	/* can be left over from old files */
 	if (sock->default_value)
 		MEM_freeN(sock->default_value);
 }
@@ -2006,21 +2005,16 @@
 
 /* ************ NODE TREE INTERFACE *************** */
 
-static bNodeSocket *make_socket_template(bNodeTree *ntree, int in_out,
+static bNodeSocket *make_socket_interface(bNodeTree *ntree, int in_out,
                                          const char *idname, const char *name)
 {
 	bNodeSocketType *stype = nodeSocketTypeFind(idname);
 	bNodeSocket *sock;
 	int own_index = ntree->cur_index++;
 	
-	if (stype == NULL) {
-		printf("Error: node socket type '%s' undefined\n", idname);
-		return NULL;
-	}
-	
 	sock = MEM_callocN(sizeof(bNodeSocket), "socket template");
-	sock->typeinfo = stype;
 	BLI_strncpy(sock->idname, stype->idname, sizeof(sock->idname));
+	node_socket_set_typeinfo(ntree, sock, stype);
 	sock->in_out = in_out;
 	sock->type = SOCK_CUSTOM;	/* int type undefined by default */
 	
@@ -2073,7 +2067,7 @@
 {
 	bNodeSocket *iosock;
 	
-	iosock = make_socket_template(ntree, in_out, idname, name);
+	iosock = make_socket_interface(ntree, in_out, idname, name);
 	if (in_out == SOCK_IN) {
 		BLI_addtail(&ntree->inputs, iosock);
 		ntree->update |= NTREE_UPDATE_GROUP_IN;
@@ -2091,7 +2085,7 @@
 {
 	bNodeSocket *iosock;
 	
-	iosock = make_socket_template(ntree, in_out, idname, name);
+	iosock = make_socket_interface(ntree, in_out, idname, name);
 	if (in_out == SOCK_IN) {
 		BLI_insertlinkbefore(&ntree->inputs, next_sock, iosock);
 		ntree->update |= NTREE_UPDATE_GROUP_IN;

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2013-03-28 08:21:29 UTC (rev 55644)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2013-03-28 10:32:04 UTC (rev 55645)
@@ -2872,10 +2872,57 @@
 	}
 }
 
+static void std_node_socket_interface_draw(bContext *UNUSED(C), uiLayout *layout, PointerRNA *ptr)
+{
+	bNodeSocket *sock = ptr->data;
+	int type = sock->typeinfo->type;
+	/*int subtype = sock->typeinfo->subtype;*/
+	
+	switch (type) {
+		case SOCK_FLOAT: {
+			uiLayout *row;
+			uiItemR(layout, ptr, "default_value", 0, NULL, 0);
+			row = uiLayoutRow(layout, true);
+			uiItemR(row, ptr, "min_value", 0, "min", 0);
+			uiItemR(row, ptr, "max_value", 0, "max", 0);
+			break;
+		}
+		case SOCK_INT: {
+			uiLayout *row;
+			uiItemR(layout, ptr, "default_value", 0, NULL, 0);
+			row = uiLayoutRow(layout, true);
+			uiItemR(row, ptr, "min_value", 0, "min", 0);
+			uiItemR(row, ptr, "max_value", 0, "max", 0);
+			break;
+		}
+		case SOCK_BOOLEAN: {
+			uiItemR(layout, ptr, "default_value", 0, NULL, 0);
+			break;
+		}
+		case SOCK_VECTOR: {
+			uiLayout *row;
+			uiItemR(layout, ptr, "default_value", UI_ITEM_R_EXPAND, NULL, 0);
+			row = uiLayoutRow(layout, true);
+			uiItemR(row, ptr, "min_value", 0, "min", 0);
+			uiItemR(row, ptr, "max_value", 0, "max", 0);
+			break;
+		}
+		case SOCK_RGBA: {
+			uiItemR(layout, ptr, "default_value", 0, NULL, 0);
+			break;
+		}
+		case SOCK_STRING: {
+			uiItemR(layout, ptr, "default_value", 0, NULL, 0);
+			break;
+		}
+	}
+}
+
 void ED_init_standard_node_socket_type(bNodeSocketType *stype)
 {
 	stype->draw = std_node_socket_draw;
 	stype->draw_color = std_node_socket_draw_color;
+	stype->interface_draw = std_node_socket_interface_draw;
 	stype->interface_draw_color = std_node_socket_interface_draw_color;
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2013-03-28 08:21:29 UTC (rev 55644)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2013-03-28 10:32:04 UTC (rev 55645)
@@ -6058,13 +6058,32 @@
 	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
 	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
 	
-	/* XXX need to reset the from-type here, so subtype subclasses cast correctly! (RNA bug) */
 	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 	
 	/* socket interface */
 	srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
 	RNA_def_struct_ui_text(srna, "Float Node Socket Interface", "Floating point number socket of a node");
 	RNA_def_struct_sdna(srna, "bNodeSocket");
+	
+	RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "default_value");
+	
+	prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
+	RNA_def_property_float_sdna(prop, NULL, "value");
+	RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_float_range");
+	RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "min");
+	RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "max");
+	RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 }
 
 static void rna_def_node_socket_int(BlenderRNA *brna, const char *identifier, const char *interface_idname, PropertySubType subtype)
@@ -6085,13 +6104,32 @@
 	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
 	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
 	
-	/* XXX need to reset the from-type here, so subtype subclasses cast correctly! (RNA bug) */
 	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 	
 	/* socket interface */
 	srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
 	RNA_def_struct_ui_text(srna, "Integer Node Socket Interface", "Integer number socket of a node");
 	RNA_def_struct_sdna(srna, "bNodeSocket");
+
+	RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "default_value");
+	
+	prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
+	RNA_def_property_int_sdna(prop, NULL, "value");
+	RNA_def_property_int_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_int_range");
+	RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	prop = RNA_def_property(srna, "min_value", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "min");
+	RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	prop = RNA_def_property(srna, "max_value", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "max");
+	RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 }
 
 static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier, const char *interface_idname)
@@ -6111,13 +6149,21 @@
 	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
 	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
 	
-	/* XXX need to reset the from-type here, so subtype subclasses cast correctly! (RNA bug) */
 	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 	
 	/* socket interface */
 	srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
 	RNA_def_struct_ui_text(srna, "Boolean Node Socket Interface", "Boolean value socket of a node");
 	RNA_def_struct_sdna(srna, "bNodeSocket");
+	
+	RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "default_value");
+	
+	prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "value", 1);
+	RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
+	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+	
+	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 }
 
 static void rna_def_node_socket_vector(BlenderRNA *brna, const char *identifier, const char *interface_idname, PropertySubType subtype)
@@ -6138,13 +6184,32 @@
 	RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
 	RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
 	
-	/* XXX need to reset the from-type here, so subtype subclasses cast correctly! (RNA bug) */
 	RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
 	
 	/* socket interface */
 	srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
 	RNA_def_struct_ui_text(srna, "Vector Node Socket Interface", "3D vector socket of a node");

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list