[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45337] trunk/blender/source/blender/ editors/curve/editcurve.c: fix for a bug with Ctrl+Click extrude in curve editmode, it would use the wrong handle type in some cases.

Campbell Barton ideasman42 at gmail.com
Mon Apr 2 12:20:19 CEST 2012


Revision: 45337
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45337
Author:   campbellbarton
Date:     2012-04-02 10:20:10 +0000 (Mon, 02 Apr 2012)
Log Message:
-----------
fix for a bug with Ctrl+Click extrude in curve editmode, it would use the wrong handle type in some cases.
also make it re-calculate the handle locations which is much more useful.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/curve/editcurve.c

Modified: trunk/blender/source/blender/editors/curve/editcurve.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editcurve.c	2012-04-02 09:07:02 UTC (rev 45336)
+++ trunk/blender/source/blender/editors/curve/editcurve.c	2012-04-02 10:20:10 UTC (rev 45337)
@@ -4378,6 +4378,7 @@
 	BPoint *bp, *newbp = NULL;
 	float imat[4][4], temp[3];
 	int ok= 0;
+	BezTriple *bezt_recalc[3] = {NULL};
 
 	invert_m4_m4(imat, obedit->obmat);
 
@@ -4471,9 +4472,14 @@
 			newbezt+= nu->pntsu;
 			BEZ_SEL(newbezt);
 			cu->lastsel= newbezt;
-			newbezt->h2= newbezt->h1;
+			newbezt->h1 = newbezt->h2;
 			bezt= nu->bezt+nu->pntsu-1;
 			ok= 1;
+
+			if (nu->pntsu > 1) {
+				bezt_recalc[1] = newbezt;
+				bezt_recalc[0] = newbezt - 1;
+			}
 		}
 		else if (bezt== nu->bezt) {   /* first */
 			BEZ_DESEL(bezt);
@@ -4489,6 +4495,11 @@
 			nu->bezt= newbezt;
 			bezt= newbezt+1;
 			ok= 1;
+
+			if (nu->pntsu > 1) {
+				bezt_recalc[1] = newbezt;
+				bezt_recalc[2] = newbezt + 1;
+			}
 		}
 		else if (mode!='e') {
 			BEZ_DESEL(bezt);
@@ -4523,9 +4534,20 @@
 			else {
 				mul_v3_m4v3(newbezt->vec[1], imat, location);
 				sub_v3_v3v3(temp, newbezt->vec[1],temp);
-				add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp);
-				add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp);
 
+				if (bezt_recalc[1]) {
+					const char h1 = bezt_recalc[1]->h1, h2 = bezt_recalc[1]->h2;
+					bezt_recalc[1]->h1 = bezt_recalc[1]->h2 = HD_AUTO;
+					calchandleNurb(bezt_recalc[1], bezt_recalc[0], bezt_recalc[2], 0);
+					bezt_recalc[1]->h1 = h1;
+					bezt_recalc[1]->h2 = h2;
+				}
+				else {
+					add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp);
+					add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp);
+				}
+				
+
 				if (newnu) calchandlesNurb(newnu);
 				else calchandlesNurb(nu);
 			}




More information about the Bf-blender-cvs mailing list