2.5:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 3 Jul 2009 19:56:19 +0000 (19:56 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 3 Jul 2009 19:56:19 +0000 (19:56 +0000)
* Fix crash in python with enum properties, and don't throw
  error if no matching identifier is found. This shouldn't
  happen, but it should break a python script either, which
  is not at fault.
* Fix a wrong variable initialization in fluidsim.

source/blender/blenkernel/intern/fluidsim.c
source/blender/makesrna/intern/makesrna.c
source/blender/python/intern/bpy_rna.c

index 6eba64cf33d09219e322e1244e94ede8e563cc0e..2b4032af5037168093be04a5bc50dc45b955b5cc 100644 (file)
@@ -114,7 +114,7 @@ void fluidsim_init(FluidsimModifierData *fluidmd)
                // no bounding box needed
                
                // todo - reuse default init from elbeem!
-               fss->typeFlags = 0;
+               fss->typeFlags = OB_FSBND_NOSLIP;
                fss->domainNovecgen = 0;
                fss->volumeInitType = 1; // volume
                fss->partSlipValue = 0.0;
index c42bc866f99528bd279cc41dc7ff5a90b732d6b0..059afad4c7034a39b609252e6c5bab1bec2970b9 100644 (file)
@@ -1568,22 +1568,20 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
                                int i, defaultfound= 0;
 
                                if(eprop->item) {
-                                       fprintf(f, "static EnumPropertyItem rna_%s%s_%s_items[%d] = {", srna->identifier, strnest, prop->identifier, eprop->totitem);
+                                       fprintf(f, "static EnumPropertyItem rna_%s%s_%s_items[%d] = {", srna->identifier, strnest, prop->identifier, eprop->totitem+1);
 
                                        for(i=0; i<eprop->totitem; i++) {
                                                fprintf(f, "{%d, ", eprop->item[i].value);
                                                rna_print_c_string(f, eprop->item[i].identifier); fprintf(f, ", ");
                                                fprintf(f, "%d, ", eprop->item[i].icon);
                                                rna_print_c_string(f, eprop->item[i].name); fprintf(f, ", ");
-                                               rna_print_c_string(f, eprop->item[i].description); fprintf(f, "}");
-                                               if(i != eprop->totitem-1)
-                                                       fprintf(f, ", ");
+                                               rna_print_c_string(f, eprop->item[i].description); fprintf(f, "}, ");
 
                                                if(eprop->defaultvalue == eprop->item[i].value)
                                                        defaultfound= 1;
                                        }
 
-                                       fprintf(f, "};\n\n");
+                                       fprintf(f, "{0, NULL, 0, NULL, NULL}};\n\n");
 
                                        if(!defaultfound) {
                                                fprintf(stderr, "rna_generate_structs: %s%s.%s, enum default is not in items.\n", srna->identifier, errnest, prop->identifier);
index 4729620bb8afc40c2e684f56478294c3961e2fa9..eff34b895da7c00763b2d1648f237daa110f8ae4 100644 (file)
@@ -307,8 +307,18 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
                if (RNA_property_enum_identifier(ptr, prop, val, &identifier)) {
                        ret = PyUnicode_FromString( identifier );
                } else {
-                       PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
-                       ret = NULL;
+                       const EnumPropertyItem *item;
+
+                       /* don't throw error here, can't trust blender 100% to give the
+                        * right values, python code should not generate error for that */
+                       RNA_property_enum_items(ptr, prop, &item, NULL);
+                       if(item[0].identifier)
+                               ret = PyUnicode_FromString( item[0].identifier );
+                       else
+                               ret = PyUnicode_FromString( "" );
+
+                       /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
+                       ret = NULL;*/
                }
 
                break;
@@ -1745,8 +1755,18 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data)
                        if (RNA_property_enum_identifier(ptr, prop, val, &identifier)) {
                                ret = PyUnicode_FromString( identifier );
                        } else {
-                               PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
-                               ret = NULL;
+                               const EnumPropertyItem *item;
+
+                               /* don't throw error here, can't trust blender 100% to give the
+                                * right values, python code should not generate error for that */
+                               RNA_property_enum_items(ptr, prop, &item, NULL);
+                               if(item[0].identifier)
+                                       ret = PyUnicode_FromString( item[0].identifier );
+                               else
+                                       ret = PyUnicode_FromString( "" );
+
+                               /*PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
+                               ret = NULL;*/
                        }
 
                        break;