[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