mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-11-19 20:37:56 +01:00
208 lines
4.6 KiB
JavaScript
208 lines
4.6 KiB
JavaScript
|
Sidebar.Printer = function ( editor ) {
|
||
|
|
||
|
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/printer/collapsed' ) );
|
||
|
container.onCollapsedChange( function ( boolean ) {
|
||
|
|
||
|
editor.config.setKey( 'ui/sidebar/printer/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( 'PRINTER' ) );
|
||
|
container.add( new UI.Break() );
|
||
|
|
||
|
function createRow (name) {
|
||
|
|
||
|
var row = new UI.Panel();
|
||
|
|
||
|
row.add( new UI.Text( name ).setWidth( '150px' ) );
|
||
|
|
||
|
var fill = new UI.Text( '' ).setWidth( '90px' );
|
||
|
row.add(fill);
|
||
|
|
||
|
container.add(row);
|
||
|
|
||
|
return fill;
|
||
|
|
||
|
}
|
||
|
|
||
|
var state = createRow('State');
|
||
|
var bedTemperature = createRow('Bed Temperature');
|
||
|
var bedTargetTemperature = createRow('Bed Target Temperature');
|
||
|
var nozzleTemperature = createRow('Nozzle Temperature');
|
||
|
var nozzleTargetTemperature = createRow('Nozzle Target Temperature');
|
||
|
var currentLine = createRow('Current Line');
|
||
|
var bufferedLines = createRow('Buffered Lines');
|
||
|
var totalLines = createRow('Total Lines');
|
||
|
var printBatches = createRow('Print Batches');
|
||
|
|
||
|
doodleBox.onupdate = function (data) {
|
||
|
state.setValue(data["state"]);
|
||
|
bedTemperature.setValue(data["bed"]);
|
||
|
bedTargetTemperature.setValue(data["bed_target"]);
|
||
|
nozzleTemperature.setValue(data["hotend"]);
|
||
|
nozzleTargetTemperature.setValue(data["hotend_target"]);
|
||
|
currentLine.setValue(data["current_line"]);
|
||
|
bufferedLines.setValue(data["buffered_lines"]);
|
||
|
totalLines.setValue(data["total_lines"]);
|
||
|
printBatches.setValue(doodleBox.printBatches.length);
|
||
|
};
|
||
|
|
||
|
var printerTypeRow = new UI.Panel();
|
||
|
var printerType = new UI.Select().setWidth( '150px' );
|
||
|
printerType.onChange( function () {
|
||
|
|
||
|
var type = printerType.getValue();
|
||
|
selectedPrinter = type;
|
||
|
|
||
|
printer.updateConfig(PRINTER_SETTINGS[selectedPrinter]);
|
||
|
|
||
|
} );
|
||
|
|
||
|
printerTypeRow.add( new UI.Text( 'Printer' ).setWidth( '90px' ) );
|
||
|
printerTypeRow.add( printerType );
|
||
|
|
||
|
container.add( printerTypeRow );
|
||
|
|
||
|
var progress = createRow("Progress");
|
||
|
|
||
|
var slice = new UI.Button( 'Slice' );
|
||
|
slice.onClick( function () {
|
||
|
|
||
|
if (selectedPrinter === undefined) {
|
||
|
alert("No Printer Selected");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var geometryCombined = new THREE.Geometry();
|
||
|
|
||
|
for (var i = 0; i < editor.scene.children.length; i ++) {
|
||
|
|
||
|
var child = editor.scene.children[i];
|
||
|
|
||
|
if (child instanceof THREE.Mesh) {
|
||
|
|
||
|
var mesh = child;
|
||
|
mesh.updateMatrix();
|
||
|
var geometry = mesh.geometry.clone();
|
||
|
geometry.applyMatrix(mesh.matrix);
|
||
|
|
||
|
if (geometry instanceof THREE.BufferGeometry) {
|
||
|
geometry = new THREE.Geometry().fromBufferGeometry(geometry);
|
||
|
}
|
||
|
|
||
|
geometryCombined.merge(geometry);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
geometryCombined.computeBoundingBox();
|
||
|
|
||
|
var mesh = new THREE.Mesh(geometryCombined, new THREE.MeshBasicMaterial);
|
||
|
mesh.position.y = -geometryCombined.boundingBox.min.y;
|
||
|
|
||
|
var slicer = new D3D.SlicerWorker();
|
||
|
|
||
|
slicer.onprogress = function (_progress) {
|
||
|
progress.setValue(Math.round(_progress.procent * 100) + "%");
|
||
|
};
|
||
|
slicer.onfinish = function (gcode) {
|
||
|
|
||
|
var print = new UI.Button( 'Start Print' );
|
||
|
print.onClick( function () {
|
||
|
|
||
|
doodleBox.print(gcode);
|
||
|
|
||
|
} );
|
||
|
container.add( print );
|
||
|
|
||
|
var download = new UI.Button( 'Download GCode' );
|
||
|
download.onClick( function () {
|
||
|
|
||
|
downloadFile("gcode.gcode", gcode);
|
||
|
|
||
|
} );
|
||
|
container.add( download );
|
||
|
|
||
|
};
|
||
|
|
||
|
slicer.setSettings(USER_SETTINGS, PRINTER_SETTINGS[selectedPrinter]);
|
||
|
slicer.setMesh(mesh);
|
||
|
|
||
|
slicer.slice();
|
||
|
|
||
|
slicer.close();
|
||
|
} );
|
||
|
container.add( slice );
|
||
|
|
||
|
var stop = new UI.Button( 'Stop Print' );
|
||
|
stop.onClick( function () {
|
||
|
|
||
|
if (selectedPrinter === undefined) {
|
||
|
alert("No Printer Selected");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
doodleBox.stopPrint(printer);
|
||
|
|
||
|
} );
|
||
|
container.add( stop );
|
||
|
|
||
|
container.add( new UI.Break() );
|
||
|
|
||
|
(function () {
|
||
|
'use strict';
|
||
|
|
||
|
var loadedItems = 0;
|
||
|
function loaded () {
|
||
|
loadedItems ++;
|
||
|
if (loadedItems === 2) {
|
||
|
//finish loading
|
||
|
|
||
|
settingsLoaded();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$.ajax({
|
||
|
url: '../../settings/user_settings.json',
|
||
|
dataType: 'json',
|
||
|
success: function (response) {
|
||
|
USER_SETTINGS = response;
|
||
|
loaded();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$.ajax({
|
||
|
url: '../../settings/printer_settings.json',
|
||
|
dataType: 'json',
|
||
|
success: function (response) {
|
||
|
PRINTER_SETTINGS = response;
|
||
|
loaded();
|
||
|
}
|
||
|
});
|
||
|
})();
|
||
|
|
||
|
return container;
|
||
|
|
||
|
}
|