[Bf-blender-cvs] [c5794b4] gsoc2016-improved_extrusion: Curves: Fillet and chamfer operator

João Araújo noreply at git.blender.org
Sun Aug 14 18:11:31 CEST 2016


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);




More information about the Bf-blender-cvs mailing list