Revision: 23088 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23088 Author: blendix Date: 2009-09-09 21:40:46 +0200 (Wed, 09 Sep 2009)
Log Message: ----------- RNA: multidimensional & dyanmic array changes * Disable setting array length of dynamic array for now, this was not implemented correct, and it's not really needed now. * Allow all dimensions to be dynamic size, not just the first. * Change storage of multidimensional to be simpler. * Rename API functions to be more compact. * Fix some bugs in the implementation. * RenderLayer.rect and RenderPass.rect use a multidimensional dynamic array now. Modified Paths: -------------- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h 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_access.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_render.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c branches/blender2.5/blender/source/blender/python/intern/bpy_array.c branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_access.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h 2009-09-09 19:31:43 UTC (rev 23087) +++ branches/blender2.5/blender/source/blender/makesrna/RNA_access.h 2009-09-09 19:40:46 UTC (rev 23088) @@ -586,10 +586,9 @@ int RNA_property_flag(PropertyRNA *prop); int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop); -int RNA_property_multidimensional_array_length(PointerRNA *ptr, PropertyRNA *prop, int dimension); -int RNA_property_dynamic_array_set_length(PointerRNA *ptr, PropertyRNA *prop, int length); +int RNA_property_multi_array_length(PointerRNA *ptr, PropertyRNA *prop, int dimension); +int RNA_property_array_dimension(PointerRNA *ptr, PropertyRNA *prop, int length[]); char RNA_property_array_item_char(PropertyRNA *prop, int index); -unsigned short RNA_property_array_dimension(PropertyRNA *prop, unsigned short dim_size[]); int RNA_property_string_maxlength(PropertyRNA *prop); Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2009-09-09 19:31:43 UTC (rev 23087) +++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2009-09-09 19:40:46 UTC (rev 23088) @@ -90,7 +90,7 @@ PropertyRNA *RNA_def_float(StructOrFunctionRNA *cont, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); -PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont, const char *identifier, int len, int rowsize, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); +PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont, const char *identifier, int rows, int columns, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); PropertyRNA *RNA_def_float_rotation(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax); PropertyRNA *RNA_def_float_array(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, @@ -128,8 +128,8 @@ void RNA_def_property_flag(PropertyRNA *prop, int flag); void RNA_def_property_clear_flag(PropertyRNA *prop, int flag); -void RNA_def_property_array(PropertyRNA *prop, int arraylength); -void RNA_def_property_multidimensional_array(PropertyRNA *prop, int arraylength, unsigned short arraydimension, unsigned short dimsize[]); +void RNA_def_property_array(PropertyRNA *prop, int length); +void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]); void RNA_def_property_range(PropertyRNA *prop, double min, double max); void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item); @@ -153,7 +153,7 @@ void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *updatefunc); void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable); -void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength, const char *setlength); +void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength); void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set); void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range); void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range); Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-09-09 19:31:43 UTC (rev 23087) +++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-09-09 19:40:46 UTC (rev 23088) @@ -306,11 +306,10 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, const char *manualfunc) { char *func; - int i; if(prop->flag & PROP_IDPROPERTY) return NULL; - + if(!manualfunc) { if(!dp->dnastructname || !dp->dnaname) { fprintf(stderr, "rna_def_property_get_func: %s.%s has no valid dna info.\n", srna->identifier, prop->identifier); @@ -373,8 +372,11 @@ break; } default: - if(prop->arraylength) { - fprintf(f, "void %s(PointerRNA *ptr, %s values[%d])\n", func, rna_type_type(prop), prop->arraylength); + if(prop->arraydimension) { + if(prop->flag & PROP_DYNAMIC) + fprintf(f, "void %s(PointerRNA *ptr, %s values[])\n", func, rna_type_type(prop)); + else + fprintf(f, "void %s(PointerRNA *ptr, %s values[%d])\n", func, rna_type_type(prop), prop->totarraylength); fprintf(f, "{\n"); if(manualfunc) { @@ -383,27 +385,38 @@ else { rna_print_data_get(f, dp); - for(i=0; i<prop->arraylength; i++) { - if(dp->dnaarraylength == 1) { - if(prop->type == PROP_BOOLEAN && dp->booleanbit) - fprintf(f, " values[%d]= (%s(data->%s & (%d<<%d)) != 0);\n", i, (dp->booleannegative)? "!": "", dp->dnaname, dp->booleanbit, i); - else - fprintf(f, " values[%d]= (%s)%s((&data->%s)[%d]);\n", i, rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname, i); + if(prop->flag & PROP_DYNAMIC) { + char *lenfunc= rna_alloc_function_name(srna->identifier, prop->identifier, "get_length"); + fprintf(f, " int i, arraylen[RNA_MAX_ARRAY_DIMENSION];\n"); + fprintf(f, " int len= %s(ptr, arraylen);\n\n", lenfunc); + fprintf(f, " for(i=0; i<len; i++) {\n"); + MEM_freeN(lenfunc); + } + else { + fprintf(f, " int i;\n\n"); + fprintf(f, " for(i=0; i<%d; i++) {\n", prop->totarraylength); + } + + if(dp->dnaarraylength == 1) { + if(prop->type == PROP_BOOLEAN && dp->booleanbit) + fprintf(f, " values[i]= (%s(data->%s & (%d<<i)) != 0);\n", (dp->booleannegative)? "!": "", dp->dnaname, dp->booleanbit); + else + fprintf(f, " values[i]= (%s)%s((&data->%s)[i]);\n", rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname); + } + else { + if(prop->type == PROP_BOOLEAN && dp->booleanbit) { + fprintf(f, " values[i]= (%s(data->%s[i] & ", (dp->booleannegative)? "!": "", dp->dnaname); + rna_int_print(f, dp->booleanbit); + fprintf(f, ") != 0);\n"); } - else { - if(prop->type == PROP_BOOLEAN && dp->booleanbit) { - fprintf(f, " values[%d]= (%s(data->%s[%d] & ", i, (dp->booleannegative)? "!": "", dp->dnaname, i); - rna_int_print(f, dp->booleanbit); - fprintf(f, ") != 0);\n"); - } - else if(rna_color_quantize(prop, dp)) - fprintf(f, " values[%d]= (%s)(data->%s[%d]*(1.0f/255.0f));\n", i, rna_type_type(prop), dp->dnaname, i); - else if(dp->dnatype) - fprintf(f, " values[%d]= (%s)%s(((%s*)data->%s)[%d]);\n", i, rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnatype, dp->dnaname, i); - else - fprintf(f, " values[%d]= (%s)%s((data->%s)[%d]);\n", i, rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname, i); - } + else if(rna_color_quantize(prop, dp)) + fprintf(f, " values[i]= (%s)(data->%s[i]*(1.0f/255.0f));\n", rna_type_type(prop), dp->dnaname); + else if(dp->dnatype) + fprintf(f, " values[i]= (%s)%s(((%s*)data->%s)[i]);\n", rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnatype, dp->dnaname); + else + fprintf(f, " values[i]= (%s)%s((data->%s)[i]);\n", rna_type_type(prop), (dp->booleannegative)? "!": "", dp->dnaname); } + fprintf(f, " }\n"); } fprintf(f, "}\n\n"); } @@ -438,13 +451,13 @@ return func; } -static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array, int i) +static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array) { if(prop->type == PROP_INT) { IntPropertyRNA *iprop= (IntPropertyRNA*)prop; if(iprop->hardmin != INT_MIN || iprop->hardmax != INT_MAX) { - if(array) fprintf(f, "CLAMPIS(values[%d], ", i); + if(array) fprintf(f, "CLAMPIS(values[i], "); else fprintf(f, "CLAMPIS(value, "); rna_int_print(f, iprop->hardmin); fprintf(f, ", "); rna_int_print(f, iprop->hardmax); fprintf(f, ");\n"); @@ -455,7 +468,7 @@ FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop; if(fprop->hardmin != -FLT_MAX || fprop->hardmax != FLT_MAX) { - if(array) fprintf(f, "CLAMPIS(values[%d], ", i); + if(array) fprintf(f, "CLAMPIS(values[i], "); else fprintf(f, "CLAMPIS(value, "); rna_float_print(f, fprop->hardmin); fprintf(f, ", "); rna_float_print(f, fprop->hardmax); fprintf(f, ");\n"); @@ -464,7 +477,7 @@ } if(array) - fprintf(f, "values[%d];\n", i); + fprintf(f, "values[i];\n"); else fprintf(f, "value;\n"); } @@ -472,7 +485,6 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, char *manualfunc) { char *func; - int i; if(!(prop->flag & PROP_EDITABLE)) return NULL; @@ -532,8 +544,11 @@ break; } default: - if(prop->arraylength) { - fprintf(f, "void %s(PointerRNA *ptr, const %s values[%d])\n", func, rna_type_type(prop), prop->arraylength); + if(prop->arraydimension) { + if(prop->flag & PROP_DYNAMIC) + fprintf(f, "void %s(PointerRNA *ptr, const %s values[])\n", func, rna_type_type(prop)); + else + fprintf(f, "void %s(PointerRNA *ptr, const %s values[%d])\n", func, rna_type_type(prop), prop->totarraylength); fprintf(f, "{\n"); if(manualfunc) { @@ -542,38 +557,49 @@ else { @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs