[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15207] trunk/blender/source/blender: Curve Smoorth for venomgfx adjusting animation paths over terrain.
Campbell Barton
ideasman42 at gmail.com
Thu Jun 12 16:47:47 CEST 2008
Revision: 15207
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15207
Author: campbellbarton
Date: 2008-06-12 16:46:32 +0200 (Thu, 12 Jun 2008)
Log Message:
-----------
Curve Smoorth for venomgfx adjusting animation paths over terrain.
Modified Paths:
--------------
trunk/blender/source/blender/include/BDR_editcurve.h
trunk/blender/source/blender/src/editcurve.c
trunk/blender/source/blender/src/editobject.c
Modified: trunk/blender/source/blender/include/BDR_editcurve.h
===================================================================
--- trunk/blender/source/blender/include/BDR_editcurve.h 2008-06-12 03:00:24 UTC (rev 15206)
+++ trunk/blender/source/blender/include/BDR_editcurve.h 2008-06-12 14:46:32 UTC (rev 15207)
@@ -99,6 +99,7 @@
void setweightNurb( void );
void setradiusNurb( void );
void smoothradiusNurb( void );
+void smoothNurb( void );
extern void undo_push_curve(char *name);
Modified: trunk/blender/source/blender/src/editcurve.c
===================================================================
--- trunk/blender/source/blender/src/editcurve.c 2008-06-12 03:00:24 UTC (rev 15206)
+++ trunk/blender/source/blender/src/editcurve.c 2008-06-12 14:46:32 UTC (rev 15207)
@@ -1158,7 +1158,63 @@
allqueue(REDRAWINFO, 1); /* 1, because header->win==0! */
}
+void smoothNurb( void )
+{
+ extern ListBase editNurb;
+ Nurb *nu;
+ BezTriple *bezt, *beztOrig;
+ BPoint *bp, *bpOrig;
+ int a, i, change = 0;
+
+ /* floats for smoothing */
+ float val, newval, offset;
+
+ for(nu= editNurb.first; nu; nu= nu->next) {
+ if(nu->bezt) {
+ change = 0;
+ beztOrig = MEM_dupallocN( nu->bezt );
+ for(bezt=nu->bezt+1, a=1; a<nu->pntsu-1; a++, bezt++) {
+ if(bezt->f2 & SELECT) {
+ for(i=0; i<3; i++) {
+ val = bezt->vec[1][i];
+ newval = ((beztOrig+(a-1))->vec[1][i] * 0.5) + ((beztOrig+(a+1))->vec[1][i] * 0.5);
+ offset = (val*((1.0/6.0)*5)) + (newval*(1.0/6.0)) - val;
+ /* offset handles */
+ bezt->vec[1][i] += offset;
+ bezt->vec[0][i] += offset;
+ bezt->vec[2][i] += offset;
+ }
+ change = 1;
+ }
+ }
+ MEM_freeN(beztOrig);
+ if (change)
+ calchandlesNurb(nu);
+ } else if (nu->bp) {
+ bpOrig = MEM_dupallocN( nu->bp );
+ /* Same as above, keep these the same! */
+ for(bp=nu->bp+1, a=1; a<nu->pntsu-1; a++, bp++) {
+ if(bp->f1 & SELECT) {
+ for(i=0; i<3; i++) {
+ val = bp->vec[i];
+ newval = ((bpOrig+(a-1))->vec[i] * 0.5) + ((bpOrig+(a+1))->vec[i] * 0.5);
+ offset = (val*((1.0/6.0)*5)) + (newval*(1.0/6.0)) - val;
+
+ bp->vec[i] += offset;
+ }
+ }
+ }
+ MEM_freeN(bpOrig);
+ }
+ }
+ BIF_undo_push("Smooth Curve");
+ DAG_object_flush_update(G.scene, OBACT, OB_RECALC_DATA);
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSALL, 0);
+ allqueue(REDRAWINFO, 1); /* 1, because header->win==0! */
+}
+
/* TODO, make smoothing distance based */
void smoothradiusNurb( void )
{
Modified: trunk/blender/source/blender/src/editobject.c
===================================================================
--- trunk/blender/source/blender/src/editobject.c 2008-06-12 03:00:24 UTC (rev 15206)
+++ trunk/blender/source/blender/src/editobject.c 2008-06-12 14:46:32 UTC (rev 15207)
@@ -2735,7 +2735,7 @@
}
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
- nr= pupmenu("Specials%t|Subdivide%x1|Switch Direction%x2|Set Goal Weight %x3|Set Radius %x4|Smooth Radius %x5");
+ nr= pupmenu("Specials%t|Subdivide%x1|Switch Direction%x2|Set Goal Weight %x3|Set Radius %x4|Smooth Radius %x5|Smooth Radius %x6");
switch(nr) {
case 1:
@@ -2751,6 +2751,9 @@
setradiusNurb();
break;
case 5:
+ smoothNurb();
+ break;
+ case 6:
smoothradiusNurb();
break;
}
More information about the Bf-blender-cvs
mailing list