mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-12-23 19:43:48 +01:00
cleaner code
This commit is contained in:
parent
74a83f9c3b
commit
06528f6d0f
18
src/box.js
18
src/box.js
@ -40,6 +40,7 @@ D3D.Box.prototype.init = function () {
|
||||
if (error) {
|
||||
if (scope.alive) {
|
||||
scope.alive = false;
|
||||
|
||||
if (scope.ondisconnect !== undefined) {
|
||||
scope.ondisconnect();
|
||||
}
|
||||
@ -64,7 +65,7 @@ D3D.Box.prototype.init = function () {
|
||||
scope.init();
|
||||
}
|
||||
|
||||
scope.updateConfig(data);
|
||||
scope.config = data;
|
||||
|
||||
if (!scope.loaded) {
|
||||
scope.loaded = true;
|
||||
@ -79,15 +80,6 @@ D3D.Box.prototype.init = function () {
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.Box.prototype.updateConfig = function (config) {
|
||||
"use strict";
|
||||
|
||||
for (var i in config) {
|
||||
this.config[i] = config[i];
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.Box.prototype.updateLoop = function () {
|
||||
"use strict";
|
||||
var scope = this;
|
||||
@ -96,7 +88,7 @@ D3D.Box.prototype.updateLoop = function () {
|
||||
//Bij error wordt gelijk zelfde data opnieuw gestuurd
|
||||
//Als DoodleBox ontkoppeld wordt komt er een error in de loop waardoor pagina breekt en ververst moet worden
|
||||
|
||||
if (this.printBatches.length > 0 && (this.status["buffered_lines"] + this.batchSize) <= this.maxBufferedLines) {
|
||||
if (this.printBatches.length > 0 && (this.status["buffered_lines"] + this.batches[0].length) <= this.maxBufferedLines) {
|
||||
//if (this.printBatches.length > 0 ) {
|
||||
this.printBatch();
|
||||
}
|
||||
@ -167,11 +159,10 @@ D3D.Box.prototype.printBatch = function () {
|
||||
console.log("batch sent: " + scope.currentBatch, data);
|
||||
|
||||
if (scope.printBatches.length > 0) {
|
||||
//sent new batch
|
||||
scope.currentBatch ++;
|
||||
}
|
||||
else {
|
||||
//finish sending
|
||||
console.log("Finish sending model to printer");
|
||||
}
|
||||
|
||||
scope.updateState();
|
||||
@ -200,6 +191,7 @@ D3D.Box.prototype.stopPrint = function (printer) {
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
//COMMUNICATION SHELL
|
||||
//see http://www.doodle3d.com/help/api-documentation
|
||||
D3D.Box.prototype.getConfig = function (keys, callback) {
|
||||
|
23
src/gcode.js
23
src/gcode.js
@ -25,21 +25,22 @@ D3D.GCode.prototype.addGCode = function (command) {
|
||||
"use strict";
|
||||
|
||||
var str = [];
|
||||
var first = true;
|
||||
|
||||
for (var i in command) {
|
||||
if (i === "G") {
|
||||
str.push(i + command[i]);
|
||||
if (first) {
|
||||
str = i + command[i];
|
||||
|
||||
first = false;
|
||||
}
|
||||
else if (this.current[i] !== command[i]) {
|
||||
str.push(i + command[i]);
|
||||
str += " " + i + command[i];
|
||||
|
||||
this.current[i] = command[i];
|
||||
}
|
||||
}
|
||||
|
||||
str = str.join(" ");
|
||||
if (str.length > 0) {
|
||||
this.gcode += str + "\n";
|
||||
}
|
||||
this.gcode += str + "\n";
|
||||
};
|
||||
D3D.GCode.prototype.setSettings = function (printer) {
|
||||
"use strict";
|
||||
@ -146,9 +147,9 @@ D3D.GCode.prototype.unRetract = function () {
|
||||
"F": speed.toFixed(3)
|
||||
});
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.GCode.prototype.retract = function () {
|
||||
"use strict";
|
||||
@ -170,9 +171,9 @@ D3D.GCode.prototype.retract = function () {
|
||||
"F": speed.toFixed(3)
|
||||
});
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.GCode.prototype.getGCode = function () {
|
||||
"use strict";
|
||||
|
@ -134,6 +134,7 @@ D3D.Slicer.prototype.slice = function (layerHeight, height) {
|
||||
for (var layer = 1; layer < layersIntersections.length; layer ++) {
|
||||
var layerIntersections = layersIntersections[layer];
|
||||
|
||||
//why have a slice with only support?
|
||||
if (layerIntersections.length > 0) {
|
||||
|
||||
var y = layer * layerHeight;
|
||||
@ -301,9 +302,11 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
for (var layer = 0; layer < slices.length; layer ++) {
|
||||
var slice = slices[layer];
|
||||
|
||||
var downSkin = (layer - bottomSkinCount >= 0) ? slices[layer - bottomSkinCount].getOutline() : new D3D.Paths([], true);
|
||||
var upSkin = (layer + topSkinCount < slices.length) ? slices[layer + topSkinCount].getOutline() : new D3D.Paths([], true);
|
||||
var surroundingLayer = (downSkin.length === 0 || upSkin.length === 0) ? new D3D.Paths([], true) : upSkin.intersect(downSkin);
|
||||
if (layer - bottomSkinCount >= 0 && layer + topSkinCount < slices.length) {
|
||||
var downSkin = slices[layer - bottomSkinCount].getOutline();
|
||||
var upSkin = slices[layer + topSkinCount].getOutline();
|
||||
var surroundingLayer = upSkin.intersect(downSkin);
|
||||
}
|
||||
|
||||
for (var i = 0; i < slice.parts.length; i ++) {
|
||||
var part = slice.parts[i];
|
||||
@ -313,7 +316,7 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
var inset = ((part.innerLines.length > 0) ? part.innerLines[part.innerLines.length - 1] : outerLine);
|
||||
|
||||
var fillArea = inset.offset(-nozzleRadius);
|
||||
var highFillArea = fillArea.difference(surroundingLayer);
|
||||
var highFillArea = (surroundingLayer !== undefined) ? fillArea.difference(surroundingLayer) : fillArea;
|
||||
var lowFillArea = fillArea.difference(highFillArea);
|
||||
|
||||
var fill = new D3D.Paths([], false);
|
||||
@ -326,6 +329,7 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
var bounds = highFillArea.bounds();
|
||||
var even = (layer % 2 === 0);
|
||||
var highFillTemplate = this.getFillTemplate(bounds, nozzleDiameter, even, !even);
|
||||
|
||||
part.fill.join(highFillTemplate.intersect(highFillArea));
|
||||
}
|
||||
}
|
||||
@ -338,13 +342,6 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
if (useSupport) {
|
||||
console.log("generating support");
|
||||
|
||||
var supportTemplate = this.getFillTemplate({
|
||||
left: this.geometry.boundingBox.min.z * scale,
|
||||
top: this.geometry.boundingBox.min.x * scale,
|
||||
right: this.geometry.boundingBox.max.z * scale,
|
||||
bottom: this.geometry.boundingBox.max.x * scale
|
||||
}, supportGridSize, true, true);
|
||||
|
||||
var supportAreas = new D3D.Paths([], true);
|
||||
|
||||
for (var layer = slices.length - 1 - supportDistanceLayers; layer >= 0; layer --) {
|
||||
@ -367,6 +364,8 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
currentSlice.support = template.intersect(supportAreas);
|
||||
}
|
||||
else {
|
||||
var supportTemplate = this.getFillTemplate(supportAreas.bounds(), supportGridSize, true, true);
|
||||
|
||||
currentSlice.support = supportTemplate.intersect(supportAreas).join(supportAreas.clone());
|
||||
}
|
||||
}
|
||||
@ -382,11 +381,6 @@ D3D.Slicer.prototype.slicesToData = function (slices, printer) {
|
||||
var overhang = outerLine.difference(overlap);
|
||||
|
||||
if (overlap.length === 0 || overhang.length > 0) {
|
||||
//var supportArea = outerLine.difference(supportSkin.intersect(outerLine));
|
||||
//supportAreas = supportAreas.union(supportArea);
|
||||
|
||||
//supportAreas = supportAreas.union(overhang);
|
||||
|
||||
supportAreas = supportAreas.union(overhang.offset(supportAcceptanceMargin).intersect(outerLine));
|
||||
}
|
||||
}
|
||||
@ -433,17 +427,28 @@ D3D.Slicer.prototype.getFillTemplate = function (bounds, size, even, uneven) {
|
||||
var paths = new D3D.Paths([], false);
|
||||
|
||||
if (even) {
|
||||
for (var length = Math.floor(bounds.left/size)*size; length <= Math.ceil(bounds.right/size)*size; length += size) {
|
||||
paths.push([{X: length, Y: bounds.top}, {X: length, Y: bounds.bottom}]);
|
||||
var left = Math.floor(bounds.left/size)*size;
|
||||
var right = Math.ceil(bounds.right/size)*size;
|
||||
|
||||
for (var length = left; length <= right; length += size) {
|
||||
paths.push([
|
||||
{X: length, Y: bounds.top},
|
||||
{X: length, Y: bounds.bottom}
|
||||
]);
|
||||
}
|
||||
}
|
||||
if (uneven) {
|
||||
for (var length = Math.floor(bounds.top/size)*size; length <= Math.floor(bounds.bottom/size)*size; length += size) {
|
||||
paths.push([{X: bounds.left, Y: length}, {X: bounds.right, Y: length}]);
|
||||
var top = Math.floor(bounds.top/size)*size;
|
||||
var bottom = Math.floor(bounds.bottom/size)*size;
|
||||
|
||||
for (var length = top; length <= bottom; length += size) {
|
||||
paths.push([
|
||||
{X: bounds.left, Y: length},
|
||||
{X: bounds.right, Y: length}
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
//return paths;
|
||||
return paths;
|
||||
};
|
||||
D3D.Slicer.prototype.dataToGCode = function (data, printer) {
|
||||
@ -451,7 +456,7 @@ D3D.Slicer.prototype.dataToGCode = function (data, printer) {
|
||||
|
||||
var gcode = new D3D.GCode().setSettings(printer);
|
||||
|
||||
function sliceToGCode (path, retract, unRetract, type) {
|
||||
function pathToGCode (path, retract, unRetract, type) {
|
||||
|
||||
for (var i = 0; i < path.length; i ++) {
|
||||
var shape = path[i];
|
||||
@ -488,24 +493,24 @@ D3D.Slicer.prototype.dataToGCode = function (data, printer) {
|
||||
}
|
||||
|
||||
if (slice.brim !== undefined) {
|
||||
sliceToGCode(slice.brim, true, true, "brim");
|
||||
pathToGCode(slice.brim, true, true, "brim");
|
||||
}
|
||||
|
||||
for (var i = 0; i < slice.parts.length; i ++) {
|
||||
var part = slice.parts[i];
|
||||
|
||||
sliceToGCode(part.outerLine, false, true, "outerLine");
|
||||
pathToGCode(part.outerLine, false, true, "outerLine");
|
||||
|
||||
for (var j = 0; j < part.innerLines.length; j ++) {
|
||||
var innerLine = part.innerLines[j];
|
||||
sliceToGCode(innerLine, false, false, "innerLine");
|
||||
pathToGCode(innerLine, false, false, "innerLine");
|
||||
}
|
||||
|
||||
sliceToGCode(part.fill, true, false, "fill");
|
||||
pathToGCode(part.fill, true, false, "fill");
|
||||
}
|
||||
|
||||
if (slice.support !== undefined) {
|
||||
sliceToGCode(slice.support, true, true, "support");
|
||||
pathToGCode(slice.support, true, true, "support");
|
||||
}
|
||||
|
||||
this.progress.gcodeLayer = layer;
|
||||
@ -525,7 +530,7 @@ D3D.Slicer.prototype.getGCode = function (printer) {
|
||||
this.progress.dataLayer = 0;
|
||||
this.progress.gcodeLayer = 0;
|
||||
|
||||
var start = new Date().getTime();
|
||||
/*var start = new Date().getTime();
|
||||
var slices = this.slice(layerHeight, dimensionsZ);
|
||||
var end = new Date().getTime();
|
||||
console.log("Slicing: " + (end - start) + "ms");
|
||||
@ -538,7 +543,13 @@ D3D.Slicer.prototype.getGCode = function (printer) {
|
||||
start = new Date().getTime();
|
||||
var gcode = this.dataToGCode(slices, printer);
|
||||
end = new Date().getTime();
|
||||
console.log("Gcode: " + (end - start) + "ms");
|
||||
console.log("Gcode: " + (end - start) + "ms");*/
|
||||
|
||||
var slices = this.slice(layerHeight, dimensionsZ);
|
||||
|
||||
this.slicesToData(slices, printer);
|
||||
|
||||
var gcode = this.dataToGCode(slices, printer);
|
||||
|
||||
return gcode;
|
||||
};
|
@ -40,6 +40,8 @@ D3D.SlicerWorker.prototype.setSettings = function (USER_SETTINGS, PRINTER_SETTIN
|
||||
'USER_SETTINGS': USER_SETTINGS,
|
||||
'PRINTER_SETTINGS': PRINTER_SETTINGS
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.SlicerWorker.prototype.setMesh = function (mesh) {
|
||||
'use strict';
|
||||
@ -68,6 +70,8 @@ D3D.SlicerWorker.prototype.setMesh = function (mesh) {
|
||||
},
|
||||
'matrix': mesh.matrix.toArray()
|
||||
}, buffers);
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.SlicerWorker.prototype.slice = function () {
|
||||
'use strict';
|
||||
@ -75,6 +79,8 @@ D3D.SlicerWorker.prototype.slice = function () {
|
||||
this.worker.postMessage({
|
||||
'cmd': 'SLICE'
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
D3D.SlicerWorker.prototype.close = function () {
|
||||
'use strict';
|
||||
@ -82,4 +88,6 @@ D3D.SlicerWorker.prototype.close = function () {
|
||||
this.worker.postMessage({
|
||||
'cmd': 'CLOSE'
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
@ -1,18 +1,37 @@
|
||||
Sidebar.Slicer = function ( editor ) {
|
||||
|
||||
var USER_SETTINGS, PRINTER_SETTINGS, selectedPrinter, printer;
|
||||
var USER_SETTINGS, PRINTER_SETTINGS, selectedPrinter;
|
||||
|
||||
function settingsLoaded () {
|
||||
|
||||
printer.updateConfig(USER_SETTINGS);
|
||||
|
||||
var options = {};
|
||||
|
||||
for (var i in PRINTER_SETTINGS) {
|
||||
options[i] = i;
|
||||
}
|
||||
|
||||
printerType.setOptions(options);
|
||||
|
||||
}
|
||||
|
||||
var container = new UI.CollapsiblePanel();
|
||||
container.setCollapsed( editor.config.getKey( 'ui/sidebar/slicer/collapsed' ) );
|
||||
container.onCollapsedChange( function ( boolean ) {
|
||||
|
||||
editor.config.setKey( 'ui/sidebar/slicer/collapsed', boolean );
|
||||
|
||||
} );
|
||||
|
||||
var printer = new D3D.Printer();
|
||||
|
||||
var localIp = location.hash.substring(1);
|
||||
var doodleBox = new D3D.Box(localIp).init();
|
||||
|
||||
container.addStatic( new UI.Text( 'SLICER' ) );
|
||||
container.add( new UI.Break() );
|
||||
|
||||
function createRow (name) {
|
||||
|
||||
var row = new UI.Panel();
|
||||
@ -28,22 +47,6 @@ Sidebar.Slicer = function ( editor ) {
|
||||
|
||||
}
|
||||
|
||||
var localIp = location.hash.substring(1);
|
||||
var doodleBox = new D3D.Box(localIp).init();
|
||||
|
||||
var signals = editor.signals;
|
||||
|
||||
var container = new UI.CollapsiblePanel();
|
||||
container.setCollapsed( editor.config.getKey( 'ui/sidebar/slicer/collapsed' ) );
|
||||
container.onCollapsedChange( function ( boolean ) {
|
||||
|
||||
editor.config.setKey( 'ui/sidebar/slicer/collapsed', boolean );
|
||||
|
||||
} );
|
||||
|
||||
container.addStatic( new UI.Text( 'SLICER' ) );
|
||||
container.add( new UI.Break() );
|
||||
|
||||
var state = createRow('State');
|
||||
var bedTemperature = createRow('Bed Temperature');
|
||||
var bedTargetTemperature = createRow('Bed Target Temperature');
|
||||
@ -66,8 +69,6 @@ Sidebar.Slicer = function ( editor ) {
|
||||
printBatches.setValue(doodleBox.printBatches.length);
|
||||
};
|
||||
|
||||
var ignoreObjectSelectedSignal = false;
|
||||
|
||||
var printerTypeRow = new UI.Panel();
|
||||
var printerType = new UI.Select().setWidth( '150px' );
|
||||
printerType.onChange( function () {
|
||||
@ -75,7 +76,7 @@ Sidebar.Slicer = function ( editor ) {
|
||||
var type = printerType.getValue();
|
||||
selectedPrinter = type;
|
||||
|
||||
printer = new D3D.Printer().updateConfig(USER_SETTINGS).updateConfig(PRINTER_SETTINGS[selectedPrinter]);
|
||||
printer.updateConfig(PRINTER_SETTINGS[selectedPrinter]);
|
||||
|
||||
} );
|
||||
|
||||
@ -84,10 +85,8 @@ Sidebar.Slicer = function ( editor ) {
|
||||
|
||||
container.add( printerTypeRow );
|
||||
|
||||
|
||||
var progress = createRow("Progress");
|
||||
|
||||
|
||||
var slice = new UI.Button( 'Slice' );
|
||||
slice.onClick( function () {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user