[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17587] branches/blender2.5/blender/source /blender/makesrna:

Brecht Van Lommel brecht at blender.org
Wed Nov 26 23:52:02 CET 2008


Revision: 17587
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17587
Author:   blendix
Date:     2008-11-26 23:52:01 +0100 (Wed, 26 Nov 2008)

Log Message:
-----------

RNA

* Added support for auto generating enum properties that are defined as
  bitflags mixed with other flags (use for shadow type in la->mode now).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c

Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h	2008-11-26 22:52:01 UTC (rev 17587)
@@ -54,7 +54,7 @@
 void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname);
 void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname);
 void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname);
-void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname);
+void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bitflags);
 void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname);
 void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname);
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2008-11-26 22:52:01 UTC (rev 17587)
@@ -44,6 +44,8 @@
 #endif
 #endif
 
+/* Sorting */
+
 int cmp_struct(const void *a, const void *b)
 {
 	const StructRNA *structa= *(const StructRNA**)a;
@@ -146,6 +148,17 @@
 	}
 }
 
+static int rna_enum_bitmask(PropertyRNA *prop)
+{
+	EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
+	int a, mask= 0;
+
+	for(a=0; a<eprop->totitem; a++)
+		mask |= eprop->item[a].value;
+	
+	return mask;
+}
+
 static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp)
 {
 	char *func;
@@ -202,6 +215,8 @@
 				fprintf(f, "	%s *data= (%s*)ptr->data;\n", dp->dnastructname, dp->dnastructname);
 				if(prop->type == PROP_BOOLEAN && dp->booleanbit)
 					fprintf(f, "	return (((data->%s) & %d) != 0);\n", dp->dnaname, dp->booleanbit);
+				else if(prop->type == PROP_ENUM && dp->enumbitflags)
+					fprintf(f, "	return ((data->%s) & %d);\n", dp->dnaname, rna_enum_bitmask(prop));
 				else
 					fprintf(f, "	return (%s)(data->%s);\n", rna_type_type(prop), dp->dnaname);
 				fprintf(f, "}\n\n");
@@ -306,6 +321,10 @@
 					fprintf(f, "	if(value) data->%s |= %d;\n", dp->dnaname, dp->booleanbit);
 					fprintf(f, "	else data->%s &= ~%d;\n", dp->dnaname, dp->booleanbit);
 				}
+				else if(prop->type == PROP_ENUM && dp->enumbitflags) {
+					fprintf(f, "	data->%s &= ~%d;\n", dp->dnaname, rna_enum_bitmask(prop));
+					fprintf(f, "	data->%s |= value;\n", dp->dnaname, rna_enum_bitmask(prop));
+				}
 				else {
 					rna_clamp_value(f, prop);
 					fprintf(f, "	data->%s= value;\n", dp->dnaname);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c	2008-11-26 22:52:01 UTC (rev 17587)
@@ -519,7 +519,7 @@
 			}
 			case PROP_ENUM:
 				DefRNA.silent= 1;
-				RNA_def_property_enum_sdna(prop, NULL, identifier);
+				RNA_def_property_enum_sdna(prop, NULL, identifier, 0);
 				DefRNA.silent= 0;
 				break;
 			case PROP_POINTER:
@@ -953,7 +953,7 @@
 	rna_def_property_sdna(prop, structname, propname);
 }
 
-void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
+void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bitflags)
 {
 	PropertyDefRNA *dp;
 	StructRNA *srna= DefRNA.laststruct;
@@ -970,6 +970,8 @@
 	}
 
 	if((dp=rna_def_property_sdna(prop, structname, propname))) {
+		dp->enumbitflags= bitflags;
+
 		if(prop->arraylength) {
 			prop->arraylength= 0;
 			if(!DefRNA.silent) {

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h	2008-11-26 22:52:01 UTC (rev 17587)
@@ -49,6 +49,7 @@
 	int dnapointerlevel;
 
 	int booleanbit;
+	int enumbitflags;
 } PropertyDefRNA;
 
 typedef struct StructDefRNA {

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c	2008-11-26 22:52:01 UTC (rev 17587)
@@ -46,6 +46,11 @@
 		{LA_HEMI, "HEMI", "Hemi", ""},
 		{LA_AREA, "AREA", "Area", ""},
 		{0, NULL, NULL, NULL}};
+	static EnumPropertyItem prop_shadow_items[] = {
+		{0, "NOSHADOW", "No Shadow", ""},
+		{LA_SHAD_BUF, "BUFSHADOW", "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."},
+		{LA_SHAD_RAY, "RAYSHADOW", "Ray Shadow", "Use ray tracing for shadow."},
+		{0, NULL, NULL, NULL}};
 
 	srna= RNA_def_struct(brna, "Lamp", "ID", "Lamp");
 
@@ -66,6 +71,11 @@
 	RNA_def_property_array(prop, 3);
 	RNA_def_property_ui_text(prop, "Color", "Lamp color.");
 	RNA_def_property_ui_range(prop, 0.0f , 1.0f, 10.0f, 3.0f);
+
+	prop= RNA_def_property(srna, "shadow", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "mode", 1); /* use bitflags */
+	RNA_def_property_enum_items(prop, prop_shadow_items);
+	RNA_def_property_ui_text(prop, "Shadow", "Method to compute lamp shadow.");
 }
 
 #endif

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c	2008-11-26 22:24:26 UTC (rev 17586)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c	2008-11-26 22:52:01 UTC (rev 17587)
@@ -111,7 +111,7 @@
 	RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping.");
 
 	prop= RNA_def_property(srna, "unwrapper", PROP_ENUM, PROP_NONE);
-	RNA_def_property_enum_sdna(prop, NULL, "toolsettings->unwrapper");
+	RNA_def_property_enum_sdna(prop, NULL, "toolsettings->unwrapper", 0);
 	RNA_def_property_enum_items(prop, unwrapper_items);
 	RNA_def_property_ui_text(prop, "Unwrapper", "Unwrap algorithm used by the Unwrap tool.");
 }





More information about the Bf-blender-cvs mailing list