|
@@ -155,7 +155,8 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) {
|
|
}
|
|
}
|
|
|
|
|
|
function scalePt2 (pt, vec, size ) {
|
|
function scalePt2 (pt, vec, size ) {
|
|
- return vec.clone().multiplyScalar( size ).addSelf( pt );
|
|
|
|
|
|
+ //return vec.clone().multiplyScalar( size ).addSelf( pt );
|
|
|
|
+ return pt.clone().addSelf(vec.clone().multiplyScalar( size ));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -175,38 +176,74 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) {
|
|
var RAD_TO_DEGREES = 180 / Math.PI;
|
|
var RAD_TO_DEGREES = 180 / Math.PI;
|
|
|
|
|
|
|
|
|
|
- function getBevelVec(u, v /*Vector2*/) {
|
|
|
|
- console.log(u,v);
|
|
|
|
- //u = u.normalize();
|
|
|
|
- //v = v.normalize();
|
|
|
|
- var scalar = u.dot(v);
|
|
|
|
- var product = u.length() * v.length();
|
|
|
|
- // scalar = product * cos (theta)
|
|
|
|
|
|
+ function getBevelVec(pt_i, pt_j, pt_k) {
|
|
|
|
+ var anglea = Math.atan2(pt_j.y - pt_i.y, pt_j.x - pt_i.x);
|
|
|
|
+ var angleb = Math.atan2(pt_k.y - pt_i.y, pt_k.x - pt_i.x);
|
|
|
|
+ //var anglea = Math.atan2(pt_i.y - pt_j.y, pt_i.x - pt_j.x);
|
|
|
|
+ //var angleb = Math.atan2(pt_i.y - pt_k.y, pt_i.x - pt_k.x);
|
|
|
|
+ //if (anglea < 0 ) anglea += Math.PI * 2;
|
|
|
|
+ /*
|
|
|
|
+ if (angleb <= 0 ) {
|
|
|
|
+ angleb += Math.PI * 2;
|
|
|
|
+ console.log('ping');
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ x = Math.cos(anglea) + Math.cos(angleb);
|
|
|
|
+ y = Math.sin(anglea) + Math.sin(angleb);
|
|
|
|
+ anglec = Math.atan2(y,x);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ console.log('angle1', anglea * RAD_TO_DEGREES,'angle2', angleb * RAD_TO_DEGREES, 'anglec', anglec *RAD_TO_DEGREES);
|
|
|
|
|
|
- var theta = Math.acos( scalar / product );
|
|
|
|
|
|
+ /*
|
|
|
|
+ x = bevelSize * Math.cos(anglec);
|
|
|
|
+ y = bevelSize * Math.sin(anglec);
|
|
|
|
|
|
- console.log('theta', theta * RAD_TO_DEGREES);
|
|
|
|
|
|
+ var vec = new THREE.Vector2(x,y).divideScalar(bevelSize);
|
|
|
|
+ */
|
|
|
|
|
|
- var angle = Math.PI *2 - theta / 2;
|
|
|
|
- angle /= 2;
|
|
|
|
|
|
+ var x = Math.cos(anglec);
|
|
|
|
+ var y = Math.sin(anglec);
|
|
|
|
|
|
- var uw = u.length() * bevelSize * Math.cos(angle);
|
|
|
|
- var wv = bevelSize * v.length() * Math.cos(angle);
|
|
|
|
- // ax + by = c
|
|
|
|
- // dx + ey = d
|
|
|
|
|
|
+ // Check quadrants?
|
|
|
|
+ console.log(x,y,'x,y');
|
|
|
|
|
|
- console.log('uw', uw, 'wv', wv);
|
|
|
|
|
|
+ /*
|
|
|
|
+ var quad1 = Math.PI/2;
|
|
|
|
+ var quad2 = Math.PI;
|
|
|
|
+ var quad3 = Math.PI * 3/2
|
|
|
|
+ var quad4 = Math.PI * 2
|
|
|
|
|
|
- var a = u.x, b = u.y, c = uw,
|
|
|
|
- d = v.x, e = v.y, f = wv;
|
|
|
|
|
|
+ anglec %= quad4;
|
|
|
|
+ if (anglec < 0 ) anglec += quad4;
|
|
|
|
+ console.log('>0', anglec * RAD_TO_DEGREES);
|
|
|
|
+
|
|
|
|
+ if (anglec < quad1) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } else
|
|
|
|
+ if (anglec < quad2) {
|
|
|
|
+ x = -x;
|
|
|
|
+
|
|
|
|
+ } else if (anglec < quad3) {
|
|
|
|
+ y = -y;
|
|
|
|
+ x = -x;
|
|
|
|
+ } else if (anglec < quad4) {
|
|
|
|
+
|
|
|
|
+ y = -y;
|
|
|
|
+ } else {
|
|
|
|
+ console.log("die");
|
|
|
|
|
|
- var y = (f - c) / (e - b);
|
|
|
|
- var x = (f - c) / (d - a);
|
|
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
|
|
|
|
+ var vec = new THREE.Vector2(x,y);
|
|
|
|
|
|
- var vec3 = new THREE.Vector2(x, y).normalize();
|
|
|
|
- console.log('xy', x, y, vec3);
|
|
|
|
- return vec3;
|
|
|
|
|
|
+ console.log('xy', x, y, vec, pt_i.x +x , pt_i.y + y);
|
|
|
|
+ return vec;
|
|
}
|
|
}
|
|
|
|
|
|
var contourMovements = [];
|
|
var contourMovements = [];
|
|
@@ -217,33 +254,13 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) {
|
|
|
|
|
|
// (j)---(i)---(k)
|
|
// (j)---(i)---(k)
|
|
console.log('i,j,k', i, j , k)
|
|
console.log('i,j,k', i, j , k)
|
|
- var v1 = contour[ j ].clone().subSelf(contour[ i ]); //.normalize();
|
|
|
|
- var v2 = contour[ k ].clone().subSelf(contour[ i ]); //.normalize();
|
|
|
|
-
|
|
|
|
- //var v1 = contour[ i ].clone().subSelf(contour[ j ]);
|
|
|
|
- //var v2 = contour[ k ].clone().subSelf(contour[ i ]);
|
|
|
|
|
|
+
|
|
|
|
|
|
var pt_i = contour[ i ];
|
|
var pt_i = contour[ i ];
|
|
var pt_j = contour[ j ];
|
|
var pt_j = contour[ j ];
|
|
var pt_k = contour[ k ];
|
|
var pt_k = contour[ k ];
|
|
|
|
|
|
- console.log(pt_i, pt_j, pt_k);
|
|
|
|
-
|
|
|
|
- var anglea = Math.atan2(pt_i.y - pt_j.y, pt_i.x - pt_j.x);
|
|
|
|
- //var angleb = Math.atan2(pt_k.y - pt_i.y, pt_k.x - pt_i.x);
|
|
|
|
- var angleb = Math.atan2(pt_i.y - pt_k.y, pt_i.x - pt_k.x);
|
|
|
|
-
|
|
|
|
- var anglec = (angleb - anglea ) / 2 + anglea;
|
|
|
|
-
|
|
|
|
- console.log('angle1', anglea * RAD_TO_DEGREES,'angle2', angleb * RAD_TO_DEGREES, 'anglec', anglec *RAD_TO_DEGREES);
|
|
|
|
-
|
|
|
|
- x = -bevelSize * Math.cos(anglec);
|
|
|
|
- y = -bevelSize * Math.sin(anglec);
|
|
|
|
-
|
|
|
|
- contourMovements[i]= new THREE.Vector2(x,y).normalize();
|
|
|
|
- console.log('xy', x, y, contourMovements[i], pt_i.x +x , pt_i.y + y);
|
|
|
|
-
|
|
|
|
- //contourMovements[i]= getBevelVec(v1, v2);
|
|
|
|
|
|
+ contourMovements[i]= getBevelVec(contour[ i ], contour[ j ], contour[ k ] );
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -262,10 +279,7 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) {
|
|
|
|
|
|
// (j)---(i)---(k)
|
|
// (j)---(i)---(k)
|
|
|
|
|
|
- var v1 = ahole[ i ].clone().subSelf(ahole[ j ]);
|
|
|
|
- var v2 = ahole[ k ].clone().subSelf(ahole[ i ]);
|
|
|
|
-
|
|
|
|
- oneHoleMovements[i]= getBevelVec(v1, v2);
|
|
|
|
|
|
+ oneHoleMovements[i]= getBevelVec(ahole[ i ], ahole[ j ], ahole[ k ] );
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|