[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