[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33615] trunk/blender/source/blender: Bugfix #25179

Ton Roosendaal ton at blender.org
Sun Dec 12 19:16:54 CET 2010


Revision: 33615
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33615
Author:   ton
Date:     2010-12-12 19:16:54 +0100 (Sun, 12 Dec 2010)

Log Message:
-----------
Bugfix #25179

Armature properties: layer buttons now show which ones are in use,
like object layers.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/space_view3d/drawarmature.c
    trunk/blender/source/blender/makesdna/DNA_armature_types.h

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2010-12-12 17:59:48 UTC (rev 33614)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2010-12-12 18:16:54 UTC (rev 33615)
@@ -30,6 +30,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "DNA_screen_types.h"
+#include "DNA_armature_types.h"
 #include "DNA_userdef_types.h"
 
 #include "BLI_listbase.h"
@@ -352,23 +353,35 @@
 		int butw, buth, unit;
 		int cols= (len >= 20)? 2: 1;
 		int colbuts= len/(2*cols);
+		int layer_used= 0;
 
 		uiBlockSetCurLayout(block, uiLayoutAbsolute(layout, 0));
 
 		unit= UI_UNIT_X*0.75;
 		butw= unit;
 		buth= unit;
+		
+		if(ptr->type == &RNA_Armature) {
+			bArmature *arm= (bArmature *)ptr->data;
+			layer_used= arm->layer_used;
+		}
 
 		for(b=0; b<cols; b++) {
 			uiBlockBeginAlign(block);
 
 			for(a=0; a<colbuts; a++) {
-				but= uiDefAutoButR(block, ptr, prop, a+b*colbuts, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
+				if(layer_used & (1<<(a+b*colbuts))) icon= ICON_LAYER_USED;
+				else icon= ICON_BLANK1;
+					
+				but= uiDefAutoButR(block, ptr, prop, a+b*colbuts, "", icon, x + butw*a, y+buth, butw, buth);
 				if(subtype == PROP_LAYER_MEMBER)
 					uiButSetFunc(but, ui_layer_but_cb, but, SET_INT_IN_POINTER(a+b*colbuts));
 			}
 			for(a=0; a<colbuts; a++) {
-				but= uiDefAutoButR(block, ptr, prop, a+len/2+b*colbuts, "", ICON_BLANK1, x + butw*a, y, butw, buth);
+				if(layer_used & (1<<(a+len/2+b*colbuts))) icon= ICON_LAYER_USED;
+				else icon= ICON_BLANK1;
+				
+				but= uiDefAutoButR(block, ptr, prop, a+len/2+b*colbuts, "", icon, x + butw*a, y, butw, buth);
 				if(subtype == PROP_LAYER_MEMBER)
 					uiButSetFunc(but, ui_layer_but_cb, but, SET_INT_IN_POINTER(a+len/2+b*colbuts));
 			}

Modified: trunk/blender/source/blender/editors/space_view3d/drawarmature.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2010-12-12 17:59:48 UTC (rev 33614)
+++ trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2010-12-12 18:16:54 UTC (rev 33615)
@@ -1585,6 +1585,9 @@
 	short do_dashed= 3, draw_wire= 0;
 	short flag, constflag;
 	
+	/* being set below */
+	arm->layer_used= 0;
+	
 	/* hacky... prevent outline select from drawing dashed helplines */
 	glGetFloatv(GL_LINE_WIDTH, &tmp);
 	if (tmp > 1.1) do_dashed &= ~1;
@@ -1631,6 +1634,7 @@
 		
 		for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
 			bone= pchan->bone;
+			arm->layer_used |= bone->layer;
 			
 			if ( (bone) && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG)) ) {
 				if (bone->layer & arm->layer) {
@@ -1776,6 +1780,7 @@
 		
 		for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
 			bone= pchan->bone;
+			arm->layer_used |= bone->layer;
 			
 			if ((bone) && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) {
 				if (bone->layer & arm->layer) {
@@ -1948,6 +1953,9 @@
 	unsigned int index;
 	int flag;
 	
+	/* being set in code below */
+	arm->layer_used= 0;
+	
 	/* envelope (deform distance) */
 	if(arm->drawtype==ARM_ENVELOPE) {
 		/* precalc inverse matrix for drawing screen aligned */
@@ -2020,6 +2028,7 @@
 		index= 0;	/* do selection codes */
 	
 	for (eBone=arm->edbo->first; eBone; eBone=eBone->next) {
+		arm->layer_used |= eBone->layer;
 		if (eBone->layer & arm->layer) {
 			if ((eBone->flag & BONE_HIDDEN_A)==0) {
 				

Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h	2010-12-12 17:59:48 UTC (rev 33614)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h	2010-12-12 18:16:54 UTC (rev 33615)
@@ -95,8 +95,7 @@
 	short		deformflag; 
 	short		pathflag;
 	
-	int			pad;
-	
+	unsigned int layer_used;		/* for UI, to show which layers are there */
 	unsigned int layer, layer_protected;		/* for buttons to work, both variables in this order together */
 	
 // XXX depreceated... old animaton system (armature only viz) ---





More information about the Bf-blender-cvs mailing list