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

Reply via email to