From d8e95e3e76d2187c2603d9e5fce9c944da1a0328 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Sat, 13 May 2017 14:48:48 +0200 Subject: [PATCH] replace tabs with spaces --- README.md | 6 +- example/SlicerViewer.js | 72 ++++---- example/app.js | 36 ++-- example/generateRawData.js | 52 +++--- example/index.html | 34 ++-- example/main.css | 14 +- src/GCode.js | 264 ++++++++++++++--------------- src/Settings.js | 90 +++++----- src/Slice.js | 44 ++--- src/Slicer.js | 92 +++++----- src/settings/printer_settings.json | 72 ++++---- src/settings/user_settings.json | 90 +++++----- src/sliceActions/optimizePaths.js | 90 +++++----- 13 files changed, 478 insertions(+), 478 deletions(-) diff --git a/README.md b/README.md index df113ea..3957352 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ import THREE from 'three.js'; import * as SLICER from 'doodle3d-slicer'; const settings = new SLICER.Settings({ - ...SLICER.printerSettings['ultimaker2go'], - ...SLICER.userSettings + ...SLICER.printerSettings['ultimaker2go'], + ...SLICER.userSettings }); const geometry = new THREE.TorusGeometry(20, 10, 30, 30); @@ -17,6 +17,6 @@ const slicer = new SLICER.Slicer(); slicer.setGeometry(geometry); slicer.slice(settings, false).then(gcode => { - document.getElementById('gcode').innerHTML = gcode.replace(/(?:\r\n|\r|\n)/g, '
'); + document.getElementById('gcode').innerHTML = gcode.replace(/(?:\r\n|\r|\n)/g, '
'); }); ``` diff --git a/example/SlicerViewer.js b/example/SlicerViewer.js index d82fc44..c678e60 100644 --- a/example/SlicerViewer.js +++ b/example/SlicerViewer.js @@ -1,45 +1,45 @@ import React from 'react'; export default class SlicerViewer extends React.Component { - state = { - slice: 0 - }; + state = { + slice: 0 + }; - changeSlider = (event) => { - this.setState({ - ...this.state, - slice: parseInt(event.target.value) - }); - }; + changeSlider = (event) => { + this.setState({ + ...this.state, + slice: parseInt(event.target.value) + }); + }; - render() { - const { slice } = this.state; - const { layerIntersectionPoints, settings, layerShapes } = this.props; + render() { + const { slice } = this.state; + const { layerIntersectionPoints, settings, layerShapes } = this.props; - const numLayers = settings.dimensionsZ / settings.layerHeight; + const numLayers = settings.dimensionsZ / settings.layerHeight; - const intersectionPoints = layerIntersectionPoints[slice + 1]; - const shape = layerShapes[slice]; + const intersectionPoints = layerIntersectionPoints[slice + 1]; + const shape = layerShapes[slice]; - return ( -
- - - {intersectionPoints.map(({ x, y }, i) => )} - {shape && shape.closedShapes.map((closedShape, i) => ( - `${x} ${y}`).join(' ')} - fill="rgba(255, 0, 0, 0.5)" - /> - ))} - - -
- ); - } + return ( +
+ + + {intersectionPoints.map(({ x, y }, i) => )} + {shape && shape.closedShapes.map((closedShape, i) => ( + `${x} ${y}`).join(' ')} + fill="rgba(255, 0, 0, 0.5)" + /> + ))} + + +
+ ); + } } diff --git a/example/app.js b/example/app.js index 0c36939..c008881 100644 --- a/example/app.js +++ b/example/app.js @@ -7,27 +7,27 @@ import generateRawData from './generateRawData.js'; import SlicerViewer from './SlicerViewer.js'; const settings = new SLICER.Settings({ - ...SLICER.printerSettings['ultimaker2go'], - ...SLICER.userSettings + ...SLICER.printerSettings['ultimaker2go'], + ...SLICER.userSettings }); const stlLoader = new THREE.STLLoader(); stlLoader.load('stl/Airplane.stl', (geometry) => { - geometry.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI / -2)); - geometry.applyMatrix(new THREE.Matrix4().setPosition(new THREE.Vector3(50, -0.1, 50))); - // geometry.applyMatrix(new THREE.Matrix4().scale(0.8)); - geometry.mergeVertices(); - geometry.computeFaceNormals(); + geometry.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI / -2)); + geometry.applyMatrix(new THREE.Matrix4().setPosition(new THREE.Vector3(50, -0.1, 50))); + // geometry.applyMatrix(new THREE.Matrix4().scale(0.8)); + geometry.mergeVertices(); + geometry.computeFaceNormals(); - const rawData = generateRawData(geometry, settings); + const rawData = generateRawData(geometry, settings); - render(, document.getElementById('container')); + render(, document.getElementById('container')); }); // const geometry = new THREE.TorusGeometry(20, 10, 30, 30).clone(); @@ -38,8 +38,8 @@ stlLoader.load('stl/Airplane.stl', (geometry) => { // const rawData = generateRawData(geometry, settings); // // render(, document.getElementById('container')); diff --git a/example/generateRawData.js b/example/generateRawData.js index 333a15a..2530094 100644 --- a/example/generateRawData.js +++ b/example/generateRawData.js @@ -12,43 +12,43 @@ import applyPrecision from 'src/sliceActions/applyPrecision.js'; import removePrecision from 'src/sliceActions/removePrecision.js'; export default function generateRawData(geometry, settings) { - const rawData = {}; + const rawData = {}; - const lines = createLines(geometry, settings); + const lines = createLines(geometry, settings); - const { - layerIntersectionIndexes, - layerIntersectionPoints - } = calculateLayersIntersections(lines, settings); + const { + layerIntersectionIndexes, + layerIntersectionPoints + } = calculateLayersIntersections(lines, settings); - rawData.layerIntersectionPoints = layerIntersectionPoints - .map(intersectionPoints => intersectionPoints.map(intersectionPoint => intersectionPoint.clone())); + rawData.layerIntersectionPoints = layerIntersectionPoints + .map(intersectionPoints => intersectionPoints.map(intersectionPoint => intersectionPoint.clone())); - const layerShapes = intersectionsToShapes(layerIntersectionIndexes, layerIntersectionPoints, lines, settings); + const layerShapes = intersectionsToShapes(layerIntersectionIndexes, layerIntersectionPoints, lines, settings); - rawData.layerShapes = layerShapes - .map(({ closedShapes, openShapes }) => ({ - closedShapes: closedShapes.map(closedShape => closedShape.map(vector => vector.clone())), - openShapes: openShapes.map(openShape => openShape.map(vector => vector.clone())) - })); + rawData.layerShapes = layerShapes + .map(({ closedShapes, openShapes }) => ({ + closedShapes: closedShapes.map(closedShape => closedShape.map(vector => vector.clone())), + openShapes: openShapes.map(openShape => openShape.map(vector => vector.clone())) + })); - applyPrecision(layerShapes); + applyPrecision(layerShapes); - const slices = shapesToSlices(layerShapes, settings); + const slices = shapesToSlices(layerShapes, settings); - generateInnerLines(slices, settings); - generateInfills(slices, settings); - generateSupport(slices, settings); - addBrim(slices, settings); - optimizePaths(slices, settings); - removePrecision(slices); + generateInnerLines(slices, settings); + generateInfills(slices, settings); + generateSupport(slices, settings); + addBrim(slices, settings); + optimizePaths(slices, settings); + removePrecision(slices); - rawData.slices = slices; + rawData.slices = slices; - const gcode = slicesToGCode(slices, settings); + const gcode = slicesToGCode(slices, settings); - rawData.gcode = gcode; + rawData.gcode = gcode; - return rawData; + return rawData; } diff --git a/example/index.html b/example/index.html index 1d01f2c..ffecf60 100644 --- a/example/index.html +++ b/example/index.html @@ -1,29 +1,29 @@ - + - Doodle3D Slicer + Doodle3D Slicer - + - - + + - + - + - + - + -
+
- + diff --git a/example/main.css b/example/main.css index 03cce6d..1e8fb3e 100644 --- a/example/main.css +++ b/example/main.css @@ -1,21 +1,21 @@ * { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } #container { - position: relative; + position: relative; } #container, svg { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } svg, input { - position: absolute; + position: absolute; } input { - width: 100%; + width: 100%; } diff --git a/src/GCode.js b/src/GCode.js index 5f21bb6..636854c 100644 --- a/src/GCode.js +++ b/src/GCode.js @@ -10,178 +10,178 @@ const POSITION_Y = 'Y'; const POSITION_Z = 'Z'; export default class { - constructor(settings) { - this.gcode = ''; - this.current = {}; + constructor(settings) { + this.gcode = ''; + this.current = {}; - this.extruder = 0.0; - this.bottom = true; - this.isRetracted = false; - this.isFanOn = false; - this._nozzlePosition = new THREE.Vector2(0, 0); + this.extruder = 0.0; + this.bottom = true; + this.isRetracted = false; + this.isFanOn = false; + this._nozzlePosition = new THREE.Vector2(0, 0); - if (settings !== undefined) { - this.setSettings(settings); - } - } + if (settings !== undefined) { + this.setSettings(settings); + } + } - _addGCode(command) { - let str = ''; - let first = true; + _addGCode(command) { + let str = ''; + let first = true; - for (const action in command) { - const value = command[action]; - const currentValue = this.current[action]; - if (first) { - str = action + value; + for (const action in command) { + const value = command[action]; + const currentValue = this.current[action]; + if (first) { + str = action + value; - first = false; - } else if (currentValue !== value) { - str += ` ${action}${value}`; + first = false; + } else if (currentValue !== value) { + str += ` ${action}${value}`; - this.current[action] = value; - } - } + this.current[action] = value; + } + } - this.gcode += `${str}\n`; - } + this.gcode += `${str}\n`; + } - setSettings(settings) { - this.settings = settings; + setSettings(settings) { + this.settings = settings; - return this; - } + return this; + } - turnFanOn(fanSpeed) { - this.isFanOn = true; + turnFanOn(fanSpeed) { + this.isFanOn = true; - const gcode = { [M_COMMAND]: 106 } - if (fanSpeed !== undefined) gcode[FAN_SPEED] = fanSpeed; + const gcode = { [M_COMMAND]: 106 } + if (fanSpeed !== undefined) gcode[FAN_SPEED] = fanSpeed; - this._addGCode(gcode); + this._addGCode(gcode); - return this; - } + return this; + } - turnFanOff() { - this.isFanOn = false; + turnFanOff() { + this.isFanOn = false; - this._addGCode({ [M_COMMAND]: 107 }); + this._addGCode({ [M_COMMAND]: 107 }); - return this; - } + return this; + } - moveTo(x, y, layer) { - const { - layerHeight, - travelSpeed - } = this.settings.config; + moveTo(x, y, layer) { + const { + layerHeight, + travelSpeed + } = this.settings.config; - const z = (layer + 1) * layerHeight; - const speed = travelSpeed * 60; + const z = (layer + 1) * layerHeight; + const speed = travelSpeed * 60; - this._addGCode({ - [G_COMMAND]: 0, - [POSITION_X]: x.toFixed(3), - [POSITION_Y]: y.toFixed(3), - [POSITION_Z]: z.toFixed(3), - [SPEED]: speed.toFixed(3) - }); + this._addGCode({ + [G_COMMAND]: 0, + [POSITION_X]: x.toFixed(3), + [POSITION_Y]: y.toFixed(3), + [POSITION_Z]: z.toFixed(3), + [SPEED]: speed.toFixed(3) + }); - this._nozzlePosition.set(x, y); + this._nozzlePosition.set(x, y); - return this; - } + return this; + } - lineTo(x, y, layer, type) { - const newNozzlePosition = new THREE.Vector2(x, y); + lineTo(x, y, layer, type) { + const newNozzlePosition = new THREE.Vector2(x, y); - const { - layerHeight, - nozzleDiameter, - filamentThickness, - travelSpeed - } = this.settings.config; + const { + layerHeight, + nozzleDiameter, + filamentThickness, + travelSpeed + } = this.settings.config; - const profile = this.settings.config[(this.bottom ? 'bottom' : type)]; + const profile = this.settings.config[(this.bottom ? 'bottom' : type)]; - let { - speed, - flowRate - } = profile; + let { + speed, + flowRate + } = profile; - speed *= 60; - const z = (layer + 1) * layerHeight; + speed *= 60; + const z = (layer + 1) * layerHeight; - const lineLength = this._nozzlePosition.distanceTo(newNozzlePosition); + const lineLength = this._nozzlePosition.distanceTo(newNozzlePosition); - const filamentSurfaceArea = Math.pow((filamentThickness / 2), 2) * Math.PI; - this.extruder += lineLength * nozzleDiameter * layerHeight / filamentSurfaceArea * flowRate; + const filamentSurfaceArea = Math.pow((filamentThickness / 2), 2) * Math.PI; + this.extruder += lineLength * nozzleDiameter * layerHeight / filamentSurfaceArea * flowRate; - this._addGCode({ - [G_COMMAND]: 1, - [POSITION_X]: x.toFixed(3), - [POSITION_Y]: y.toFixed(3), - [POSITION_Z]: z.toFixed(3), - [SPEED]: speed.toFixed(3), - [EXTRUDER]: this.extruder.toFixed(3) - }); + this._addGCode({ + [G_COMMAND]: 1, + [POSITION_X]: x.toFixed(3), + [POSITION_Y]: y.toFixed(3), + [POSITION_Z]: z.toFixed(3), + [SPEED]: speed.toFixed(3), + [EXTRUDER]: this.extruder.toFixed(3) + }); - this._nozzlePosition.copy(newNozzlePosition); + this._nozzlePosition.copy(newNozzlePosition); - return this; - } + return this; + } - unRetract() { - const { - retractionEnabled, - retractionMinDistance, - retractionSpeed - } = this.settings.config; + unRetract() { + const { + retractionEnabled, + retractionMinDistance, + retractionSpeed + } = this.settings.config; - if (this.isRetracted && retractionEnabled) { - this.isRetracted = false; + if (this.isRetracted && retractionEnabled) { + this.isRetracted = false; - const speed = retractionSpeed * 60; + const speed = retractionSpeed * 60; - if (this.extruder > retractionMinDistance) { - this._addGCode({ - [G_COMMAND]: 0, - [EXTRUDER]: this.extruder.toFixed(3), - [SPEED]: speed.toFixed(3) - }); - } - } + if (this.extruder > retractionMinDistance) { + this._addGCode({ + [G_COMMAND]: 0, + [EXTRUDER]: this.extruder.toFixed(3), + [SPEED]: speed.toFixed(3) + }); + } + } - return this; - } + return this; + } - retract() { - const { - retractionAmount, - retractionEnabled, - retractionMinDistance, - retractionSpeed - } = this.settings.config; + retract() { + const { + retractionAmount, + retractionEnabled, + retractionMinDistance, + retractionSpeed + } = this.settings.config; - if (!this.isRetracted && retractionEnabled) { - this.isRetracted = true; + if (!this.isRetracted && retractionEnabled) { + this.isRetracted = true; - const speed = retractionSpeed * 60; + const speed = retractionSpeed * 60; - if (this.extruder > retractionMinDistance && retractionEnabled) { - this._addGCode({ - [G_COMMAND]: 0, - [EXTRUDER]: (this.extruder - retractionAmount).toFixed(3), - [SPEED]: speed.toFixed(3) - }); - } - } + if (this.extruder > retractionMinDistance && retractionEnabled) { + this._addGCode({ + [G_COMMAND]: 0, + [EXTRUDER]: (this.extruder - retractionAmount).toFixed(3), + [SPEED]: speed.toFixed(3) + }); + } + } - return this; - } + return this; + } - getGCode() { - return this.settings.startCode() + this.gcode + this.settings.endCode(); - } + getGCode() { + return this.settings.startCode() + this.gcode + this.settings.endCode(); + } } diff --git a/src/Settings.js b/src/Settings.js index 33fc821..1f55b6b 100644 --- a/src/Settings.js +++ b/src/Settings.js @@ -1,53 +1,53 @@ export default class { - constructor(config = {}) { - this.config = config; - } - updateConfig(config) { - this.config = { ...this.config, ...config }; + constructor(config = {}) { + this.config = config; + } + updateConfig(config) { + this.config = { ...this.config, ...config }; - return this; - } - startCode() { - const { startCode } = this.config; - const gcode = this._subsituteVariables(startCode); - return gcode; - } - endCode() { - const { endCode } = this.config; - const gcode = this._subsituteVariables(endCode); - return gcode; - } - _subsituteVariables(gcode) { - let { - temperature, - bedTemperature, - heatTemperature, - heatBedTemperature, - travelSpeed, - printerType, - heatedbed - } = this.config; + return this; + } + startCode() { + const { startCode } = this.config; + const gcode = this._subsituteVariables(startCode); + return gcode; + } + endCode() { + const { endCode } = this.config; + const gcode = this._subsituteVariables(endCode); + return gcode; + } + _subsituteVariables(gcode) { + let { + temperature, + bedTemperature, + heatTemperature, + heatBedTemperature, + travelSpeed, + printerType, + heatedbed + } = this.config; - travelSpeed *= 60; + travelSpeed *= 60; - switch (printerType) { - case 'makerbot_replicator2': printerType = 'r2'; break; - case 'makerbot_replicator2x': printerType = 'r2x'; break; - case 'makerbot_thingomatic': printerType = 't6'; break; - case 'makerbot_generic': printerType = 'r2'; break; - case '_3Dison_plus': printerType = 'r2'; break; - } + switch (printerType) { + case 'makerbot_replicator2': printerType = 'r2'; break; + case 'makerbot_replicator2x': printerType = 'r2x'; break; + case 'makerbot_thingomatic': printerType = 't6'; break; + case 'makerbot_generic': printerType = 'r2'; break; + case '_3Dison_plus': printerType = 'r2'; break; + } - const heatedBedReplacement = heatedbed ? '' : ';'; + const heatedBedReplacement = heatedbed ? '' : ';'; - gcode = gcode.replace(/{printingTemp}/gi, temperature); - gcode = gcode.replace(/{printingBedTemp}/gi, bedTemperature); - gcode = gcode.replace(/{preheatTemp}/gi, heatTemperature); - gcode = gcode.replace(/{preheatBedTemp}/gi, heatBedTemperature); - gcode = gcode.replace(/{printerType}/gi, printerType); - gcode = gcode.replace(/{travelSpeed}/gi, travelSpeed); - gcode = gcode.replace(/{if heatedBed}/gi, heatedBedReplacement); + gcode = gcode.replace(/{printingTemp}/gi, temperature); + gcode = gcode.replace(/{printingBedTemp}/gi, bedTemperature); + gcode = gcode.replace(/{preheatTemp}/gi, heatTemperature); + gcode = gcode.replace(/{preheatBedTemp}/gi, heatBedTemperature); + gcode = gcode.replace(/{printerType}/gi, printerType); + gcode = gcode.replace(/{travelSpeed}/gi, travelSpeed); + gcode = gcode.replace(/{if heatedBed}/gi, heatedBedReplacement); - return gcode; - } + return gcode; + } } diff --git a/src/Slice.js b/src/Slice.js index 32b75bf..c5ef883 100644 --- a/src/Slice.js +++ b/src/Slice.js @@ -1,31 +1,31 @@ import Shape from 'Doodle3D/clipper-js'; export default class { - constructor() { - this.parts = []; - } - getOutline() { - const outLines = new Shape([], true); + constructor() { + this.parts = []; + } + getOutline() { + const outLines = new Shape([], true); - for (let i = 0; i < this.parts.length; i ++) { - const part = this.parts[i]; + for (let i = 0; i < this.parts.length; i ++) { + const part = this.parts[i]; - if (part.shape.closed) { - outLines.join(this.parts[i].outerLine); - } - } + if (part.shape.closed) { + outLines.join(this.parts[i].outerLine); + } + } - return outLines; - } - add(shape) { - const part = { shape }; + return outLines; + } + add(shape) { + const part = { shape }; - if (shape.closed) { - part.innerLines = []; - part.outerLine = new Shape([], true); - part.fill = new Shape([], false); - } + if (shape.closed) { + part.innerLines = []; + part.outerLine = new Shape([], true); + part.fill = new Shape([], false); + } - this.parts.push(part); - } + this.parts.push(part); + } } diff --git a/src/Slicer.js b/src/Slicer.js index 419a12f..08106a8 100644 --- a/src/Slicer.js +++ b/src/Slicer.js @@ -3,60 +3,60 @@ import slice from './sliceActions/slice.js'; import SlicerWorker from './slicerWorker.js!worker'; export default class { - setMesh(mesh) { - mesh.updateMatrix(); + setMesh(mesh) { + mesh.updateMatrix(); - this.setGeometry(mesh.geometry, mesh.matrix); + this.setGeometry(mesh.geometry, mesh.matrix); - return this; - } - setGeometry(geometry, matrix) { - if (geometry.type === 'BufferGeometry') { - geometry = new THREE.Geometry().fromBufferGeometry(geometry); - } else if (geometry.type === 'Geometry') { - geometry = geometry.clone(); - } else { - throw new Error('Geometry is not an instance of BufferGeometry or Geometry'); - } + return this; + } + setGeometry(geometry, matrix) { + if (geometry.type === 'BufferGeometry') { + geometry = new THREE.Geometry().fromBufferGeometry(geometry); + } else if (geometry.type === 'Geometry') { + geometry = geometry.clone(); + } else { + throw new Error('Geometry is not an instance of BufferGeometry or Geometry'); + } - if (matrix) { - geometry.applyMatrix(matrix); - } + if (matrix) { + geometry.applyMatrix(matrix); + } - geometry.mergeVertices(); - geometry.computeFaceNormals(); + geometry.mergeVertices(); + geometry.computeFaceNormals(); - this.geometry = geometry; + this.geometry = geometry; - return this; - } - sliceSync(settings) { - return slice(this.geometry, settings); - } - slice(settings) { - const slicerWorker = new SlicerWorker(); + return this; + } + sliceSync(settings) { + return slice(this.geometry, settings); + } + slice(settings) { + const slicerWorker = new SlicerWorker(); - const geometry = this.geometry.toJSON(); - const { config } = settings; + const geometry = this.geometry.toJSON(); + const { config } = settings; - return new Promise((resolve, reject) => { - slicerWorker.onerror = reject; + return new Promise((resolve, reject) => { + slicerWorker.onerror = reject; - slicerWorker.addEventListener('message', (event) => { - const { message, data } = event.data; - switch (message) { - case 'SLICE': { - slicerWorker.terminate(); - resolve(data.gcode); - break; - } - } - }); + slicerWorker.addEventListener('message', (event) => { + const { message, data } = event.data; + switch (message) { + case 'SLICE': { + slicerWorker.terminate(); + resolve(data.gcode); + break; + } + } + }); - slicerWorker.postMessage({ - message: 'SLICE', - data: { geometry, config } - }); - }); - } + slicerWorker.postMessage({ + message: 'SLICE', + data: { geometry, config } + }); + }); + } } diff --git a/src/settings/printer_settings.json b/src/settings/printer_settings.json index f1e3fc6..d4e4582 100644 --- a/src/settings/printer_settings.json +++ b/src/settings/printer_settings.json @@ -1,38 +1,38 @@ { - "ultimaker": { - "dimensionsX": 200, - "dimensionsY": 200, - "dimensionsZ": 200, - "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", - "filamentThickness": 2.85, - "heatedBed": false, - "heatupEnabled": true, - "nozzleDiameter": 0.4, - "startCode": ";Generated with Doodle3D (default)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", - "type": "ultimaker" - }, - "ultimaker2": { - "dimensionsX": 223, - "dimensionsY": 223, - "dimensionsZ": 205, - "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", - "filamentThickness": 2.85, - "heatedBed": true, - "heatupEnabled": true, - "nozzleDiameter": 0.4, - "startCode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG0 X0 Y0 F{travelSpeed} ;home position is not X0 Y0\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", - "type": "ultimaker2" - }, - "ultimaker2go": { - "dimensionsX": 120, - "dimensionsY": 120, - "dimensionsZ": 115, - "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", - "filamentThickness": 2.85, - "heatedBed": false, - "heatupEnabled": true, - "nozzleDiameter": 0.4, - "startCode": ";Generated with Doodle3D (ultimaker2go)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG0 X0 Y0 F{travelSpeed} ;home position is not X0 Y0\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", - "type": "ultimaker2g0" - } + "ultimaker": { + "dimensionsX": 200, + "dimensionsY": 200, + "dimensionsZ": 200, + "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", + "filamentThickness": 2.85, + "heatedBed": false, + "heatupEnabled": true, + "nozzleDiameter": 0.4, + "startCode": ";Generated with Doodle3D (default)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG91 ;relative positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG92 E0 ;zero the extruded length again\nG1 F9000\nG90 ;absolute positioning\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", + "type": "ultimaker" + }, + "ultimaker2": { + "dimensionsX": 223, + "dimensionsY": 223, + "dimensionsZ": 205, + "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+5.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", + "filamentThickness": 2.85, + "heatedBed": true, + "heatupEnabled": true, + "nozzleDiameter": 0.4, + "startCode": ";Generated with Doodle3D (ultimaker2)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG0 X0 Y0 F{travelSpeed} ;home position is not X0 Y0\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", + "type": "ultimaker2" + }, + "ultimaker2go": { + "dimensionsX": 120, + "dimensionsY": 120, + "dimensionsZ": 115, + "endCode": "M107 ;fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 ;home the printer\nM84 ;disable axes / steppers\nG90 ;absolute positioning\nM104 S{preheatTemp}\n{if heatedBed}M140 S{preheatBedTemp}\nM117 Done ;display message (20 characters to clear whole screen)\n", + "filamentThickness": 2.85, + "heatedBed": false, + "heatupEnabled": true, + "nozzleDiameter": 0.4, + "startCode": ";Generated with Doodle3D (ultimaker2go)\nM109 S{printingTemp} ;set target temperature \n{if heatedBed}M190 S{printingBedTemp} ;set target bed temperature\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ; home to endstops\nG1 Z15 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG0 X0 Y0 F{travelSpeed} ;home position is not X0 Y0\nM117 Printing Doodle... ;display message (20 characters to clear whole screen)\n", + "type": "ultimaker2g0" + } } diff --git a/src/settings/user_settings.json b/src/settings/user_settings.json index 125341b..c6257a6 100644 --- a/src/settings/user_settings.json +++ b/src/settings/user_settings.json @@ -1,47 +1,47 @@ { - "heatupBedTemperature": 70, - "heatupTemperature": 20, - "temperature": 210.0, - "layerHeight": 0.15, - "bottomThickness": 0.4, - "topThickness": 0.8, - "shellThickness": 0.4, - "brimOffset": 4.0, - "fillGridSize": 5.0, - "infillOverlap": 0.0, - "travelSpeed": 200.0, - "retractionAmount": 3.0, - "retractionEnabled": true, - "retractionSpeed": 50.0, - "retractionMinDistance": 0.0, - "supportAcceptanceMargin": 1.5, - "supportDistanceY": 0.4, - "supportEnabled": false, - "supportGridSize": 6.0, - "supportMargin": 2.0, - "supportPlateSize": 4.0, - "outerLine": { - "flowRate": 1.0, - "speed": 40.0 - }, - "innerLine": { - "flowRate": 1.0, - "speed": 50.0 - }, - "fill": { - "flowRate": 1.0, - "speed": 50.0 - }, - "brim": { - "flowRate": 1.0, - "speed": 40.0 - }, - "support": { - "flowRate": 0.8, - "speed": 40.0 - }, - "bottom": { - "flowRate": 1.2, - "speed": 40.0 - } + "heatupBedTemperature": 70, + "heatupTemperature": 20, + "temperature": 210.0, + "layerHeight": 0.15, + "bottomThickness": 0.4, + "topThickness": 0.8, + "shellThickness": 0.4, + "brimOffset": 4.0, + "fillGridSize": 5.0, + "infillOverlap": 0.0, + "travelSpeed": 200.0, + "retractionAmount": 3.0, + "retractionEnabled": true, + "retractionSpeed": 50.0, + "retractionMinDistance": 0.0, + "supportAcceptanceMargin": 1.5, + "supportDistanceY": 0.4, + "supportEnabled": false, + "supportGridSize": 6.0, + "supportMargin": 2.0, + "supportPlateSize": 4.0, + "outerLine": { + "flowRate": 1.0, + "speed": 40.0 + }, + "innerLine": { + "flowRate": 1.0, + "speed": 50.0 + }, + "fill": { + "flowRate": 1.0, + "speed": 50.0 + }, + "brim": { + "flowRate": 1.0, + "speed": 40.0 + }, + "support": { + "flowRate": 0.8, + "speed": 40.0 + }, + "bottom": { + "flowRate": 1.2, + "speed": 40.0 + } } diff --git a/src/sliceActions/optimizePaths.js b/src/sliceActions/optimizePaths.js index ef1c0bf..2e69933 100644 --- a/src/sliceActions/optimizePaths.js +++ b/src/sliceActions/optimizePaths.js @@ -10,72 +10,72 @@ export default function optimizePaths(slices, settings) { const slice = slices[layer]; if (slice.brim !== undefined && slice.brim.paths.length > 0) { - slice.brim = optimizeShape(slice.brim, start); - start.copy(slice.brim.lastPoint(true)); + slice.brim = optimizeShape(slice.brim, start); + start.copy(slice.brim.lastPoint(true)); } const parts = []; while (slice.parts.length > 0) { - let closestDistance = Infinity; - let closestPart; + let closestDistance = Infinity; + let closestPart; - for (let i = 0; i < slice.parts.length; i ++) { - const part = slice.parts[i]; + for (let i = 0; i < slice.parts.length; i ++) { + const part = slice.parts[i]; let bounds; - if (part.shape.closed) { - bounds = part.outerLine.shapeBounds(); - } else { - bounds = part.shape.shapeBounds(); - } + if (part.shape.closed) { + bounds = part.outerLine.shapeBounds(); + } else { + bounds = part.shape.shapeBounds(); + } - const top = bounds.top - start.y; - const bottom = start.y - bounds.bottom; - const left = bounds.left - start.x; - const right = start.x - bounds.right; + const top = bounds.top - start.y; + const bottom = start.y - bounds.bottom; + const left = bounds.left - start.x; + const right = start.x - bounds.right; - const distance = Math.max(top, bottom, left, right); + const distance = Math.max(top, bottom, left, right); - if (distance < closestDistance) { - closestDistance = distance; - closestPart = i; - } - } + if (distance < closestDistance) { + closestDistance = distance; + closestPart = i; + } + } - const part = slice.parts.splice(closestPart, 1)[0]; - parts.push(part); + const part = slice.parts.splice(closestPart, 1)[0]; + parts.push(part); - if (part.shape.closed) { - if (part.outerLine.paths.length > 0) { - part.outerLine = optimizeShape(part.outerLine, start); - start.copy(part.outerLine.lastPoint(true)); - } + if (part.shape.closed) { + if (part.outerLine.paths.length > 0) { + part.outerLine = optimizeShape(part.outerLine, start); + start.copy(part.outerLine.lastPoint(true)); + } - for (let i = 0; i < part.innerLines.length; i ++) { - const innerLine = part.innerLines[i]; + for (let i = 0; i < part.innerLines.length; i ++) { + const innerLine = part.innerLines[i]; - if (innerLine.paths.length > 0) { - part.innerLines[i] = optimizeShape(innerLine, start); - start.copy(part.innerLines[i].lastPoint(true)); - } - } + if (innerLine.paths.length > 0) { + part.innerLines[i] = optimizeShape(innerLine, start); + start.copy(part.innerLines[i].lastPoint(true)); + } + } - if (part.fill.paths.length > 0) { - part.fill = optimizeShape(part.fill, start); - start.copy(part.fill.lastPoint(true)); - } - } else { - part.shape = optimizeShape(part.shape, start); - start.copy(part.shape.lastPoint(true)); - } + if (part.fill.paths.length > 0) { + part.fill = optimizeShape(part.fill, start); + start.copy(part.fill.lastPoint(true)); + } + } else { + part.shape = optimizeShape(part.shape, start); + start.copy(part.shape.lastPoint(true)); + } } slice.parts = parts; if (slice.support !== undefined && slice.support.length > 0) { - slice.support = optimizeShape(slice.support, start); - start.copy(slice.support.lastPoint(true)); + slice.support = optimizeShape(slice.support, start); + start.copy(slice.support.lastPoint(true)); } } }