Browse Source

fixes for reversed faces

zz85 14 years ago
parent
commit
2f5303fb57

+ 30 - 9
src/extras/geometries/ExtrudeGeometry.js

@@ -22,7 +22,9 @@ THREE.ExtrudeGeometry = function( shape, options ) {
     var scope = this;
 
 	var bezelPoints = [];
-
+	
+	var reverse = THREE.FontUtils.Triangulate.area( vertices ) > 0 ;
+	console.log(reverse);
 	var i,
 		vert, vlen = vertices.length,
 		face, flen = faces.length,
@@ -86,16 +88,18 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	var j, k, l, m;
 
 
-	// Faces Sides
+	// Sides Faces 
 
-	contour.push( contour[ 0 ] ); // in order not to check for boundary indices every time
+	//contour.push( contour[ 0 ] ); // in order not to check for boundary indices every time
 
 	i = contour.length;
 
-	while ( --i > 0 ) {
+	while ( --i >= 0 ) {
 
 		lastV = contour[ i ];
 
+		// TO OPTIMISE. Reduce this step of checking vertices.
+		/*
 		for ( j = 0; j < vlen; j++ ) {
 
 			if ( vertices[ j ].equals( contour[ i ] ) ) break;
@@ -106,11 +110,22 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 			if ( vertices[ k ].equals( contour[ i - 1 ] ) ) break;
 
-		}
+		}*/
+		
+		//TOREMOVE
+		//console.log('a', i,j, i-1, k);
+		j = i ;
+		//if (j==vertices.length) j = 0;
+		k = i - 1;
+		if (k<0) k = vertices.length-1;
+		//console.log('b', i,j, i-1, k,vertices.length);
 
 		// Create faces for the z-sides of the text
 
 		f4( j, k, k + vlen, j + vlen );
+		// REverse
+		//f4( k, j, j + vlen, k + vlen);
+	
 
 	}
 
@@ -128,14 +143,20 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	}
 
 	function f3( a, b, c ) {
-
-		scope.faces.push( new THREE.Face3( a, b, c ) );
+		if (reverse) {
+			scope.faces.push( new THREE.Face3( c, b, a ) );
+		} else {
+			scope.faces.push( new THREE.Face3( a, b, c ) );
+		}
 
 	}
 
 	function f4( a, b, c, d ) {
-
-		scope.faces.push( new THREE.Face4( a, b, c, d ) );
+		if (reverse) {
+			scope.faces.push( new THREE.Face4( d, c , b , a ) );
+		} else {
+			scope.faces.push( new THREE.Face4( a, b, c, d ) );
+		}
 
 	}
 

+ 15 - 2
src/extras/geometries/Path.js

@@ -21,13 +21,13 @@ THREE.PathActions = {
 	LINE_TO: 'lineTo',
 	QUADRATIC_CURVE_TO: 'quadraticCurveTo', // BEZIER quadratic CURVE
 	BEZIER_CURVE_TO: 'bezierCurveTo', 		// BEZIER cubic CURVE
-	CSPLINE_TO: 'cSplineTo' 				// TODO cardinal splines
+	CSPLINE_THRU: 'cSplineTo' 				// TODO cardinal splines
 
 };
 
 /* Create path using straight lines to connect all points */
 
-THREE.Path.prototype.fromPoints = function( vectors ) {
+THREE.Path.prototype.fromPoints = function( vectors /*Array of Vector*/ ) {
 
 	var v = 0, vlen = vectors.length;
 
@@ -71,6 +71,13 @@ THREE.Path.prototype.bezierCurveTo = function( aCP1x, aCP1y,
 
 };
 
+THREE.Path.prototype.splineThru = function( pts /*Array of Vector*/ ) {
+	var args = Array.prototype.slice.call( arguments );
+	this.actions.push( { action: THREE.PathActions.CSPLINE_THRU, args: args } );
+}
+
+// TODO ARC
+
 /* Return an array of vectors based on contour of the path */
 
 THREE.Path.prototype.getPoints = function( divisions ) {
@@ -184,6 +191,10 @@ THREE.Path.prototype.getPoints = function( divisions ) {
 			}
 
 			break;
+			
+		case THREE.PathActions.CSPLINE_THRU:
+			
+			break;
 
 		}
 
@@ -194,6 +205,8 @@ THREE.Path.prototype.getPoints = function( divisions ) {
 };
 
 
+
+
 THREE.Path.prototype.getMinAndMax = function() {
 
 	var points = this.getPoints();

+ 5 - 2
src/extras/geometries/Shape.js

@@ -22,8 +22,11 @@ THREE.Shape.prototype.constructor = THREE.Path;
 /* Returns vertices of triangulated faces | get faces */
 
 THREE.Shape.prototype.triangulate = function() {
-
-	return THREE.FontUtils.Triangulate( this.getPoints(), true );
+	var pts = this.getPoints();
+	if (THREE.FontUtils.Triangulate.area( pts ) > 0 ) {
+		pts = pts.reverse();
+	};
+	return THREE.FontUtils.Triangulate( pts, true );
 
 };