RNA
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 21 Jul 2009 01:14:55 +0000 (01:14 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 21 Jul 2009 01:14:55 +0000 (01:14 +0000)
* Added suppport for generating code without verifying with DNA,
  this doesn't give good errors and is more error prone, but makes
  it easier to wrap things like EditBone which are not in DNA.
* RNA_define_verify_sdna(0), and set to 1 again afterwards.

source/blender/blenkernel/BKE_screen.h
source/blender/makesdna/DNA_screen_types.h
source/blender/makesrna/RNA_define.h
source/blender/makesrna/intern/makesrna.c
source/blender/makesrna/intern/rna_armature.c
source/blender/makesrna/intern/rna_define.c
source/blender/makesrna/intern/rna_internal.h
source/blender/makesrna/intern/rna_ui.c

index be625fb856aaeab843ec2531c29cbf2197456c91..5a12c04780a35efa07758042506e7d6640e01698 100644 (file)
@@ -194,6 +194,12 @@ typedef struct HeaderType {
        void                            (*py_free)(void *py_data);
 } HeaderType;
 
+typedef struct Header {
+       struct HeaderType *type;        /* runtime */
+       struct uiLayout *layout;        /* runtime for drawing */
+} Header;
+
+
 /* menu types */
 
 typedef struct MenuType {
@@ -215,6 +221,11 @@ typedef struct MenuType {
        void                            (*py_free)(void *py_data);
 } MenuType;
 
+typedef struct Menu {
+       struct MenuType *type;          /* runtime */
+       struct uiLayout *layout;        /* runtime for drawing */
+} Menu;
+
 /* spacetypes */
 struct SpaceType *BKE_spacetype_from_id(int spaceid);
 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
index 73ecade9b8bdcce06f4796930f3512464ee26528..1be75e977354a0f555b0accff5956b3a753b7c29 100644 (file)
@@ -110,16 +110,6 @@ typedef struct Panel {             /* the part from uiBlock that needs saved in file */
        char list_search[64];
 } Panel;
 
-typedef struct Header {
-       struct HeaderType *type;        /* runtime */
-       struct uiLayout *layout;        /* runtime for drawing */
-} Header;
-
-typedef struct Menu {
-       struct MenuType *type;          /* runtime */
-       struct uiLayout *layout;        /* runtime for drawing */
-} Menu;
-
 typedef struct ScrArea {
        struct ScrArea *next, *prev;
        
index aeb6c8edf2d1db9be56c17b343cb93421e5748f8..f76423ea846cfd0e0156e47643a22bcbfa1b47d4 100644 (file)
@@ -42,6 +42,7 @@ extern "C" {
 BlenderRNA *RNA_create(void);
 void RNA_define_free(BlenderRNA *brna);
 void RNA_free(BlenderRNA *brna);
+void RNA_define_verify_sdna(int verify);
 
 void RNA_init(void);
 void RNA_exit(void);
index c8698ef57acdc43bd3a4eee9a93fd054c48e842a..ded8db61b7ce6cb5391c3d52d0719025ae97ea60 100644 (file)
@@ -398,8 +398,10 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
                                                        }
                                                        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
+                                                       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);
                                                }
                                        }
                                }
@@ -564,7 +566,10 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
                                                                fprintf(f, "    data->%s[%d]= FTOCHAR(values[%d]);\n", dp->dnaname, i, i);
                                                        }
                                                        else {
-                                                               fprintf(f, "    ((%s*)data->%s)[%d]= %s", dp->dnatype, dp->dnaname, i, (dp->booleannegative)? "!": "");
+                                                               if(dp->dnatype)
+                                                                       fprintf(f, "    ((%s*)data->%s)[%d]= %s", dp->dnatype, dp->dnaname, i, (dp->booleannegative)? "!": "");
+                                                               else
+                                                                       fprintf(f, "    (data->%s)[%d]= %s", dp->dnaname, i, (dp->booleannegative)? "!": "");
                                                                rna_clamp_value(f, prop, 1, i);
                                                        }
                                                }
index 4c8f5597e1e0c29114fe0a3c83426c1ce6615f90..d98c7235c35fc87af3026179cac1764b4b6b6979 100644 (file)
@@ -144,18 +144,6 @@ static void rna_Armature_path_end_frame_set(PointerRNA *ptr, int value)
        data->pathef= value;
 }
 
-static void rna_EditBone_name_get(PointerRNA *ptr, char *value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       BLI_strncpy(value, data->name, sizeof(data->name));
-}
-
-static int rna_EditBone_name_length(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return strlen(data->name);
-}
-
 static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
 {
        bArmature *arm= (bArmature*)ptr->id.data;
@@ -169,55 +157,6 @@ static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
        ED_armature_bone_rename(arm, oldname, newname);
 }
 
-static int rna_EditBone_active_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_ACTIVE) != 0);
-}
-
-static void rna_EditBone_active_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_ACTIVE;
-       else data->flag &= ~BONE_ACTIVE;
-}
-
-static float rna_EditBone_bbone_in_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->ease1);
-}
-
-static void rna_EditBone_bbone_in_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->ease1= CLAMPIS(value, 0.0f, 2.0f);
-}
-
-static float rna_EditBone_bbone_out_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->ease2);
-}
-
-static void rna_EditBone_bbone_out_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->ease2= CLAMPIS(value, 0.0f, 2.0f);
-}
-
-static int rna_EditBone_bbone_segments_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (int)(data->segments);
-}
-
-static void rna_EditBone_bbone_segments_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->segments= CLAMPIS(value, 1, 32);
-}
-
 static void rna_EditBone_layer_get(PointerRNA *ptr, int values[16])
 {
        EditBone *data= (EditBone*)(ptr->data);
@@ -261,12 +200,6 @@ static void rna_EditBone_connected_check(EditBone *ebone)
        }
 }
 
-static int rna_EditBone_connected_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_CONNECTED) != 0);
-}
-
 static void rna_EditBone_connected_set(PointerRNA *ptr, int value)
 {
        EditBone *ebone= (EditBone*)(ptr->data);
@@ -277,190 +210,6 @@ static void rna_EditBone_connected_set(PointerRNA *ptr, int value)
        rna_EditBone_connected_check(ebone);
 }
 
-static int rna_EditBone_cyclic_offset_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (!((data->flag) & BONE_NO_CYCLICOFFSET) != 0);
-}
-
-static void rna_EditBone_cyclic_offset_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(!value) data->flag |= BONE_NO_CYCLICOFFSET;
-       else data->flag &= ~BONE_NO_CYCLICOFFSET;
-}
-
-static int rna_EditBone_deform_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (!((data->flag) & BONE_NO_DEFORM) != 0);
-}
-
-static void rna_EditBone_deform_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(!value) data->flag |= BONE_NO_DEFORM;
-       else data->flag &= ~BONE_NO_DEFORM;
-}
-
-static int rna_EditBone_draw_wire_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_DRAWWIRE) != 0);
-}
-
-static void rna_EditBone_draw_wire_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_DRAWWIRE;
-       else data->flag &= ~BONE_DRAWWIRE;
-}
-
-static float rna_EditBone_envelope_distance_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->dist);
-}
-
-static void rna_EditBone_envelope_distance_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->dist= CLAMPIS(value, 0.0f, 1000.0f);
-}
-
-static float rna_EditBone_envelope_weight_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->weight);
-}
-
-static void rna_EditBone_envelope_weight_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->weight= CLAMPIS(value, 0.0f, 1000.0f);
-}
-
-static float rna_EditBone_radius_head_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->rad_head);
-}
-
-static void rna_EditBone_radius_head_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(data->parent)
-               data->parent->rad_tail= value;
-       else
-               data->rad_head= value;
-}
-
-static float rna_EditBone_radius_tail_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->rad_tail);
-}
-
-static void rna_EditBone_radius_tail_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->rad_tail= value;
-}
-
-static void rna_EditBone_head_get(PointerRNA *ptr, float values[3])
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       values[0]= (float)(((float*)data->head)[0]);
-       values[1]= (float)(((float*)data->head)[1]);
-       values[2]= (float)(((float*)data->head)[2]);
-}
-
-static void rna_EditBone_head_set(PointerRNA *ptr, const float values[3])
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       ((float*)data->head)[0]= values[0];
-       ((float*)data->head)[1]= values[1];
-       ((float*)data->head)[2]= values[2];
-}
-
-static int rna_EditBone_head_selected_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_ROOTSEL) != 0);
-}
-
-static void rna_EditBone_head_selected_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_ROOTSEL;
-       else data->flag &= ~BONE_ROOTSEL;
-}
-
-static int rna_EditBone_hidden_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_HIDDEN_A) != 0);
-}
-
-static void rna_EditBone_hidden_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_HIDDEN_A;
-       else data->flag &= ~BONE_HIDDEN_A;
-}
-
-static int rna_EditBone_hinge_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (!((data->flag) & BONE_HINGE) != 0);
-}
-
-static void rna_EditBone_hinge_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(!value) data->flag |= BONE_HINGE;
-       else data->flag &= ~BONE_HINGE;
-}
-
-static int rna_EditBone_inherit_scale_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (!((data->flag) & BONE_NO_SCALE) != 0);
-}
-
-static void rna_EditBone_inherit_scale_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(!value) data->flag |= BONE_NO_SCALE;
-       else data->flag &= ~BONE_NO_SCALE;
-}
-
-static int rna_EditBone_locked_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_EDITMODE_LOCKED) != 0);
-}
-
-static void rna_EditBone_locked_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_EDITMODE_LOCKED;
-       else data->flag &= ~BONE_EDITMODE_LOCKED;
-}
-
-static int rna_EditBone_multiply_vertexgroup_with_envelope_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_MULT_VG_ENV) != 0);
-}
-
-static void rna_EditBone_multiply_vertexgroup_with_envelope_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_MULT_VG_ENV;
-       else data->flag &= ~BONE_MULT_VG_ENV;
-}
-
 static PointerRNA rna_EditBone_parent_get(PointerRNA *ptr)
 {
        EditBone *data= (EditBone*)(ptr->data);
@@ -497,47 +246,6 @@ static void rna_EditBone_parent_set(PointerRNA *ptr, PointerRNA value)
        }
 }
 
-static float rna_EditBone_roll_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (float)(data->roll);
-}
-
-static void rna_EditBone_roll_set(PointerRNA *ptr, float value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       data->roll= value;
-}
-
-static void rna_EditBone_tail_get(PointerRNA *ptr, float values[3])
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       values[0]= (float)(((float*)data->tail)[0]);
-       values[1]= (float)(((float*)data->tail)[1]);
-       values[2]= (float)(((float*)data->tail)[2]);
-}
-
-static void rna_EditBone_tail_set(PointerRNA *ptr, const float values[3])
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       ((float*)data->tail)[0]= values[0];
-       ((float*)data->tail)[1]= values[1];
-       ((float*)data->tail)[2]= values[2];
-}
-
-static int rna_EditBone_tail_selected_get(PointerRNA *ptr)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       return (((data->flag) & BONE_TIPSEL) != 0);
-}
-
-static void rna_EditBone_tail_selected_set(PointerRNA *ptr, int value)
-{
-       EditBone *data= (EditBone*)(ptr->data);
-       if(value) data->flag |= BONE_TIPSEL;
-       else data->flag &= ~BONE_TIPSEL;
-}
-
 static void rna_Armature_editbone_transform_update(bContext *C, PointerRNA *ptr)
 {
        bArmature *arm= (bArmature*)ptr->id.data;
@@ -608,128 +316,104 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
 
        /* strings */
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_sdna(prop, NULL, "name");
        RNA_def_property_ui_text(prop, "Name", "");
        RNA_def_struct_name_property(srna, prop);
-       if(editbone) RNA_def_property_string_funcs(prop, "rna_EditBone_name_get", "rna_EditBone_name_length", "rna_EditBone_name_set");
+       if(editbone) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_EditBone_name_set");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
 
        /* flags */
        prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) {
-               RNA_def_property_array(prop, 16);
-               RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set");
-       }
-       else {
-               RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
-               RNA_def_property_array(prop, 16);
-               RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set");
-       }
+       RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
+       RNA_def_property_array(prop, 16);
+       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_layer_get", "rna_EditBone_layer_set");
+       else RNA_def_property_boolean_funcs(prop, NULL, "rna_Bone_layer_set");
        RNA_def_property_ui_text(prop, "Layers", "Layers bone exists in");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
 
        prop= RNA_def_property(srna, "connected", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_connected_get", "rna_EditBone_connected_set");
-       else {
-               RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED);
-               RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-       }
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED);
+       if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_connected_set");
+       else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail.");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_active_get", "rna_EditBone_active_set");
-       else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ACTIVE);
        RNA_def_property_ui_text(prop, "Active", "Bone was the last bone clicked on (most operations are applied to only this bone)");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
        
        prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_hinge_get", "rna_EditBone_hinge_set");
-       else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE);
        RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone doesn't inherit rotation or scale from parent bone.");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "multiply_vertexgroup_with_envelope", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_multiply_vertexgroup_with_envelope_get", "rna_EditBone_multiply_vertexgroup_with_envelope_set");
-       else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV);
        RNA_def_property_ui_text(prop, "Multiply Vertex Group with Envelope", "When deforming bone, multiply effects of Vertex Group weights with Envelope influence.");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "deform", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_deform_get", "rna_EditBone_deform_set");
-       else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM);
        RNA_def_property_ui_text(prop, "Deform", "Bone does not deform any geometry.");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone.");
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_inherit_scale_get", "rna_EditBone_inherit_scale_set");
-       else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_draw_wire_get", "rna_EditBone_draw_wire_set");
-       else RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);
        RNA_def_property_ui_text(prop, "Draw Wire", "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes.");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
        
        prop= RNA_def_property(srna, "cyclic_offset", PROP_BOOLEAN, PROP_NONE);
-       if(editbone) RNA_def_property_boolean_funcs(prop, "rna_EditBone_cyclic_offset_get", "rna_EditBone_cyclic_offset_set");
-       else RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_CYCLICOFFSET);
        RNA_def_property_ui_text(prop, "Cyclic Offset", "When bone doesn't have a parent, it receives cyclic offset effects.");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
 
        /* Number values */
                /* envelope deform settings */
        prop= RNA_def_property(srna, "envelope_distance", PROP_FLOAT, PROP_NONE);
-       if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_envelope_distance_get", "rna_EditBone_envelope_distance_set", NULL);
-       else RNA_def_property_float_sdna(prop, NULL, "dist");
+       RNA_def_property_float_sdna(prop, NULL, "dist");
        RNA_def_property_range(prop, 0.0f, 1000.0f);
        RNA_def_property_ui_text(prop, "Envelope Deform Distance", "Bone deformation distance (for Envelope deform only).");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "envelope_weight", PROP_FLOAT, PROP_NONE);
-       if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_envelope_weight_get", "rna_EditBone_envelope_weight_set", NULL);
-       else RNA_def_property_float_sdna(prop, NULL, "weight");
+       RNA_def_property_float_sdna(prop, NULL, "weight");
        RNA_def_property_range(prop, 0.0f, 1000.0f);
        RNA_def_property_ui_text(prop, "Envelope Deform Weight", "Bone deformation weight (for Envelope deform only).");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "head_radius", PROP_FLOAT, PROP_NONE);
-       if(editbone) {
-               RNA_def_property_float_funcs(prop, "rna_EditBone_radius_head_get", "rna_EditBone_radius_head_set", NULL);
-               RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
-       }
-       else RNA_def_property_float_sdna(prop, NULL, "rad_head");
+       if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+       RNA_def_property_float_sdna(prop, NULL, "rad_head");
        //RNA_def_property_range(prop, 0, 1000);  // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid);
        RNA_def_property_ui_text(prop, "Envelope Head Radius", "Radius of head of bone (for Envelope deform only).");
        
        prop= RNA_def_property(srna, "tail_radius", PROP_FLOAT, PROP_NONE);
-       if(editbone) {
-               RNA_def_property_float_funcs(prop, "rna_EditBone_radius_tail_get", "rna_EditBone_radius_tail_set", NULL);
-               RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
-       }
-       else RNA_def_property_float_sdna(prop, NULL, "rad_tail");
+       if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+       RNA_def_property_float_sdna(prop, NULL, "rad_tail");
        //RNA_def_property_range(prop, 0, 1000);  // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid);
        RNA_def_property_ui_text(prop, "Envelope Tail Radius", "Radius of tail of bone (for Envelope deform only).");
        
                /* b-bones deform settings */
        prop= RNA_def_property(srna, "bbone_segments", PROP_INT, PROP_NONE);
-       if(editbone) RNA_def_property_int_funcs(prop, "rna_EditBone_bbone_segments_get", "rna_EditBone_bbone_segments_set", NULL);
-       else RNA_def_property_int_sdna(prop, NULL, "segments");
+       RNA_def_property_int_sdna(prop, NULL, "segments");
        RNA_def_property_range(prop, 1, 32);
        RNA_def_property_ui_text(prop, "B-Bone Segments", "Number of subdivisions of bone (for B-Bones only).");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "bbone_in", PROP_FLOAT, PROP_NONE);
-       if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_in_get", "rna_EditBone_bbone_in_set", NULL);
-       else RNA_def_property_float_sdna(prop, NULL, "ease1");
+       RNA_def_property_float_sdna(prop, NULL, "ease1");
        RNA_def_property_range(prop, 0.0f, 2.0f);
        RNA_def_property_ui_text(prop, "B-Bone Ease In", "Length of first Bezier Handle (for B-Bones only).");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
        
        prop= RNA_def_property(srna, "bbone_out", PROP_FLOAT, PROP_NONE);
-       if(editbone) RNA_def_property_float_funcs(prop, "rna_EditBone_bbone_out_get", "rna_EditBone_bbone_out_set", NULL);
-       else RNA_def_property_float_sdna(prop, NULL, "ease2");
+       RNA_def_property_float_sdna(prop, NULL, "ease2");
        RNA_def_property_range(prop, 0.0f, 2.0f);
        RNA_def_property_ui_text(prop, "B-Bone Ease Out", "Length of second Bezier Handle (for B-Bones only).");
        RNA_def_property_update(prop, 0, "rna_Armature_update_data");
@@ -779,9 +463,12 @@ static void rna_def_edit_bone(BlenderRNA *brna)
        PropertyRNA *prop;
        
        srna= RNA_def_struct(brna, "EditBone", NULL);
+       RNA_def_struct_sdna(srna, "EditBone");
        RNA_def_struct_ui_text(srna, "Edit Bone", "Editmode bone in an Armature datablock.");
        RNA_def_struct_ui_icon(srna, ICON_BONE_DATA);
        
+       RNA_define_verify_sdna(0); // not in sdna
+
        prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
        RNA_def_property_struct_type(prop, "EditBone");
        RNA_def_property_pointer_funcs(prop, "rna_EditBone_parent_get", "rna_EditBone_parent_set", NULL);
@@ -790,43 +477,45 @@ static void rna_def_edit_bone(BlenderRNA *brna)
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
        
        prop= RNA_def_property(srna, "roll", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_float_funcs(prop, "rna_EditBone_roll_get", "rna_EditBone_roll_set", NULL);
+       RNA_def_property_float_sdna(prop, NULL, "roll");
        RNA_def_property_ui_text(prop, "Roll", "Bone rotation around head-tail axis.");
        RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
 
        prop= RNA_def_property(srna, "head", PROP_FLOAT, PROP_VECTOR);
+       RNA_def_property_float_sdna(prop, NULL, "head");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_float_funcs(prop, "rna_EditBone_head_get", "rna_EditBone_head_set", NULL);
        RNA_def_property_ui_text(prop, "Head", "Location of head end of the bone.");
        RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
 
        prop= RNA_def_property(srna, "tail", PROP_FLOAT, PROP_VECTOR);
+       RNA_def_property_float_sdna(prop, NULL, "tail");
        RNA_def_property_array(prop, 3);
-       RNA_def_property_float_funcs(prop, "rna_EditBone_tail_get", "rna_EditBone_tail_set", NULL);
        RNA_def_property_ui_text(prop, "Tail", "Location of tail end of the bone.");
        RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
 
        rna_def_bone_common(srna, 1);
 
        prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_funcs(prop, "rna_EditBone_hidden_get", "rna_EditBone_hidden_set");
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_A);
        RNA_def_property_ui_text(prop, "Hidden", "Bone is not visible when in Edit Mode");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
 
        prop= RNA_def_property(srna, "locked", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_funcs(prop, "rna_EditBone_locked_get", "rna_EditBone_locked_set");
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_EDITMODE_LOCKED);
        RNA_def_property_ui_text(prop, "Locked", "Bone is not able to be transformed when in Edit Mode.");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
 
        prop= RNA_def_property(srna, "head_selected", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_funcs(prop, "rna_EditBone_head_selected_get", "rna_EditBone_head_selected_set");
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ROOTSEL);
        RNA_def_property_ui_text(prop, "Head Selected", "");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
        
        prop= RNA_def_property(srna, "tail_selected", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_funcs(prop, "rna_EditBone_tail_selected_get", "rna_EditBone_tail_selected_set");
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_TIPSEL);
        RNA_def_property_ui_text(prop, "Tail Selected", "");
        RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
+
+       RNA_define_verify_sdna(1);
 }
 
 void rna_def_armature(BlenderRNA *brna)
index b651360eda03499d8daffece890a22695aaec66b..491095a0bd6e6c2dc66ac4c0c9f0648c6d62db8b 100644 (file)
@@ -44,7 +44,7 @@
 
 /* Global used during defining */
 
-BlenderDefRNA DefRNA = {0, {0, 0}, {0, 0}, 0, 0, 0};
+BlenderDefRNA DefRNA = {0, {0, 0}, {0, 0}, 0, 0, 0, 0, 1};
 
 /* Duplicated code since we can't link in blenkernel or blenlib */
 
@@ -438,6 +438,11 @@ void RNA_define_free(BlenderRNA *brna)
        DefRNA.error= 0;
 }
 
+void RNA_define_verify_sdna(int verify)
+{
+       DefRNA.verify= verify;
+}
+
 void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
 {
        FunctionRNA *func, *nextfunc;
@@ -1322,11 +1327,24 @@ static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *stru
                propname= prop->identifier;
 
        if(!rna_find_sdna_member(DefRNA.sdna, structname, propname, &smember)) {
-               if(!DefRNA.silent) {
+               if(DefRNA.silent) {
+                       return NULL;
+               }
+               else if(!DefRNA.verify) {
+                       /* some basic values to survive even with sdna info */
+                       dp->dnastructname= structname;
+                       dp->dnaname= propname;
+                       if(prop->type == PROP_BOOLEAN)
+                               dp->dnaarraylength= 1;
+                       if(prop->type == PROP_POINTER)
+                               dp->dnapointerlevel= 1;
+                       return dp;
+               }
+               else {
                        fprintf(stderr, "rna_def_property_sdna: %s.%s not found.\n", structname, propname);
                        DefRNA.error= 1;
+                       return NULL;
                }
-               return NULL;
        }
 
        if(smember.arraylength > 1)
@@ -1396,15 +1414,15 @@ void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const
 
        if((dp= rna_def_property_sdna(prop, structname, propname))) {
                /* SDNA doesn't pass us unsigned unfortunately .. */
-               if(strcmp(dp->dnatype, "char") == 0) {
+               if(dp->dnatype && strcmp(dp->dnatype, "char") == 0) {
                        iprop->hardmin= iprop->softmin= CHAR_MIN;
                        iprop->hardmax= iprop->softmax= CHAR_MAX;
                }
-               else if(strcmp(dp->dnatype, "short") == 0) {
+               else if(dp->dnatype && strcmp(dp->dnatype, "short") == 0) {
                        iprop->hardmin= iprop->softmin= SHRT_MIN;
                        iprop->hardmax= iprop->softmax= SHRT_MAX;
                }
-               else if(strcmp(dp->dnatype, "int") == 0) {
+               else if(dp->dnatype && strcmp(dp->dnatype, "int") == 0) {
                        iprop->hardmin= INT_MIN;
                        iprop->hardmax= INT_MAX;
 
@@ -1553,7 +1571,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
                        }
                }
 
-               if(strcmp(dp->dnatype, "ListBase") == 0) {
+               if(dp->dnatype && strcmp(dp->dnatype, "ListBase") == 0) {
                        cprop->next= (PropCollectionNextFunc)"rna_iterator_listbase_next";
                        cprop->get= (PropCollectionGetFunc)"rna_iterator_listbase_get";
                        cprop->end= (PropCollectionEndFunc)"rna_iterator_listbase_end";
index 5afc08439e2a006a4b80e261cb94f0d82b6f0fde..299539a87bdc664af0609a6a451b357d234ee4b9 100644 (file)
@@ -103,7 +103,7 @@ typedef struct BlenderDefRNA {
        ListBase structs;
        ListBase allocs;
        struct StructRNA *laststruct;
-       int error, silent, preprocess;
+       int error, silent, preprocess, verify;
 } BlenderDefRNA;
 
 extern BlenderDefRNA DefRNA;
index 217f1ea00a8fec0f9488c20cdc376b431f5a8fac..e83557957f69f3830be6d07ed3d62ce9d5d01a2a 100644 (file)
@@ -633,7 +633,10 @@ static void rna_def_header(BlenderRNA *brna)
        RNA_def_function_flag(func, FUNC_REGISTER);
        RNA_def_pointer(func, "context", "Context", "", "");
 
+       RNA_define_verify_sdna(0); // not in sdna
+
        prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "layout");
        RNA_def_property_struct_type(prop, "UILayout");
 
        /* registration */
@@ -645,6 +648,8 @@ static void rna_def_header(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
        RNA_def_property_enum_items(prop, space_type_items);
        RNA_def_property_flag(prop, PROP_REGISTER);
+
+       RNA_define_verify_sdna(1);
 }
 
 static void rna_def_menu(BlenderRNA *brna)
@@ -672,7 +677,10 @@ static void rna_def_menu(BlenderRNA *brna)
        RNA_def_function_flag(func, FUNC_REGISTER);
        RNA_def_pointer(func, "context", "Context", "", "");
 
+       RNA_define_verify_sdna(0); // not in sdna
+
        prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "layout");
        RNA_def_property_struct_type(prop, "UILayout");
 
        /* registration */
@@ -688,6 +696,8 @@ static void rna_def_menu(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
        RNA_def_property_enum_items(prop, space_type_items);
        RNA_def_property_flag(prop, PROP_REGISTER);
+
+       RNA_define_verify_sdna(1);
 }
 
 void RNA_def_ui(BlenderRNA *brna)