|
@@ -316,90 +316,6 @@ THREE.Shape.Utils = {
|
|
|
|
|
|
},
|
|
|
|
|
|
- triangulateShape_OLD: function ( contour, holes ) {
|
|
|
-
|
|
|
- var shapeWithoutHoles = THREE.Shape.Utils.removeHoles( contour, holes );
|
|
|
-
|
|
|
- var shape = shapeWithoutHoles.shape,
|
|
|
- allpoints = shapeWithoutHoles.allpoints,
|
|
|
- isolatedPts = shapeWithoutHoles.isolatedPts;
|
|
|
-
|
|
|
- var triangles = THREE.FontUtils.Triangulate( shape, false ); // True returns indices for points of spooled shape
|
|
|
-
|
|
|
- // To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first.
|
|
|
-
|
|
|
- //console.log( "triangles",triangles, triangles.length );
|
|
|
- //console.log( "allpoints",allpoints, allpoints.length );
|
|
|
-
|
|
|
- var i, il, f, face,
|
|
|
- key, index,
|
|
|
- allPointsMap = {},
|
|
|
- isolatedPointsMap = {};
|
|
|
-
|
|
|
- // prepare all points map
|
|
|
-
|
|
|
- for ( i = 0, il = allpoints.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- key = allpoints[ i ].x + ":" + allpoints[ i ].y;
|
|
|
-
|
|
|
- if ( allPointsMap[ key ] !== undefined ) {
|
|
|
-
|
|
|
- console.log( "Duplicate point", key );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- allPointsMap[ key ] = i;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // check all face vertices against all points map
|
|
|
-
|
|
|
- for ( i = 0, il = triangles.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- face = triangles[ i ];
|
|
|
-
|
|
|
- for ( f = 0; f < 3; f ++ ) {
|
|
|
-
|
|
|
- key = face[ f ].x + ":" + face[ f ].y;
|
|
|
-
|
|
|
- index = allPointsMap[ key ];
|
|
|
-
|
|
|
- if ( index !== undefined ) {
|
|
|
-
|
|
|
- face[ f ] = index;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // check isolated points vertices against all points map
|
|
|
-
|
|
|
- for ( i = 0, il = isolatedPts.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- face = isolatedPts[ i ];
|
|
|
-
|
|
|
- for ( f = 0; f < 3; f ++ ) {
|
|
|
-
|
|
|
- key = face[ f ].x + ":" + face[ f ].y;
|
|
|
-
|
|
|
- index = allPointsMap[ key ];
|
|
|
-
|
|
|
- if ( index !== undefined ) {
|
|
|
-
|
|
|
- face[ f ] = index;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return triangles.concat( isolatedPts );
|
|
|
-
|
|
|
- }, // end triangulate shapes
|
|
|
-
|
|
|
/*
|
|
|
* Modified Triangulation.
|
|
|
*
|
|
@@ -766,64 +682,7 @@ THREE.Shape.Utils = {
|
|
|
|
|
|
return triangles.concat();
|
|
|
|
|
|
- }, // end triangulate shapes
|
|
|
-
|
|
|
- /*
|
|
|
- triangulate2 : function( pts, holes ) {
|
|
|
-
|
|
|
- // For use with Poly2Tri.js
|
|
|
-
|
|
|
- var allpts = pts.concat();
|
|
|
- var shape = [];
|
|
|
- for (var p in pts) {
|
|
|
- shape.push(new js.poly2tri.Point(pts[p].x, pts[p].y));
|
|
|
- }
|
|
|
-
|
|
|
- var swctx = new js.poly2tri.SweepContext(shape);
|
|
|
-
|
|
|
- for (var h in holes) {
|
|
|
- var aHole = holes[h];
|
|
|
- var newHole = []
|
|
|
- for (i in aHole) {
|
|
|
- newHole.push(new js.poly2tri.Point(aHole[i].x, aHole[i].y));
|
|
|
- allpts.push(aHole[i]);
|
|
|
- }
|
|
|
- swctx.AddHole(newHole);
|
|
|
- }
|
|
|
-
|
|
|
- var find;
|
|
|
- var findIndexForPt = function (pt) {
|
|
|
- find = new THREE.Vector2(pt.x, pt.y);
|
|
|
- var p;
|
|
|
- for (p=0, pl = allpts.length; p<pl; p++) {
|
|
|
- if (allpts[p].equals(find)) return p;
|
|
|
- }
|
|
|
- return -1;
|
|
|
- };
|
|
|
-
|
|
|
- // triangulate
|
|
|
- js.poly2tri.sweep.Triangulate(swctx);
|
|
|
-
|
|
|
- var triangles = swctx.GetTriangles();
|
|
|
- var tr ;
|
|
|
- var facesPts = [];
|
|
|
- for (var t in triangles) {
|
|
|
- tr = triangles[t];
|
|
|
- facesPts.push([
|
|
|
- findIndexForPt(tr.GetPoint(0)),
|
|
|
- findIndexForPt(tr.GetPoint(1)),
|
|
|
- findIndexForPt(tr.GetPoint(2))
|
|
|
- ]);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // console.log(facesPts);
|
|
|
- // console.log("triangles", triangles.length, triangles);
|
|
|
-
|
|
|
- // Returns array of faces with 3 element each
|
|
|
- return facesPts;
|
|
|
},
|
|
|
-*/
|
|
|
|
|
|
isClockWise: function ( pts ) {
|
|
|
|