diff options
Diffstat (limited to 'source/blender/editors/curve/editcurve.c')
-rw-r--r-- | source/blender/editors/curve/editcurve.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index e6ea74b380b..bc97515f055 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -1370,6 +1370,37 @@ void CU_select_swap(Object *obedit) } } +/******************** transform operator **********************/ + +void ED_curve_transform(Curve *cu, float mat[4][4]) +{ + Nurb *nu; + BPoint *bp; + BezTriple *bezt; + int a; + + float scale = mat4_to_scale(mat); + + for (nu = cu->nurb.first; nu; nu = nu->next) { + if (nu->type == CU_BEZIER) { + a = nu->pntsu; + for (bezt = nu->bezt; a--; bezt++) { + mul_m4_v3(mat, bezt->vec[0]); + mul_m4_v3(mat, bezt->vec[1]); + mul_m4_v3(mat, bezt->vec[2]); + bezt->radius *= scale; + } + BKE_nurb_handles_calc(nu); + } + else { + a = nu->pntsu * nu->pntsv; + for (bp = nu->bp; a--; bp++) + mul_m4_v3(mat, bp->vec); + } + } + DAG_id_tag_update(&cu->id, 0); +} + /******************** separate operator ***********************/ static int separate_exec(bContext *C, wmOperator *op) |