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 be625fb..5a12c04 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 73ecade..1be75e9 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 aeb6c8e..f76423e 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 c8698ef..ded8db6 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 4c8f559..d98c723 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 b651360..491095a 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 5afc084..299539a 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 217f1ea..e835579 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)