Revision: 18931 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18931 Author: blendix Date: 2009-02-12 00:02:21 +0100 (Thu, 12 Feb 2009)
Log Message: ----------- 2.5: Curve edit mode. Transform works again, and editcurve.c is partly operatorized though nothing hooked up yet. Modified Paths: -------------- branches/blender2.5/blender/source/blender/editors/curve/curve_intern.h branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c branches/blender2.5/blender/source/blender/editors/curve/editcurve.c branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c Modified: branches/blender2.5/blender/source/blender/editors/curve/curve_intern.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/curve/curve_intern.h 2009-02-11 19:16:14 UTC (rev 18930) +++ branches/blender2.5/blender/source/blender/editors/curve/curve_intern.h 2009-02-11 23:02:21 UTC (rev 18931) @@ -38,5 +38,38 @@ /* editfont.c */ void FONT_OT_textedit(struct wmOperatorType *ot); +/* editcurve.c */ +void CURVE_OT_separate(struct wmOperatorType *ot); +void CURVE_OT_switch_direction(struct wmOperatorType *ot); +void CURVE_OT_set_weight(struct wmOperatorType *ot); +void CURVE_OT_set_radius(struct wmOperatorType *ot); +void CURVE_OT_smooth(struct wmOperatorType *ot); +void CURVE_OT_smooth_curve_radius(struct wmOperatorType *ot); +void CURVE_OT_de_select_first(struct wmOperatorType *ot); +void CURVE_OT_de_select_last(struct wmOperatorType *ot); +void CURVE_OT_de_select_all(struct wmOperatorType *ot); +void CURVE_OT_hide(struct wmOperatorType *ot); +void CURVE_OT_reveal(struct wmOperatorType *ot); +void CURVE_OT_select_invert(struct wmOperatorType *ot); +void CURVE_OT_subdivide(struct wmOperatorType *ot); +void CURVE_OT_set_spline_type(struct wmOperatorType *ot); +void CURVE_OT_make_segment(struct wmOperatorType *ot); +void CURVE_OT_spin(struct wmOperatorType *ot); +void CURVE_OT_add_vertex(struct wmOperatorType *ot); +void CURVE_OT_extrude(struct wmOperatorType *ot); +void CURVE_OT_make_cyclic(struct wmOperatorType *ot); +void CURVE_OT_select_linked(struct wmOperatorType *ot); +void CURVE_OT_select_row(struct wmOperatorType *ot); +void CURVE_OT_select_next(struct wmOperatorType *ot); +void CURVE_OT_select_previous(struct wmOperatorType *ot); +void CURVE_OT_select_more(struct wmOperatorType *ot); +void CURVE_OT_select_less(struct wmOperatorType *ot); +void CURVE_OT_select_random(struct wmOperatorType *ot); +void CURVE_OT_select_every_nth(struct wmOperatorType *ot); +void CURVE_OT_add_duplicate(struct wmOperatorType *ot); +void CURVE_OT_delete(struct wmOperatorType *ot); +void CURVE_OT_set_smooth(struct wmOperatorType *ot); +void CURVE_OT_clear_tilt(struct wmOperatorType *ot); + #endif /* ED_UTIL_INTERN_H */ Modified: branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c 2009-02-11 19:16:14 UTC (rev 18930) +++ branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c 2009-02-11 23:02:21 UTC (rev 18931) @@ -64,6 +64,38 @@ void ED_operatortypes_curve(void) { WM_operatortype_append(FONT_OT_textedit); + + WM_operatortype_append(CURVE_OT_separate); + WM_operatortype_append(CURVE_OT_switch_direction); + WM_operatortype_append(CURVE_OT_set_weight); + WM_operatortype_append(CURVE_OT_set_radius); + WM_operatortype_append(CURVE_OT_smooth); + WM_operatortype_append(CURVE_OT_smooth_curve_radius); + WM_operatortype_append(CURVE_OT_de_select_first); + WM_operatortype_append(CURVE_OT_de_select_last); + WM_operatortype_append(CURVE_OT_de_select_all); + WM_operatortype_append(CURVE_OT_hide); + WM_operatortype_append(CURVE_OT_reveal); + WM_operatortype_append(CURVE_OT_select_invert); + WM_operatortype_append(CURVE_OT_subdivide); + WM_operatortype_append(CURVE_OT_set_spline_type); + WM_operatortype_append(CURVE_OT_make_segment); + WM_operatortype_append(CURVE_OT_spin); + WM_operatortype_append(CURVE_OT_add_vertex); + WM_operatortype_append(CURVE_OT_extrude); + WM_operatortype_append(CURVE_OT_make_cyclic); + WM_operatortype_append(CURVE_OT_select_linked); + WM_operatortype_append(CURVE_OT_select_row); + WM_operatortype_append(CURVE_OT_select_next); + WM_operatortype_append(CURVE_OT_select_previous); + WM_operatortype_append(CURVE_OT_select_more); + WM_operatortype_append(CURVE_OT_select_less); + WM_operatortype_append(CURVE_OT_select_random); + WM_operatortype_append(CURVE_OT_select_every_nth); + WM_operatortype_append(CURVE_OT_add_duplicate); + WM_operatortype_append(CURVE_OT_delete); + WM_operatortype_append(CURVE_OT_set_smooth); + WM_operatortype_append(CURVE_OT_clear_tilt); } void ED_keymap_curve(wmWindowManager *wm) @@ -77,6 +109,5 @@ keymap= WM_keymap_listbase(wm, "Curve", 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0); - } Modified: branches/blender2.5/blender/source/blender/editors/curve/editcurve.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/curve/editcurve.c 2009-02-11 19:16:14 UTC (rev 18930) +++ branches/blender2.5/blender/source/blender/editors/curve/editcurve.c 2009-02-11 23:02:21 UTC (rev 18931) @@ -59,11 +59,12 @@ #include "BKE_curve.h" #include "BKE_depsgraph.h" #include "BKE_fcurve.h" +#include "BKE_global.h" #include "BKE_key.h" #include "BKE_library.h" -#include "BKE_global.h" #include "BKE_main.h" #include "BKE_object.h" +#include "BKE_report.h" #include "BKE_utildefines.h" #include "WM_api.h" @@ -72,10 +73,16 @@ #include "ED_anim_api.h" #include "ED_keyframes_edit.h" #include "ED_object.h" +#include "ED_screen.h" #include "ED_types.h" #include "ED_util.h" #include "ED_view3d.h" +#include "UI_interface.h" + +#include "RNA_access.h" +#include "RNA_define.h" + /* still need to eradicate a few :( */ #define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name) @@ -84,12 +91,8 @@ /* XXX */ static void BIF_undo_push() {} -static void waitcursor() {} -static void error() {} static int okee() {return 0;} static int pupmenu() {return 0;} -static int button() {return 0;} -static float fbutton() {return 0;} static void adduplicate() {} static void error_libdata() {} /* XXX */ @@ -373,9 +376,12 @@ } } -void separate_nurb(Scene *scene) +/******************** XXX separate operator ***********************/ + +static int separate_exec(bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX use context + Scene *scene= CTX_data_scene(C); + Object *obedit= CTX_data_edit_object(C); ListBase *editnurb= curve_get_editcurve(obedit); View3D *v3d= NULL; // XXX Nurb *nu, *nu1; @@ -384,17 +390,13 @@ Curve *cu; ListBase editnurbo; - if( v3d==0 || (v3d->lay & obedit->lay)==0 ) return; - - if(okee("Separate")==0) return; - - waitcursor(1); - cu= obedit->data; if(cu->key) { - error("Can't separate a curve with vertex keys"); - return; + BKE_report(op->reports, RPT_ERROR, "Can't separate a curve with vertex keys"); + return OPERATOR_CANCELLED; } + + WM_cursor_wait(1); /* we are going to trick everything as follows: * 1. duplicate base: this is the new one, remember old pointer @@ -445,22 +447,39 @@ *editnurb= editnurbo; obedit= 0; /* displists behave different in edit mode */ - DAG_object_flush_update(scene, OBACT, OB_RECALC_DATA); /* this is the separated one */ + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); /* this is the separated one */ DAG_object_flush_update(scene, oldob, OB_RECALC_DATA); /* this is the original one */ obedit= oldob; BASACT= oldbase; BASACT->flag |= SELECT; - waitcursor(0); + set_actNurb(obedit, NULL); - set_actNurb(obedit, NULL); + WM_cursor_wait(0); + + // XXX notifier + + return OPERATOR_FINISHED; } +void CURVE_OT_separate(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Separate"; + ot->idname= "CURVE_OT_separate"; + + /* api callbacks */ + ot->exec= separate_exec; + ot->poll= ED_operator_editcurve; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + /* ******************* FLAGS ********************* */ - -short isNurbselUV(Nurb *nu, int *u, int *v, int flag) +static short isNurbselUV(Nurb *nu, int *u, int *v, int flag) { /* return u!=-1: 1 row in u-direction selected. U has value between 0-pntsv * return v!=-1: 1 collumn in v-direction selected. V has value between 0-pntsu @@ -501,7 +520,7 @@ return 0; } -void setflagsNurb(ListBase *editnurb, short flag) +static void setflagsNurb(ListBase *editnurb, short flag) { Nurb *nu; BezTriple *bezt; @@ -528,7 +547,7 @@ } } -void rotateflagNurb(ListBase *editnurb, short flag, float *cent, float rotmat[][3]) +static void rotateflagNurb(ListBase *editnurb, short flag, float *cent, float rotmat[][3]) { /* all verts with (flag & 'flag') rotate */ Nurb *nu; @@ -556,8 +575,7 @@ } } - -void translateflagNurb(ListBase *editnurb, short flag, float *vec) +static void translateflagNurb(ListBase *editnurb, short flag, float *vec) { /* all verts with ('flag' & flag) translate */ Nurb *nu; @@ -589,7 +607,7 @@ } } -void weightflagNurb(ListBase *editnurb, short flag, float w, int mode) /* mode==0: replace, mode==1: multiply */ +static void weightflagNurb(ListBase *editnurb, short flag, float w, int mode) /* mode==0: replace, mode==1: multiply */ { Nurb *nu; BPoint *bp; @@ -610,9 +628,9 @@ } } -void deleteflagNurb(Scene *scene, short flag) +static int deleteflagNurb(bContext *C, wmOperator *op, int flag) { - Object *obedit= scene->obedit; // XXX use context + Object *obedit= CTX_data_edit_object(C); Curve *cu= obedit->data; ListBase *editnurb= curve_get_editcurve(obedit); Nurb *nu, *next; @@ -620,7 +638,7 @@ int a, b, newu, newv, sel; if(obedit && obedit->type==OB_SURF); - else return; + else return OPERATOR_CANCELLED; cu->lastselbp= NULL; @@ -727,10 +745,12 @@ } nu= next; } + + return OPERATOR_FINISHED; } /* only for OB_SURF */ -short extrudeflagNurb(ListBase *editnurb, int flag) +static short extrudeflagNurb(ListBase *editnurb, int flag) { Nurb *nu; BPoint *bp, *bpn, *newbp; @@ -847,9 +867,8 @@ return ok; } -void adduplicateflagNurb(Scene *scene, short flag) +static void adduplicateflagNurb(Object *obedit, short flag) { - Object *obedit= scene->obedit; // XXX context ListBase *editnurb= curve_get_editcurve(obedit); Nurb *nu, *newnu; BezTriple *bezt, *bezt1; @@ -1018,139 +1037,153 @@ /* actnu changed */ } +/**************** switch direction operator ***************/ -void switchdirectionNurb2(Scene *scene) +static int switch_direction_exec(bContext *C, wmOperator *op) { - Object *obedit= scene->obedit; // XXX use context + Object *obedit= CTX_data_edit_object(C); ListBase *editnurb= curve_get_editcurve(obedit); - View3D *v3d= NULL; // XXX Nurb *nu; - if(v3d==0 || !(obedit->lay & v3d->lay)) - return; + for(nu= editnurb->first; nu; nu= nu->next) + if(isNurbsel(nu)) + switchdirectionNurb(nu); @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs