Commit: c5794b4f08cdacf2cb8218f39cef37fc438a0ad0
Author: João Araújo
Date:   Sun Aug 14 16:30:29 2016 +0100
Branches: gsoc2016-improved_extrusion
https://developer.blender.org/rBc5794b4f08cdacf2cb8218f39cef37fc438a0ad0

Curves: Fillet and chamfer operator

Replaced calls to memcpy with BezTriples with calls to ED_curve_beztcpy, to 
prevent errors.

===================================================================

M       source/blender/editors/curve/editcurve.c

===================================================================

diff --git a/source/blender/editors/curve/editcurve.c 
b/source/blender/editors/curve/editcurve.c
index caaea33..4d0bd5f 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -8134,6 +8134,8 @@ static void chamfer_handle(BezTriple *bezt, BezTriple 
*r_new_bezt1, BezTriple *r
 static int curve_chamfer_exec(bContext *C, wmOperator *op)
 {
        Object *obedit = CTX_data_edit_object(C);
+       Curve *cu = obedit->data;
+       EditNurb *editnurb = cu->editnurb;
        ListBase *nubase = object_editcurve_get(obedit);
        Nurb *nu;
        float distance = RNA_float_get(op->ptr, "distance");
@@ -8159,9 +8161,9 @@ static int curve_chamfer_exec(bContext *C, wmOperator *op)
                        selected_point = i;
                        BKE_nurb_bezierPoints_add(nu, 1);
 
-                       memcpy(&nu->bezt[selected_point + 1], 
&nu->bezt[selected_point], (nu->pntsu - selected_point - 1) * 
sizeof(BezTriple));
-                       memcpy(&nu->bezt[selected_point], bezt1, 
sizeof(BezTriple));
-                       memcpy(&nu->bezt[selected_point + 1], bezt2, 
sizeof(BezTriple));
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point + 
1], &nu->bezt[selected_point], nu->pntsu - selected_point - 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point], 
bezt1, 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point + 
1], bezt2, 1);
 
                        MEM_freeN(bezt1);
                        MEM_freeN(bezt2);
@@ -8216,6 +8218,8 @@ static int curve_chamfer_modal(bContext *C, wmOperator 
*op, const wmEvent *event
        ED_area_tag_redraw(CTX_wm_area(C));
        char str[UI_MAX_DRAW_STR];
        size_t ofs = 0;
+       Curve *cu = obedit->data;
+       EditNurb *editnurb = cu->editnurb;
        ListBase *nubase = object_editcurve_get(obedit);
        Nurb *nu;
        BezTriple *bezt, *bezt1, *bezt2, *helper, *original;
@@ -8251,8 +8255,8 @@ static int curve_chamfer_modal(bContext *C, wmOperator 
*op, const wmEvent *event
                                bezt2 = MEM_callocN(sizeof(BezTriple), 
"curve_chamfer_modal2");
                                chamfer_handle(original, bezt1, bezt2, angle, 
distance);
 
-                               memcpy(bezt, bezt1, sizeof(BezTriple));
-                               memcpy(&bezt[1], bezt2, sizeof(BezTriple));
+                               ED_curve_beztcpy(editnurb, bezt, bezt1, 1);
+                               ED_curve_beztcpy(editnurb, &bezt[1], bezt2, 1);
 
                                MEM_freeN(bezt1);
                                MEM_freeN(bezt2);
@@ -8322,6 +8326,8 @@ static int curve_chamfer_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
        cd->mouse = mouse;
 
        Object *obedit = CTX_data_edit_object(C);
+       Curve *cu = obedit->data;
+       EditNurb *editnurb = cu->editnurb;
        ListBase *nubase = object_editcurve_get(obedit);
        /* get selected spline */
        int spline_id = get_selected_spline_id(nubase);
@@ -8346,9 +8352,9 @@ static int curve_chamfer_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
                        bezt2 = MEM_callocN(sizeof(BezTriple), 
"curve_chamfer_modal2");
                        chamfer_handle(bezt, bezt1, bezt2, DEG2RAD(45.0f), 
1.0f);
 
-                       memcpy(&nu->bezt[i + 1], &nu->bezt[i], (nu->pntsu - i - 
1) * sizeof(BezTriple));
-                       memcpy(&nu->bezt[i], bezt1, sizeof(BezTriple));
-                       memcpy(&nu->bezt[i + 1], bezt2, sizeof(BezTriple));
+                       ED_curve_beztcpy(editnurb, &nu->bezt[i + 1], 
&nu->bezt[i], nu->pntsu - i - 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[i], bezt1, 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[i + 1], bezt2, 1);
 
                        MEM_freeN(bezt1);
                        MEM_freeN(bezt2);
@@ -8414,6 +8420,8 @@ static void fillet_handle(BezTriple *bezt, BezTriple 
*r_new_bezt1, BezTriple *r_
 static int curve_fillet_exec(bContext *C, wmOperator *op)
 {
        Object *obedit = CTX_data_edit_object(C);
+       Curve *cu = obedit->data;
+       EditNurb *editnurb = cu->editnurb;
        ListBase *nubase = object_editcurve_get(obedit);
        Nurb *nu;
        float distance = RNA_float_get(op->ptr, "distance");
@@ -8443,9 +8451,9 @@ static int curve_fillet_exec(bContext *C, wmOperator *op)
                        selected_point = i;
                        BKE_nurb_bezierPoints_add(nu, 1);
 
-                       memcpy(&nu->bezt[selected_point + 1], 
&nu->bezt[selected_point], (nu->pntsu - selected_point - 1) * 
sizeof(BezTriple));
-                       memcpy(&nu->bezt[selected_point], bezt1, 
sizeof(BezTriple));
-                       memcpy(&nu->bezt[selected_point + 1], bezt2, 
sizeof(BezTriple));
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point + 
1], &nu->bezt[selected_point], nu->pntsu - selected_point - 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point], 
bezt1, 1);
+                       ED_curve_beztcpy(editnurb, &nu->bezt[selected_point + 
1], bezt2, 1);
 
                        MEM_freeN(bezt1);
                        MEM_freeN(bezt2);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to