added setMesh and setGeometry

This commit is contained in:
casperlamboo 2015-07-10 12:59:50 +02:00
parent 7064058464
commit bb42335353
9 changed files with 88 additions and 80 deletions

View File

@ -78,7 +78,7 @@ function init () {
scene.add(mesh); scene.add(mesh);
var slicer = new D3D.Slicer().setMesh(mesh.geometry, mesh.matrix); var slicer = new D3D.Slicer().setMesh(mesh);
//var canvas = document.getElementById("canvas"); //var canvas = document.getElementById("canvas");
//var context = canvas.getContext("2d"); //var context = canvas.getContext("2d");
@ -96,7 +96,7 @@ function createScene () {
var renderer = new THREE.WebGLRenderer({canvas: document.getElementById("3d-preview"), antialias: true}); var renderer = new THREE.WebGLRenderer({canvas: document.getElementById("3d-preview"), antialias: true});
renderer.setClearColor(0xffffff, 1); renderer.setClearColor(0xffffff, 1);
var camera = new THREE.PerspectiveCamera(75, renderer.domElement.width/renderer.domElement.height, 1, 10000); var camera = new THREE.PerspectiveCamera(75, renderer.domElement.width / renderer.domElement.height, 1, 10000);
scene.add(camera); scene.add(camera);
var light = new THREE.AmbientLight(0x404040); var light = new THREE.AmbientLight(0x404040);

View File

@ -3,15 +3,10 @@
* WiFi-Box * WiFi-Box
* Representation of de Doodle3D-WiFi Box * Representation of de Doodle3D-WiFi Box
* Handles all communication with the doodle box * Handles all communication with the doodle box
* JavaScript shell for api communication
* Check http://www.doodle3d.com/help/api-documentation * Check http://www.doodle3d.com/help/api-documentation
* *
******************************************************/ ******************************************************/
//TODO
//Als meerdere clients met box zouden verbinden zal de api te veel requests krijgen waardoor hij crasht
//implimentatie van het veranderen van onder andere naam, netwerkverbinding etc
D3D.Box = function (localIp) { D3D.Box = function (localIp) {
"use strict"; "use strict";
var scope = this; var scope = this;
@ -82,12 +77,7 @@ D3D.Box.prototype.init = function () {
}; };
D3D.Box.prototype._updateLoop = function () { D3D.Box.prototype._updateLoop = function () {
"use strict"; "use strict";
console.log("loop", this.status["buffered_lines"]);
var scope = this; var scope = this;
//TODO
//Code is zo op gezet dat maar api call te gelijk is
//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._printBatches[0].length) <= this.maxBufferedLines) { if (this._printBatches.length > 0 && (this.status["buffered_lines"] + this._printBatches[0].length) <= this.maxBufferedLines) {
//if (this._printBatches.length > 0 ) { //if (this._printBatches.length > 0 ) {

View File

@ -24,7 +24,7 @@ D3D.GCode = function () {
D3D.GCode.prototype._addGCode = function (command) { D3D.GCode.prototype._addGCode = function (command) {
"use strict"; "use strict";
var str = []; var str = "";
var first = true; var first = true;
for (var i in command) { for (var i in command) {
@ -114,7 +114,7 @@ D3D.GCode.prototype.lineTo = function (x, y, layer, type) {
var lineLength = this._nozzlePosition.distanceTo(newNozzlePosition); var lineLength = this._nozzlePosition.distanceTo(newNozzlePosition);
var filamentSurfaceArea = Math.pow((filamentThickness/2), 2) * Math.PI; var filamentSurfaceArea = Math.pow((filamentThickness / 2), 2) * Math.PI;
this.extruder += lineLength * nozzleDiameter * layerHeight / filamentSurfaceArea * flowRate; this.extruder += lineLength * nozzleDiameter * layerHeight / filamentSurfaceArea * flowRate;
this._addGCode({ this._addGCode({

View File

@ -17,7 +17,14 @@ D3D.Slicer = function () {
generatedGCode: false generatedGCode: false
}; };
}; };
D3D.Slicer.prototype.setMesh = function (geometry, matrix) { D3D.Slicer.prototype.setMesh = function (mesh) {
"use strict";
this.setGeometry(mesh.geometry, mesh.matrix);
return this;
};
D3D.Slicer.prototype.setGeometry = function (geometry, matrix) {
"use strict"; "use strict";
//convert buffergeometry to geometry; //convert buffergeometry to geometry;
@ -46,15 +53,12 @@ D3D.Slicer.prototype.setMesh = function (geometry, matrix) {
}; };
D3D.Slicer.prototype.getGCode = function (printer) { D3D.Slicer.prototype.getGCode = function (printer) {
"use strict"; "use strict";
var layerHeight = printer.config["layerHeight"];
var dimensionsZ = printer.config["dimensionsZ"];
var useSupport = printer.config["supportUse"]; var useSupport = printer.config["supportUse"];
//get unique lines from geometry; //get unique lines from geometry;
this._createLines(printer); var lines = this._createLines(printer);
var slices = this._slice(printer); var slices = this._slice(lines, printer);
this._generateInnerLines(slices, printer); this._generateInnerLines(slices, printer);
@ -70,36 +74,10 @@ D3D.Slicer.prototype.getGCode = function (printer) {
return gcode; return gcode;
}; };
D3D.Slicer.prototype._updateProgress = function () {
'use strict';
var useSupport = printer.config["supportUse"];
var progress = {};
var procent = 0;
var length = 0;
for (var i in this.progress) {
if (!(!useSupport && i === "generatedSupport")) {
progress[i] = this.progress[i];
if (this.progress[i]) {
procent ++;
}
length ++;
}
}
progress.procent = procent / length;
if (this.onProgress !== undefined) {
this.onProgress(progress);
}
};
D3D.Slicer.prototype._createLines = function (printer) { D3D.Slicer.prototype._createLines = function (printer) {
"use strict"; "use strict";
this._lines = []; var lines = [];
var lineLookup = {}; var lineLookup = {};
var self = this; var self = this;
@ -107,10 +85,10 @@ D3D.Slicer.prototype._createLines = function (printer) {
var index = lineLookup[b + "_" + a]; var index = lineLookup[b + "_" + a];
if (index === undefined) { if (index === undefined) {
index = self._lines.length; index = lines.length;
lineLookup[a + "_" + b] = index; lineLookup[a + "_" + b] = index;
self._lines.push({ lines.push({
line: new THREE.Line3(self.geometry.vertices[a], self.geometry.vertices[b]), line: new THREE.Line3(self.geometry.vertices[a], self.geometry.vertices[b]),
connects: [], connects: [],
normals: [] normals: []
@ -133,20 +111,22 @@ D3D.Slicer.prototype._createLines = function (printer) {
var c = addLine(face.c, face.a); var c = addLine(face.c, face.a);
//set connecting lines (based on face) //set connecting lines (based on face)
this._lines[a].connects.push(b, c); lines[a].connects.push(b, c);
this._lines[b].connects.push(c, a); lines[b].connects.push(c, a);
this._lines[c].connects.push(a, b); lines[c].connects.push(a, b);
this._lines[a].normals.push(normal); lines[a].normals.push(normal);
this._lines[b].normals.push(normal); lines[b].normals.push(normal);
this._lines[c].normals.push(normal); lines[c].normals.push(normal);
} }
} }
this.progress.createdLines = true; this.progress.createdLines = true;
this._updateProgress(printer); this._updateProgress(printer);
return lines;
}; };
D3D.Slicer.prototype._slice = function (printer) { D3D.Slicer.prototype._slice = function (lines, printer) {
"use strict"; "use strict";
var layerHeight = printer.config["layerHeight"]; var layerHeight = printer.config["layerHeight"];
@ -161,8 +141,8 @@ D3D.Slicer.prototype._slice = function (printer) {
layersIntersections[layer] = []; layersIntersections[layer] = [];
} }
for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex ++) { for (var lineIndex = 0; lineIndex < lines.length; lineIndex ++) {
var line = this._lines[lineIndex].line; var line = lines[lineIndex].line;
var min = Math.ceil(Math.min(line.start.y, line.end.y) / layerHeight); var min = Math.ceil(Math.min(line.start.y, line.end.y) / layerHeight);
var max = Math.floor(Math.max(line.start.y, line.end.y) / layerHeight); var max = Math.floor(Math.max(line.start.y, line.end.y) / layerHeight);
@ -187,7 +167,7 @@ D3D.Slicer.prototype._slice = function (printer) {
var intersections = []; var intersections = [];
for (var i = 0; i < layerIntersections.length; i ++) { for (var i = 0; i < layerIntersections.length; i ++) {
var index = layerIntersections[i]; var index = layerIntersections[i];
var line = this._lines[index].line; var line = lines[index].line;
if (line.start.y === line.end.y) { if (line.start.y === line.end.y) {
var x = line.start.x; var x = line.start.x;
@ -203,9 +183,9 @@ D3D.Slicer.prototype._slice = function (printer) {
/*testPoints.push({ /*testPoints.push({
x: z, x: z,
y: x, y: x,
connects: this._lines[index].connects, connects: lines[index].connects,
index: index, index: index,
normals: this._lines[index].normals normals: lines[index].normals
});*/ });*/
} }
@ -224,8 +204,8 @@ D3D.Slicer.prototype._slice = function (printer) {
//uppercase X and Y because clipper vector //uppercase X and Y because clipper vector
shape.push({X: intersection.x, Y: intersection.y}); shape.push({X: intersection.x, Y: intersection.y});
var connects = this._lines[index].connects.clone(); var connects = lines[index].connects.clone();
var faceNormals = this._lines[index].normals.clone(); var faceNormals = lines[index].normals.clone();
for (var j = 0; j < connects.length; j ++) { for (var j = 0; j < connects.length; j ++) {
index = connects[j]; index = connects[j];
@ -239,8 +219,8 @@ D3D.Slicer.prototype._slice = function (printer) {
if (a.distanceTo(b) === 0 || faceNormal.length() === 0) { if (a.distanceTo(b) === 0 || faceNormal.length() === 0) {
done.push(index); done.push(index);
connects = connects.concat(this._lines[index].connects); connects = connects.concat(lines[index].connects);
faceNormals = faceNormals.concat(this._lines[index].normals); faceNormals = faceNormals.concat(lines[index].normals);
index = -1; index = -1;
} }
else { else {
@ -387,7 +367,12 @@ D3D.Slicer.prototype._generateInfills = function (slices, printer) {
var fillArea = inset.offset(-nozzleRadius); var fillArea = inset.offset(-nozzleRadius);
if (surroundingLayer) { if (surroundingLayer) {
var highFillArea = fillArea.difference(surroundingLayer).offset(infillOverlap).intersect(fillArea); if (infillOverlap === 0) {
var highFillArea = fillArea.difference(surroundingLayer).intersect(fillArea);
}
else {
var highFillArea = fillArea.difference(surroundingLayer).offset(infillOverlap).intersect(fillArea);
}
} }
else { else {
var highFillArea = fillArea; var highFillArea = fillArea;
@ -573,6 +558,8 @@ D3D.Slicer.prototype._slicesToGCode = function (slices, printer) {
var point = shape[j % shape.length]; var point = shape[j % shape.length];
if (j === 0) { if (j === 0) {
//TODO
//moveTo should impliment combing
gcode.moveTo(point.X, point.Y, layer); gcode.moveTo(point.X, point.Y, layer);
if (unRetract) { if (unRetract) {
@ -625,4 +612,29 @@ D3D.Slicer.prototype._slicesToGCode = function (slices, printer) {
return gcode.getGCode(); return gcode.getGCode();
};
D3D.Slicer.prototype._updateProgress = function () {
'use strict';
if (this.onProgress !== undefined) {
var useSupport = printer.config["supportUse"];
var progress = {};
var procent = 0;
var length = 0;
for (var i in this.progress) {
if (!(!useSupport && i === "generatedSupport")) {
progress[i] = this.progress[i];
if (this.progress[i]) {
procent ++;
}
length ++;
}
}
progress.procent = procent / length;
this.onProgress(progress);
}
}; };

View File

@ -46,11 +46,20 @@ D3D.SlicerWorker.prototype.setSettings = function (USER_SETTINGS, PRINTER_SETTIN
D3D.SlicerWorker.prototype.setMesh = function (mesh) { D3D.SlicerWorker.prototype.setMesh = function (mesh) {
'use strict'; 'use strict';
if (mesh.geometry instanceof THREE.Geometry) { mesh.updateMatrix();
var geometry = new THREE.BufferGeometry().fromGeometry(mesh.geometry);
this.setGeometry(mesh.geometry, mesh.matrix);
return this;
};
D3D.SlicerWorker.prototype.setGeometry = function (geometry, matrix) {
'use strict';
if (geometry instanceof THREE.Geometry) {
geometry = new THREE.BufferGeometry().fromGeometry(geometry);
} }
else { else {
var geometry = mesh.geometry.clone(); geometry = geometry.clone();
} }
var buffers = []; var buffers = [];
@ -60,15 +69,13 @@ D3D.SlicerWorker.prototype.setMesh = function (mesh) {
buffers.push(geometry.attributes[key].array.buffer); buffers.push(geometry.attributes[key].array.buffer);
} }
mesh.updateMatrix();
this.worker.postMessage({ this.worker.postMessage({
'cmd': 'SET_MESH', 'cmd': 'SET_MESH',
'geometry': { 'geometry': {
'attributes': geometry.attributes, 'attributes': geometry.attributes,
'attributesKeys': geometry.attributesKeys 'attributesKeys': geometry.attributesKeys
}, },
'matrix': mesh.matrix.toArray() 'matrix': matrix.toArray()
}, buffers); }, buffers);
return this; return this;

View File

@ -73,7 +73,7 @@ function getAPI (url, callback) {
function downloadFile (file, data) { function downloadFile (file, data) {
'use strict'; 'use strict';
var blob = new Blob([data], {type:'text/plain'}); var blob = new Blob([data], {type: 'text/plain'});
var button = document.createElement('a'); var button = document.createElement('a');
button.download = file; button.download = file;

View File

@ -133,9 +133,6 @@ Sidebar.Slicer = function ( editor ) {
geometryCombined.computeBoundingBox(); geometryCombined.computeBoundingBox();
var mesh = new THREE.Mesh(geometryCombined, new THREE.MeshBasicMaterial);
mesh.position.y = -geometryCombined.boundingBox.min.y;
var slicer = new D3D.SlicerWorker(); var slicer = new D3D.SlicerWorker();
slicer.onprogress = function (_progress) { slicer.onprogress = function (_progress) {
@ -162,7 +159,9 @@ Sidebar.Slicer = function ( editor ) {
}; };
slicer.setSettings(USER_SETTINGS, PRINTER_SETTINGS[selectedPrinter]); slicer.setSettings(USER_SETTINGS, PRINTER_SETTINGS[selectedPrinter]);
slicer.setMesh(mesh);
var matrix = new THREE.Matrix().setPosition(new THREE.Vector(0, -geometryCombined.boundingBox.min.y, 0));
slicer.setGeometry(geometryCombined, matrix);
slicer.slice(); slicer.slice();

View File

@ -30,7 +30,7 @@ self.addEventListener('message', function (event) {
var geometry = new THREE.Geometry().fromBufferGeometry(event.data['geometry']); var geometry = new THREE.Geometry().fromBufferGeometry(event.data['geometry']);
var matrix = new THREE.Matrix4().fromArray(event.data['matrix']); var matrix = new THREE.Matrix4().fromArray(event.data['matrix']);
slicer.setMesh(geometry, matrix); slicer.setGeometry(geometry, matrix);
break; break;
case 'SET_SETTINGS': case 'SET_SETTINGS':

View File

@ -93,7 +93,7 @@ function init () {
var loader = new THREE.STLLoader(); var loader = new THREE.STLLoader();
loader.load('models/dom.stl', function (geometry) { loader.load('models/dom.stl', function (geometry) {
//var geometry = new THREE.TorusGeometry(20, 10, 30, 30).clone(); //var geometry = new THREE.TorusGeometry(20, 10, 30, 30).clone();
var geometry = new THREE.TorusKnotGeometry( 100, 43, 64, 8 ); //var geometry = new THREE.TorusKnotGeometry( 100, 43, 64, 8 );
var material = new THREE.MeshPhongMaterial({color: 0x00ff00, wireframe: false}); var material = new THREE.MeshPhongMaterial({color: 0x00ff00, wireframe: false});
@ -176,7 +176,7 @@ function createScene () {
} }
(function animate () { (function animate () {
//requestAnimationFrame(animate); requestAnimationFrame(animate);
renderer.render(scene, camera); renderer.render(scene, camera);
})(); })();