Fix #27863: converting curve spline type from python crashes.

This commit is contained in:
Brecht Van Lommel 2011-07-05 08:57:11 +00:00
parent 1ff54f91ff
commit 3d5ae95986
4 changed files with 10 additions and 4 deletions

@ -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) static int set_spline_type_exec(bContext *C, wmOperator *op)
{ {
Object *obedit= CTX_data_edit_object(C); Object *obedit= CTX_data_edit_object(C);

@ -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); struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newob);
int isNurbsel (struct Nurb *nu); 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);

@ -281,8 +281,7 @@ static int rna_Nurb_length(PointerRNA *ptr)
static void rna_Nurb_type_set(PointerRNA *ptr, int value) static void rna_Nurb_type_set(PointerRNA *ptr, int value)
{ {
Nurb *nu= (Nurb*)ptr->data; Nurb *nu= (Nurb*)ptr->data;
nu->type = value; ED_nurb_set_spline_type(nu, value);
// XXX - TODO change datatypes
} }
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_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_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); prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, curve_type_items); RNA_def_property_enum_items(prop, curve_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Nurb_type_set", NULL); RNA_def_property_enum_funcs(prop, NULL, "rna_Nurb_type_set", NULL);

@ -68,6 +68,7 @@ struct Mesh;
struct ModifierData; struct ModifierData;
struct MultiresModifierData; struct MultiresModifierData;
struct NodeBlurData; struct NodeBlurData;
struct Nurb;
struct Object; struct Object;
struct PBVHNode; struct PBVHNode;
struct Render; 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){} void ED_space_image_size(struct SpaceImage *sima, int *width, int *height){}
struct ListBase *ED_curve_editnurbs(struct Curve *cu){return NULL;} 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){} void EM_selectmode_set(struct EditMesh *em){}
int EM_texFaceCheck(struct EditMesh *em){return 0;} int EM_texFaceCheck(struct EditMesh *em){return 0;}