Commit: f5cada3f7d9043ae3a0f9961037ec0917bbb5f15
Author: Bastien Montagne
Date:   Thu May 17 14:16:47 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rBf5cada3f7d9043ae3a0f9961037ec0917bbb5f15

Dynamic Override: Add support for arrays of bools and ints, check array size!

===================================================================

M       source/blender/blenkernel/intern/layer.c
M       source/blender/makesdna/DNA_layer_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index c0a9aaa3da3..70145754140 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1597,6 +1597,13 @@ DynamicOverrideProperty 
*BKE_view_layer_override_property_add(
                return NULL;
        }
 
+       const int array_len = RNA_property_array_length(ptr, prop);
+       if (array_len > ARRAY_SIZE(((DynamicOverrideProperty *)NULL)->data.i)) {
+               /* TODO Use a define for supported array length. */
+               BLI_assert(!"Trying to dynamic-override an array longer than 
supported!");
+               return NULL;
+       }
+
        DynamicOverrideProperty *dyn_prop = 
MEM_callocN(sizeof(DynamicOverrideProperty), __func__);
        dyn_prop->flag = DYN_OVERRIDE_PROP_USE;
        dyn_prop->multiply_factor = 1.0f;
@@ -1607,17 +1614,27 @@ DynamicOverrideProperty 
*BKE_view_layer_override_property_add(
        dyn_prop->id_type = id_type;
        dyn_prop->property_type = property_type;
        dyn_prop->rna_path = rna_path_str;
-       dyn_prop->array_len = RNA_property_array_length(ptr, prop);
+       dyn_prop->array_len = array_len;
 
        const bool is_array = RNA_property_array_check(prop);
 
        /* TODO handle array. */
        switch (RNA_property_type(prop)) {
                case PROP_BOOLEAN:
-                       dyn_prop->data.i[0] = RNA_property_boolean_get(ptr, 
prop);
+                       if (is_array) {
+                               RNA_property_boolean_get_array(ptr, prop, 
dyn_prop->data.i);
+                       }
+                       else {
+                               dyn_prop->data.i[0] = 
RNA_property_boolean_get(ptr, prop);
+                       }
                        break;
                case PROP_INT:
-                       dyn_prop->data.i[0] = RNA_property_int_get(ptr, prop);
+                       if (is_array) {
+                               RNA_property_int_get_array(ptr, prop, 
dyn_prop->data.i);
+                       }
+                       else {
+                               dyn_prop->data.i[0] = RNA_property_int_get(ptr, 
prop);
+                       }
                        break;
                case PROP_FLOAT:
                        if (is_array) {
@@ -1641,6 +1658,7 @@ DynamicOverrideProperty 
*BKE_view_layer_override_property_add(
                        break;
                }
                case PROP_COLLECTION:
+               default:
                        BLI_assert(!"Should never happen - dyn");
                        break;
        }
diff --git a/source/blender/makesdna/DNA_layer_types.h 
b/source/blender/makesdna/DNA_layer_types.h
index a022dd0e6de..8e392a5c1f6 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -64,7 +64,7 @@ typedef struct LayerCollection {
 
 typedef struct DynamicOverridePropertyData {
        int i[4];
-       float f[4];
+       float f[4];  /*TODO 16 to support 4x4 matrices? Not sure we actually 
need that though... */
        struct ID *id;
        char *str;
 } DynamicOverridePropertyData;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to