Browse Source

checks for holes order

zz85 14 years ago
parent
commit
0d3eaed561
1 changed files with 67 additions and 33 deletions
  1. 67 33
      src/extras/geometries/ExtrudeGeometry.js

+ 67 - 33
src/extras/geometries/ExtrudeGeometry.js

@@ -11,6 +11,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 10;
 	var bevelSize = options.bevelSize !== undefined ? options.bevelSize : 8;
 	var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : false;
+	var bevelSegments = 3;
 
 	var steps = options.steps !== undefined ? options.steps : 1;
 	var extrudePath = options.path !== undefined ? options.path : null;
@@ -29,39 +30,66 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 	THREE.Geometry.call( this );
 
+	
+	// Variables initalization
+	var ahole, h, hl; // looping of holes
+	var scope = this;
+	var bevelPoints = [];
+
+
 	// getPoints
     var vertices = shape.getSpacedPoints(); // getPoints | getSpacedPoints() you can get variable divisions by dividing by total lenght
+
+	var holes =  shape.getHoles();
+	
+
 	var reverse = THREE.FontUtils.Triangulate.area( vertices ) > 0 ;
+
+
 	if (reverse) {
+		console.debug("REVERSED");
 		vertices = vertices.reverse();
-		reverse = false;
+		
+		// Maybe we should also check if holes are in the opposite direction...
+		
+		for (h = 0, hl = holes.length;  h < hl; h++ ) {
+			
+			ahole = holes[h];
+			if (THREE.FontUtils.Triangulate.area(ahole) < 0 ) {
+				
+				holes[h] = ahole.reverse();
+				
+			}
+		}
+		
+		reverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)!
 	}
 	
-	var holes =  shape.getHoles();
+	
 	
 	var faces = THREE.Shape.Utils.triangulateShape(vertices, holes);
     //var faces = THREE.Shape.Utils.triangulate2(vertices, holes);
 
 
 	//console.log(faces);
-	//var faces = THREE.FontUtils.Triangulate( vertices, true );
+	
+	////
+	///   Handle Vertices
+	////
 	
 	var contour = vertices; // vertices has all points but contour has only points of circumference
 	
-	var ahole, h, hl;
 	
 	for (h = 0, hl = holes.length;  h < hl; h++ ) {
+
 		ahole = holes[h];
+
 		vertices = vertices.concat(ahole);
+
 	}
 	
 	console.log("same?", contour.length, vertices.length);
 	
-	var scope = this;
-	
-   
-	var bevelPoints = [];
-
 	
 
 	//console.log(reverse);
@@ -84,6 +112,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	}
 
 	// Add steped vertices...
+	
 	// Including front facing vertices
 
 	var s = 1;
@@ -136,6 +165,12 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 		}
 
 	}
+	
+	
+	////
+	///   Handle Faces
+	////
+	
 
 	// Bottom faces
 
@@ -167,7 +202,8 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	
 	for (h = 0, hl = holes.length;  h < hl; h++ ) {
 		ahole = holes[h];
-		sidewalls(ahole);
+		sidewalls(ahole); 
+		//, true
 		layeroffset += ahole.length;
 	}
 	
@@ -179,15 +215,12 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 			tmpPt = contour[ i ];
 
-
-
-			//TOREMOVE
-			//console.log('a', i,j, i-1, k);
-
 			j = i;
 		
 			k = i - 1;
 
+			//TOREMOVE
+
 			if ( k < 0 ) k = contour.length - 1;
 
 			//console.log('b', i,j, i-1, k,vertices.length);
@@ -205,6 +238,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 				var slen2 = vlen * ( s + 1 );
 
 				f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
+				
 
 			}
 
@@ -228,29 +262,29 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 	function f3( a, b, c ) {
 
-		if ( reverse ) { // Can be removed
-
-			scope.faces.push( new THREE.Face3( c, b, a ) );
-
-		} else {
-
-			scope.faces.push( new THREE.Face3( a, b, c ) );
-
-		}
+		// if ( reverse ) { // Can now be removed
+		// 
+		// 		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 ) {
 
-		if ( reverse ) {
-
-			scope.faces.push( new THREE.Face4( d, c, b, a ) );
-
-		} else {
-
-			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 ) );
+		// 
+		// 	}
 
 	}