[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26401] trunk/blender: Fix #20549: selecting a texture node in a material node tree would

Brecht Van Lommel brecht at blender.org
Fri Jan 29 17:32:08 CET 2010


Revision: 26401
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26401
Author:   blendix
Date:     2010-01-29 17:32:06 +0100 (Fri, 29 Jan 2010)

Log Message:
-----------
Fix #20549: selecting a texture node in a material node tree would
keep that texture locked as the current visible texture in the
texture buttons.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_texture.py
    trunk/blender/source/blender/blenkernel/BKE_texture.h
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/editors/space_buttons/buttons_context.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_select.c

Modified: trunk/blender/release/scripts/ui/properties_texture.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_texture.py	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/release/scripts/ui/properties_texture.py	2010-01-29 16:32:06 UTC (rev 26401)
@@ -87,15 +87,14 @@
 
     def draw(self, context):
         layout = self.layout
-
+        slot = context.texture_slot
+        node = context.texture_node
         space = context.space_data
         tex = context.texture
         wide_ui = context.region.width > narrowui
         idblock = context_tex_datablock(context)
-        tex_collection = space.pin_id == None and type(idblock) != bpy.types.Brush
+        tex_collection = space.pin_id == None and type(idblock) != bpy.types.Brush and not node
 
-        
-
         if tex_collection:
             row = layout.row()
 
@@ -113,6 +112,8 @@
             
         if tex_collection:
             col.template_ID(idblock, "active_texture", new="texture.new")
+        elif node:
+            col.template_ID(node, "texture", new="texture.new")
         elif idblock:
             col.template_ID(idblock, "texture", new="texture.new")
         
@@ -129,7 +130,6 @@
             split = layout.split(percentage=0.2)
 
             if tex.use_nodes:
-                slot = context.texture_slot
 
                 if slot:
                     split.label(text="Output:")

Modified: trunk/blender/source/blender/blenkernel/BKE_texture.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_texture.h	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/blenkernel/BKE_texture.h	2010-01-29 16:32:06 UTC (rev 26401)
@@ -31,6 +31,7 @@
 #ifndef BKE_TEXTURE_H
 #define BKE_TEXTURE_H
 
+struct bNode;
 struct Brush;
 struct ColorBand;
 struct EnvMap;
@@ -75,6 +76,8 @@
 struct Tex *give_current_world_texture(struct World *world);
 struct Tex *give_current_brush_texture(struct Brush *br);
 
+struct bNode *give_current_material_texture_node(struct Material *ma);
+
 int			 give_active_mtex(struct ID *id, struct MTex ***mtex_ar, short *act);
 void		 set_active_mtex(struct ID *id, short act);
 

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2010-01-29 16:32:06 UTC (rev 26401)
@@ -858,6 +858,16 @@
 	}
 }
 
+bNode *give_current_material_texture_node(Material *ma)
+{
+	bNode *node;
+	
+	if(ma && ma->use_nodes && ma->nodetree)
+		return nodeGetActiveID(ma->nodetree, ID_TE);
+	
+	return NULL;
+}
+
 Tex *give_current_material_texture(Material *ma)
 {
 	MTex *mtex= NULL;
@@ -865,6 +875,9 @@
 	bNode *node;
 	
 	if(ma && ma->use_nodes && ma->nodetree) {
+		/* first check texture, then material, this works together
+		   with a hack that clears the active ID flag for textures on
+		   making a material node active */
 		node= nodeGetActiveID(ma->nodetree, ID_TE);
 
 		if(node) {
@@ -877,6 +890,7 @@
 				ma= (Material*)node->id;
 		}
 	}
+
 	if(ma) {
 		mtex= ma->mtex[(int)(ma->texact)];
 		if(mtex) tex= mtex->tex;

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_context.c	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_context.c	2010-01-29 16:32:06 UTC (rev 26401)
@@ -35,6 +35,7 @@
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_modifier_types.h"
+#include "DNA_node_types.h"
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -399,7 +400,6 @@
 			return 1;
 		}
 	}
-	/* TODO: material nodes */
 
 	/* no path to a texture possible */
 	return 0;
@@ -648,14 +648,30 @@
 
 		return 1;
 	}
+	else if(CTX_data_equals(member, "texture_node")) {
+		PointerRNA *ptr;
+
+		if((ptr=get_pointer_type(path, &RNA_Material))) {
+			Material *ma= ptr->data;
+
+			if(ma) {
+				bNode *node= give_current_material_texture_node(ma);
+				CTX_data_pointer_set(result, &ma->id, &RNA_Node, node);
+			}
+		}
+
+		return 1;
+	}
 	else if(CTX_data_equals(member, "texture_slot")) {
 		PointerRNA *ptr;
 
 		if((ptr=get_pointer_type(path, &RNA_Material))) {
-			Material *ma= ptr->data; /* should this be made a different option? */
-			Material *ma_node= give_node_material(ma);
-			ma= ma_node?ma_node:ma;
+			Material *ma= ptr->data;
 
+			/* if we have a node material, get slot from material in material node */
+			if(ma && ma->use_nodes && ma->nodetree)
+				ma= give_node_material(ma);
+
 			if(ma)
 				CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]);
 		}

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2010-01-29 16:32:06 UTC (rev 26401)
@@ -433,12 +433,12 @@
 	if(node->type!=NODE_GROUP) {
 		/* tree specific activate calls */
 		if(snode->treetype==NTREE_SHADER) {
-			// XXX
-#if 0
-			
 			/* when we select a material, active texture is cleared, for buttons */
 			if(node->id && GS(node->id->name)==ID_MA)
 				nodeClearActiveID(snode->edittree, ID_TE);
+
+			// XXX
+#if 0
 			if(node->id)
 				; // XXX BIF_preview_changed(-1);	/* temp hack to force texture preview to update */
 			

Modified: trunk/blender/source/blender/editors/space_node/node_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_select.c	2010-01-29 16:25:31 UTC (rev 26400)
+++ trunk/blender/source/blender/editors/space_node/node_select.c	2010-01-29 16:32:06 UTC (rev 26401)
@@ -122,7 +122,7 @@
 
 	/* WATCH THIS, there are a few other ways to change the active material */
 	if(node) {
-		if (node->id && GS(node->id->name)== ID_MA) {
+		if (node->id && ELEM(GS(node->id->name), ID_MA, ID_TE)) {
 			WM_event_add_notifier(C, NC_MATERIAL|ND_SHADING_DRAW, node->id);
 		}
 	}





More information about the Bf-blender-cvs mailing list