提交 3f6a5e66 编写于 作者: Z zz85

right side faces for extrusion

上级 41e1ff01
......@@ -251,8 +251,6 @@ THREE.ArcCurve.prototype.getPoint = function ( t /* between 0 .. 1 */) {
}
THREE.Curve.Utils = {
tangentQuadraticBezier: function (t, p0, p1, p2 ) {
return 2 * ( 1 - t ) * ( p1 - p0 ) + 2 * t * ( p2 - p1 ) ;
......
......@@ -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 reverse = THREE.FontUtils.Triangulate.area( vertices ) > 0 ;
if (reverse) {
//faces = THREE.FontUtils.Triangulate( vertices.reverse(), true );
vertices = vertices.reverse();
reverse = false;
}
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);
......@@ -50,8 +48,9 @@ THREE.ExtrudeGeometry = function( shape, options ) {
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];
vertices = vertices.concat(ahole);
}
......@@ -70,7 +69,10 @@ THREE.ExtrudeGeometry = function( shape, options ) {
var i,
vert, vlen = vertices.length,
face, flen = faces.length,
bevelPt, blen = bevelPoints.length;
cont, clen = contour.length,
hol, hlen;
var bevelPt, blen = bevelPoints.length;
// Back facing vertices
......@@ -153,69 +155,62 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
var lastV;
var tmpPt;
var j, k, l, m;
var layeroffset = 0;
// 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 ) {
if ( reverse ) {
if ( reverse ) { // Can be removed
scope.faces.push( new THREE.Face3( c, b, a ) );
......
......@@ -129,7 +129,7 @@ THREE.Path.prototype.arc = function(aX, aY, aRadius,
var curve = new THREE.ArcCurve( aX, aY, aRadius,
aStartAngle, aEndAngle, aClockwise );
this.curves.push( curve );
console.log('arc', 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 ++ ) {
// TODO use LOD for divisions
t = j / divisions;
tx = THREE.FontUtils.b2( t, cpx0, cpx1, cpx );
......@@ -295,22 +293,42 @@ THREE.Path.prototype.getPoints = function( divisions ) {
laste = this.actions[ i - 1 ].args;
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 ],
lasty = laste[ laste.length - 1 ] ;
if (laste.length==0) {
lastx = lasty = 0;
}
console.log(args, lastx, lasty);
var deltaAngle = aEndAngle - aStartAngle;
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);
ty = lasty + aY + aRadius * Math.sin(angle);
console.log('t', t, 'angle', angle, 'tx', tx, 'ty', ty);
points.push( new THREE.Vector2( tx, ty ) );
}
console.log(points);
break;
......
......@@ -27,13 +27,16 @@ THREE.Shape.prototype.extrude = function( options ) {
};
/* Return array of holes' getPoints() */
THREE.Shape.prototype.getHoles = function() {
var holesPts = [];
var i=0, il= this.holes.length;
for (; i<il; i++ ) {
holesPts[i] = this.holes[i].getSpacedPoints();
holesPts[i] = this.holes[i].getSpacedPoints(); //getSpacedPoints getPoints
}
return holesPts;
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册