提交 d2f632e9 编写于 作者: J Juergen Ahting

THREE.Path.prototype.toShapes: 1) Bugfix: if all subpaths have the same wrong...

THREE.Path.prototype.toShapes: 1) Bugfix: if all subpaths have the same wrong winding order; 2) new optional parameter: noHoles
上级 65e03988
......@@ -436,9 +436,80 @@ THREE.Path.prototype.getPoints = function( divisions, closedPath ) {
};
//
// Breaks path into shapes
//
// Assumptions (if parameter isCCW==true the opposite holds):
// - solid shapes are defined clockwise (CW)
// - holes are defined counterclockwise (CCW)
//
// If parameter noHoles==true:
// - all subPaths are regarded as solid shapes
// - definition order CW/CCW has no relevance
//
THREE.Path.prototype.toShapes = function( isCCW ) {
THREE.Path.prototype.toShapes = function( isCCW, noHoles ) {
function extractSubpaths( inActions ) {
var i, il, item, action, args;
var subPaths = [], lastPath = new THREE.Path();
for ( i = 0, il = inActions.length; i < il; i ++ ) {
item = inActions[ i ];
args = item.args;
action = item.action;
if ( action == THREE.PathActions.MOVE_TO ) {
if ( lastPath.actions.length != 0 ) {
subPaths.push( lastPath );
lastPath = new THREE.Path();
}
}
lastPath[ action ].apply( lastPath, args );
}
if ( lastPath.actions.length != 0 ) {
subPaths.push( lastPath );
}
// console.log(subPaths);
return subPaths;
}
function toShapesNoHoles( inSubpaths ) {
var i, il;
var tmpPath, tmpShape;
var shapes = [];
for ( i = 0, il = inSubpaths.length; i < il; i ++ ) {
tmpPath = inSubpaths[ i ];
tmpShape = new THREE.Shape();
tmpShape.actions = tmpPath.actions;
tmpShape.curves = tmpPath.curves;
shapes.push( tmpShape );
}
//console.log("shape", shapes);
return shapes;
};
function isPointInsidePolygon( inPt, inPolygon ) {
var EPSILON = 0.0000000001;
......@@ -485,41 +556,12 @@ THREE.Path.prototype.toShapes = function( isCCW ) {
return inside;
}
var i, il, item, action, args;
var subPaths = [], lastPath = new THREE.Path();
for ( i = 0, il = this.actions.length; i < il; i ++ ) {
item = this.actions[ i ];
args = item.args;
action = item.action;
if ( action == THREE.PathActions.MOVE_TO ) {
if ( lastPath.actions.length != 0 ) {
subPaths.push( lastPath );
lastPath = new THREE.Path();
}
}
lastPath[ action ].apply( lastPath, args );
}
if ( lastPath.actions.length != 0 ) {
subPaths.push( lastPath );
}
var subPaths = extractSubpaths( this.actions );
if ( subPaths.length == 0 ) return [];
// console.log(subPaths);
if ( noHoles ) return toShapesNoHoles( subPaths );
if ( subPaths.length == 0 ) return [];
var solid, tmpPath, tmpShape, shapes = [];
......@@ -548,6 +590,8 @@ THREE.Path.prototype.toShapes = function( isCCW ) {
newShapes[mainIdx] = undefined;
newShapeHoles[mainIdx] = [];
var i, il;
for ( i = 0, il = subPaths.length; i < il; i ++ ) {
tmpPath = subPaths[ i ];
......@@ -578,6 +622,10 @@ THREE.Path.prototype.toShapes = function( isCCW ) {
}
// only Holes? -> probably all Shapes with wrong orientation
if ( !newShapes[0] ) return toShapesNoHoles( subPaths );
if ( newShapes.length > 1 ) {
var ambigious = false;
var toChange = [];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册