2017-07-20 11:51:48 +02:00
|
|
|
import Shape from 'clipper-js';
|
2017-07-19 11:02:42 +02:00
|
|
|
import Slice from './helpers/Slice.js';
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2017-05-13 15:26:46 +02:00
|
|
|
import { CLEAN_DELTA, PRECISION } from '../constants.js';
|
|
|
|
|
|
|
|
const cleanDelta = CLEAN_DELTA / PRECISION;
|
2016-04-23 00:24:01 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
export default function shapesToSlices(shapes, settings) {
|
2016-04-21 22:14:22 +02:00
|
|
|
const sliceLayers = [];
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2016-04-23 00:24:01 +02:00
|
|
|
for (let layer = 0; layer < shapes.length; layer ++) {
|
2017-07-28 15:02:24 +02:00
|
|
|
let { fillShapes, lineShapesOpen, lineShapesClosed } = shapes[layer];
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2017-07-28 15:02:24 +02:00
|
|
|
fillShapes = new Shape(fillShapes, true, true, true, true)
|
2016-04-21 22:14:22 +02:00
|
|
|
.fixOrientation()
|
2017-05-12 13:44:55 +02:00
|
|
|
.simplify('pftNonZero')
|
2017-05-13 15:26:46 +02:00
|
|
|
.clean(cleanDelta)
|
2016-04-21 22:14:22 +02:00
|
|
|
.seperateShapes();
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2017-07-28 15:02:24 +02:00
|
|
|
lineShapesClosed = new Shape(lineShapesClosed, true, true, true, true)
|
|
|
|
.clean(cleanDelta);
|
|
|
|
|
2017-09-13 11:43:51 +02:00
|
|
|
lineShapesOpen = new Shape(lineShapesOpen, false, true, true, true)
|
|
|
|
.clean(cleanDelta);
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2016-04-23 00:24:01 +02:00
|
|
|
const slice = new Slice();
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2017-07-28 15:02:24 +02:00
|
|
|
for (let i = 0; i < fillShapes.length; i ++) {
|
|
|
|
const fillShape = fillShapes[i];
|
|
|
|
slice.add(fillShape, true);
|
2016-03-29 00:26:58 +02:00
|
|
|
|
2017-07-28 15:02:24 +02:00
|
|
|
// if (lineShapesClosed.paths.length > 0) {
|
|
|
|
// lineShapesClosed = lineShapesClosed.difference(closedShape);
|
|
|
|
// }
|
|
|
|
// if (lineShapesOpen.paths.length > 0) {
|
|
|
|
// lineShapesOpen = lineShapesOpen.difference(closedShape);
|
2016-04-21 22:14:22 +02:00
|
|
|
// }
|
2016-03-29 00:26:58 +02:00
|
|
|
}
|
2016-04-23 00:24:01 +02:00
|
|
|
|
2017-07-28 15:02:24 +02:00
|
|
|
if (lineShapesClosed.paths.length > 0) {
|
|
|
|
slice.add(lineShapesClosed, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lineShapesOpen.paths.length > 0) {
|
|
|
|
slice.add(lineShapesOpen, false);
|
2016-03-29 00:26:58 +02:00
|
|
|
}
|
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
sliceLayers.push(slice);
|
2016-03-29 00:26:58 +02:00
|
|
|
}
|
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
return sliceLayers;
|
2016-03-29 00:26:58 +02:00
|
|
|
}
|