Fix #27863: converting curve spline type from python crashes.
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 5 Jul 2011 08:57:11 +0000 (08:57 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 5 Jul 2011 08:57:11 +0000 (08:57 +0000)
source/blender/editors/curve/editcurve.c
source/blender/editors/include/ED_curve.h
source/blender/makesrna/intern/rna_curve.c
source/blenderplayer/bad_level_call_stubs/stubs.c

index 99aebfffaeeedd0ee6c32a2b12a3d85904bbc042..06d88b16fa8e3508144e5a5a73b64dd787e65cc1 100644 (file)
@@ -3535,6 +3535,11 @@ static int convertspline(short type, Nurb *nu)
        return 0;
 }
 
        return 0;
 }
 
+void ED_nurb_set_spline_type(Nurb *nu, int type)
+{
+       convertspline(type, nu);
+}
+
 static int set_spline_type_exec(bContext *C, wmOperator *op)
 {
        Object *obedit= CTX_data_edit_object(C);
 static int set_spline_type_exec(bContext *C, wmOperator *op)
 {
        Object *obedit= CTX_data_edit_object(C);
index 6a92ee2e0563325631ee691778227dc4519a4360..d78d284657202144f6dbc949a431e76998ae6b7f 100644 (file)
@@ -71,6 +71,7 @@ int   mouse_nurb              (struct bContext *C, const int mval[2], int extend);
 struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newob);
 
 int            isNurbsel               (struct Nurb *nu);
 struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newob);
 
 int            isNurbsel               (struct Nurb *nu);
+void   ED_nurb_set_spline_type(struct Nurb *nu, int type);
 
 int            join_curve_exec (struct bContext *C, struct wmOperator *op);
 
 
 int            join_curve_exec (struct bContext *C, struct wmOperator *op);
 
index 594295ba817a4b18e0b52d64aeac227060c1b8d6..f2811e7320b27926e761a2fc70fddcbfabbb0198 100644 (file)
@@ -281,8 +281,7 @@ static int rna_Nurb_length(PointerRNA *ptr)
 static void rna_Nurb_type_set(PointerRNA *ptr, int value)
 {
        Nurb *nu= (Nurb*)ptr->data;
 static void rna_Nurb_type_set(PointerRNA *ptr, int value)
 {
        Nurb *nu= (Nurb*)ptr->data;
-       nu->type = value;
-       // XXX - TODO change datatypes
+       ED_nurb_set_spline_type(nu, value);
 }
 
 static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 }
 
 static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -1448,7 +1447,6 @@ static void rna_def_curve_nurb(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Radius Interpolation", "The type of radius interpolation for Bezier curves");
        RNA_def_property_update(prop, 0, "rna_Curve_update_data");
 
        RNA_def_property_ui_text(prop, "Radius Interpolation", "The type of radius interpolation for Bezier curves");
        RNA_def_property_update(prop, 0, "rna_Curve_update_data");
 
-       // XXX - switching type probably needs comprehensive recalc of data like in 2.4x
        prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_items(prop, curve_type_items);
        RNA_def_property_enum_funcs(prop, NULL, "rna_Nurb_type_set", NULL);
        prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_items(prop, curve_type_items);
        RNA_def_property_enum_funcs(prop, NULL, "rna_Nurb_type_set", NULL);
index e496fa0fa8c0bf3ed4a1a1756d0e84938fb1eedc..7bf5fe9dde34f07e4934859f7bbf175786078497 100644 (file)
@@ -68,6 +68,7 @@ struct Mesh;
 struct ModifierData;
 struct MultiresModifierData;
 struct NodeBlurData;
 struct ModifierData;
 struct MultiresModifierData;
 struct NodeBlurData;
+struct Nurb;
 struct Object;
 struct PBVHNode;
 struct Render;
 struct Object;
 struct PBVHNode;
 struct Render;
@@ -292,7 +293,8 @@ float ED_rollBoneToVector(struct EditBone *bone, float new_up_axis[3]){return 0.
 void ED_space_image_size(struct SpaceImage *sima, int *width, int *height){}
 
 struct ListBase *ED_curve_editnurbs(struct Curve *cu){return NULL;}
 void ED_space_image_size(struct SpaceImage *sima, int *width, int *height){}
 
 struct ListBase *ED_curve_editnurbs(struct Curve *cu){return NULL;}
-void free_curve_editNurb (struct Curve *cu){};
+void free_curve_editNurb (struct Curve *cu){}
+void ED_nurb_set_spline_type(struct Nurb *nu, int type){}
 
 void EM_selectmode_set(struct EditMesh *em){}
 int EM_texFaceCheck(struct EditMesh *em){return 0;}
 
 void EM_selectmode_set(struct EditMesh *em){}
 int EM_texFaceCheck(struct EditMesh *em){return 0;}