Browse Source

right side faces for extrusion

zz85 14 years ago
parent
commit
3f6a5e66c9

+ 0 - 2
src/extras/geometries/Curve.js

@@ -251,8 +251,6 @@ THREE.ArcCurve.prototype.getPoint = function ( t /* between 0 .. 1 */) {
 }
 }
 
 
 
 
-
-
 THREE.Curve.Utils = {
 THREE.Curve.Utils = {
 	tangentQuadraticBezier: function (t, p0, p1, p2 ) {
 	tangentQuadraticBezier: function (t, p0, p1, p2 ) {
 		return 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 ) ;
 		return 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 ) ;

+ 45 - 50
src/extras/geometries/ExtrudeGeometry.js

@@ -33,16 +33,14 @@ THREE.ExtrudeGeometry = function( shape, options ) {
     var vertices = shape.getSpacedPoints(); // getPoints | getSpacedPoints() you can get variable divisions by dividing by total lenght
     var vertices = shape.getSpacedPoints(); // getPoints | getSpacedPoints() you can get variable divisions by dividing by total lenght
 	var reverse = THREE.FontUtils.Triangulate.area( vertices ) > 0 ;
 	var reverse = THREE.FontUtils.Triangulate.area( vertices ) > 0 ;
 	if (reverse) {
 	if (reverse) {
-		//faces = THREE.FontUtils.Triangulate( vertices.reverse(), true );
 		vertices = vertices.reverse();
 		vertices = vertices.reverse();
 		reverse = false;
 		reverse = false;
 	}
 	}
 	
 	
-	
 	var holes =  shape.getHoles();
 	var holes =  shape.getHoles();
 	
 	
-	//var faces = THREE.Shape.Utils.triangulateShape(vertices, holes);	
-    var faces = THREE.Shape.Utils.triangulate2(vertices, holes);
+	var faces = THREE.Shape.Utils.triangulateShape(vertices, holes);
+    //var faces = THREE.Shape.Utils.triangulate2(vertices, holes);
 
 
 
 
 	//console.log(faces);
 	//console.log(faces);
@@ -50,8 +48,9 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	
 	
 	var contour = vertices; // vertices has all points but contour has only points of circumference
 	var contour = vertices; // vertices has all points but contour has only points of circumference
 	
 	
-	var ahole ;
-	for (var h in holes) {
+	var ahole, h, hl;
+	
+	for (h = 0, hl = holes.length;  h < hl; h++ ) {
 		ahole = holes[h];
 		ahole = holes[h];
 		vertices = vertices.concat(ahole);
 		vertices = vertices.concat(ahole);
 	}
 	}
@@ -70,7 +69,10 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 	var i,
 	var i,
 		vert, vlen = vertices.length,
 		vert, vlen = vertices.length,
 		face, flen = faces.length,
 		face, flen = faces.length,
-		bevelPt, blen = bevelPoints.length;
+		cont, clen = contour.length,
+		hol, hlen;
+		
+	var	bevelPt, blen = bevelPoints.length;
 
 
 	// Back facing vertices
 	// Back facing vertices
 
 
@@ -153,69 +155,62 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 
 	}
 	}
 
 
-	var lastV;
+	var tmpPt;
 	var j, k, l, m;
 	var j, k, l, m;
 
 
+	var layeroffset = 0;
+	
 	// Sides faces
 	// Sides faces
+	
+	sidewalls(contour);
+	layeroffset += contour.length;
+	
+	for (h = 0, hl = holes.length;  h < hl; h++ ) {
+		ahole = holes[h];
+		sidewalls(ahole);
+		layeroffset += ahole.length;
+	}
+	
+	function sidewalls(contour) {
+	
+		i = contour.length;
 
 
-	//contour.push( contour[ 0 ] ); // in order not to check for boundary indices every time
-
-	i = contour.length;
-
-	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;
-
-		}
-
-		for ( k = 0; k < vlen; k++ ) {
+		while ( --i >= 0 ) {
 
 
-			if ( vertices[ k ].equals( contour[ i - 1 ] ) ) break;
+			tmpPt = contour[ i ];
 
 
-		}
-		*/
 
 
-		//TOREMOVE
-		//console.log('a', i,j, i-1, k);
 
 
-		j = i;
-		//if (j==vertices.length) j = 0;
+			//TOREMOVE
+			//console.log('a', i,j, i-1, k);
 
 
-		k = i - 1;
+			j = i;
+		
+			k = i - 1;
 
 
-		if ( k < 0 ) k = contour.length - 1;
+			if ( k < 0 ) k = contour.length - 1;
 
 
-		//console.log('b', i,j, i-1, k,vertices.length);
+			//console.log('b', i,j, i-1, k,vertices.length);
 
 
-		// Create faces for the z-sides of the text
+			// Create faces for the z-sides of the text
 
 
-		//f4( j, k, k + vlen, j + vlen );
+			//f4( j, k, k + vlen, j + vlen );
 
 
-		// Reverse
-		//f4( k, j, j + vlen, k + vlen);
+	
+			var s = 0;
 
 
-		//
+			for ( ; s < steps; s++ ) {
 
 
-		var s = 0;
+				var slen1 = vlen * s;
+				var slen2 = vlen * ( s + 1 );
 
 
-		for ( ; s < steps; s++ ) {
+				f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
 
 
-			var slen1 = vlen * s;
-			var slen2 = vlen * ( s + 1 );
+			}
 
 
-			f4( j + slen1, k + slen1, k + slen2, j + slen2 );
+			//
 
 
 		}
 		}
-
-		//
-
 	}
 	}
 
 
 
 
@@ -233,7 +228,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
 
 
 	function f3( a, b, c ) {
 	function f3( a, b, c ) {
 
 
-		if ( reverse ) {
+		if ( reverse ) { // Can be removed
 
 
 			scope.faces.push( new THREE.Face3( c, b, a ) );
 			scope.faces.push( new THREE.Face3( c, b, a ) );
 
 

+ 24 - 6
src/extras/geometries/Path.js

@@ -129,7 +129,7 @@ THREE.Path.prototype.arc = function(aX, aY, aRadius,
 	var curve = new THREE.ArcCurve( aX, aY, aRadius,
 	var curve = new THREE.ArcCurve( aX, aY, aRadius,
 	                                 aStartAngle, aEndAngle, aClockwise );
 	                                 aStartAngle, aEndAngle, aClockwise );
 	this.curves.push( curve );
 	this.curves.push( curve );
-	
+	console.log('arc', args);
 	this.actions.push( { action: THREE.PathActions.ARC, args: args } );
 	this.actions.push( { action: THREE.PathActions.ARC, args: args } );
    
    
 
 
@@ -219,8 +219,6 @@ THREE.Path.prototype.getPoints = function( divisions ) {
 
 
 			for ( j = 1; j <= divisions; j ++ ) {
 			for ( j = 1; j <= divisions; j ++ ) {
 
 
-				// TODO use LOD for divisions
-
 				t = j / divisions;
 				t = j / divisions;
 
 
 				tx = THREE.FontUtils.b2( t, cpx0, cpx1, cpx );
 				tx = THREE.FontUtils.b2( t, cpx0, cpx1, cpx );
@@ -295,22 +293,42 @@ THREE.Path.prototype.getPoints = function( divisions ) {
 			
 			
 			laste = this.actions[ i - 1 ].args;
 			laste = this.actions[ i - 1 ].args;
 			var aX = args[0], aY = args[1], aRadius = args[2],
 			var aX = args[0], aY = args[1], aRadius = args[2],
-			            aStartAngle = args[3], aEndAngle = args[4], aClockwise = args[5];
+			            aStartAngle = args[3], aEndAngle = args[4], aClockwise = !!args[5];
 			
 			
 			var lastx = laste[ laste.length - 2 ],
 			var lastx = laste[ laste.length - 2 ],
 				lasty = laste[ laste.length - 1 ] ;
 				lasty = laste[ laste.length - 1 ] ;
 				
 				
+			if (laste.length==0) {
+				lastx = lasty = 0;
+			}
+			
+			console.log(args, lastx, lasty);
+				
 			var deltaAngle = aEndAngle - aStartAngle;
 			var deltaAngle = aEndAngle - aStartAngle;
 			var angle;
 			var angle;
-			for ( j = 1; j <= divisions * 2; j ++ ) {
-				angle = aStartAngle + j/divisions/2 * deltaAngle;
+			var tdivisions = divisions * 2;
+			var t;
+			for ( j = 0; j < tdivisions; j ++ ) {
+			
+				t = j/tdivisions;
 				
 				
+				//if (aClockwise) {
+			//		t = 1 - t;
+			//	}
+				
+				
+				angle = aStartAngle + t * deltaAngle;
+			
 				
 				
 				 tx = lastx + aX + aRadius * Math.cos(angle);
 				 tx = lastx + aX + aRadius * Math.cos(angle);
 				 ty = lasty + aY + aRadius * Math.sin(angle);
 				 ty = lasty + aY + aRadius * Math.sin(angle);
+				
+					console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);
 
 
 				points.push( new THREE.Vector2( tx, ty ) );
 				points.push( new THREE.Vector2( tx, ty ) );
 			}
 			}
+			
+			console.log(points);
 
 
 		  break;
 		  break;
 
 

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

@@ -27,13 +27,16 @@ THREE.Shape.prototype.extrude = function( options ) {
 
 
 };
 };
 
 
+/* Return array of holes' getPoints() */
 THREE.Shape.prototype.getHoles = function() {
 THREE.Shape.prototype.getHoles = function() {
+
 	var holesPts = [];
 	var holesPts = [];
 	var i=0, il= this.holes.length;
 	var i=0, il= this.holes.length;
+
 	for (; i<il; i++ ) {
 	for (; i<il; i++ ) {
-		holesPts[i] = this.holes[i].getSpacedPoints();
+		holesPts[i] = this.holes[i].getSpacedPoints(); //getSpacedPoints getPoints
 	}
 	}
-
+	
 	return holesPts;
 	return holesPts;
 
 
 };
 };