From 8e45881a4528852e5c34b3c10b658db63cdafd7b Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 19 Jul 2017 17:33:55 +0200 Subject: [PATCH] pre calculate outer lines --- src/sliceActions/generateInfills.js | 4 ++-- src/sliceActions/generateOutlines.js | 12 ++++++++++++ src/sliceActions/generateSupport.js | 4 ++-- src/sliceActions/helpers/Slice.js | 6 ------ src/sliceActions/slice.js | 3 +++ 5 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 src/sliceActions/generateOutlines.js diff --git a/src/sliceActions/generateInfills.js b/src/sliceActions/generateInfills.js index f9ec418..e959475 100644 --- a/src/sliceActions/generateInfills.js +++ b/src/sliceActions/generateInfills.js @@ -26,8 +26,8 @@ export default function generateInfills(slices, settings) { let surroundingLayer; if (layer - bottomSkinCount >= 0 && layer + topSkinCount < slices.length) { - const downSkin = slices[layer - bottomSkinCount].getOutline(); - const upSkin = slices[layer + topSkinCount].getOutline(); + const downSkin = slices[layer - bottomSkinCount].outline; + const upSkin = slices[layer + topSkinCount].outline; surroundingLayer = upSkin.intersect(downSkin); } diff --git a/src/sliceActions/generateOutlines.js b/src/sliceActions/generateOutlines.js new file mode 100644 index 0000000..d98ccdf --- /dev/null +++ b/src/sliceActions/generateOutlines.js @@ -0,0 +1,12 @@ +import Shape from 'Doodle3D/clipper-js'; + +export default function calculateOutlines(slices, settings) { + for (let layer = 0; layer < slices.length; layer ++) { + const slice = slices[layer]; + + slice.outline = slice.parts.reduce((shape, part) => { + if (part.outerLine) shape.join(part.outerLine); + return shape; + }, new Shape([], true)); + } +} diff --git a/src/sliceActions/generateSupport.js b/src/sliceActions/generateSupport.js index 6996450..d8d2e37 100644 --- a/src/sliceActions/generateSupport.js +++ b/src/sliceActions/generateSupport.js @@ -30,7 +30,7 @@ export default function generateSupport(slices, settings) { if (supportAreas.length > 0) { if (layer >= supportDistanceLayers) { - var sliceSkin = slices[layer - supportDistanceLayers].getOutline(); + var sliceSkin = slices[layer - supportDistanceLayers].outline; sliceSkin = sliceSkin; var supportAreasSlimmed = supportAreas.difference(sliceSkin.offset(supportMargin)); @@ -52,7 +52,7 @@ export default function generateSupport(slices, settings) { } } - var supportSkin = slices[layer + supportDistanceLayers - 1].getOutline(); + var supportSkin = slices[layer + supportDistanceLayers - 1].outline; var slice = slices[layer + supportDistanceLayers]; for (var i = 0; i < slice.parts.length; i ++) { diff --git a/src/sliceActions/helpers/Slice.js b/src/sliceActions/helpers/Slice.js index c9a1ea3..4e1002e 100644 --- a/src/sliceActions/helpers/Slice.js +++ b/src/sliceActions/helpers/Slice.js @@ -4,12 +4,6 @@ export default class { constructor() { this.parts = []; } - getOutline() { - return this.parts.reduce((shape, part) => { - if (part.outerLine) shape.join(part.outerLine); - return shape; - }, new Shape([], true)); - } add(shape) { const part = { shape }; diff --git a/src/sliceActions/slice.js b/src/sliceActions/slice.js index 2042875..d34d7c2 100644 --- a/src/sliceActions/slice.js +++ b/src/sliceActions/slice.js @@ -2,6 +2,7 @@ import calculateLayersIntersections from './calculateLayersIntersections.js'; import createLines from './createLines.js'; import generateInfills from './generateInfills.js'; import generateInnerLines from './generateInnerLines.js'; +import generateOutlines from './generateOutlines.js'; import generateSupport from './generateSupport.js'; import intersectionsToShapes from './intersectionsToShapes.js'; import addBrim from './addBrim.js'; @@ -45,6 +46,8 @@ export default function(geometry, settings, onProgress) { updateProgress('Generating inner lines'); generateInnerLines(slices, settings); + updateProgress('Generating out lines'); + generateOutlines(slices, settings); updateProgress('Generating infills'); generateInfills(slices, settings); updateProgress('Generating support');