Skip to content

Commit

Permalink
Color differentiation of pants by volume/sec and extrusion/move speeds..
Browse files Browse the repository at this point in the history
  • Loading branch information
hudbrog committed Feb 26, 2013
1 parent 4285713 commit a797c52
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 24 deletions.
4 changes: 4 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ <h3>Running analysis....</h3>
</div>
<div id="options2DAccordionTab" class="accordion-body collapse">
<div class="accordion-inner">
<label>Speed display type: </label>
<label for="speedDisplayRadio"><input type="radio" name="speedDisplay" id="speedDisplayRadio" value="1" onclick="GCODE.ui.processOptions()" checked> mm/sec</label>
<label for="exPerMMRadio"><input type="radio" name="speedDisplay" id="exPerMMRadio" value="1" onclick="GCODE.ui.processOptions()" > mm extrusion per mm move</label>
<label for="volPerSecRadio"><input type="radio" name="speedDisplay" id="volPerSecRadio" value="1" onclick="GCODE.ui.processOptions()" > mm^3/sec</label>
<label for="showMovesCheckbox"><input type="checkbox" id="showMovesCheckbox" value="1" onclick="GCODE.ui.processOptions()" checked> Show non-extrusion moves</label>
<label for="showRetractsCheckbox"><input type="checkbox" id="showRetractsCheckbox" value="2" onclick="GCODE.ui.processOptions()" checked> Show retracts and restarts</label>
<label for="moveModelCheckbox"><input type="checkbox" id="moveModelCheckbox" value="3" onclick="GCODE.ui.processOptions()" checked> Move model to the center of the grid</label>
Expand Down
54 changes: 48 additions & 6 deletions js/Worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
var layerCnt = 0;
var speeds = {extrude: [], retract: [], move: []};
var speedsByLayer = {extrude: {}, retract: {}, move: {}};
var volSpeeds = [];
var volSpeedsByLayer = {};
var extrusionSpeeds = [];
var extrusionSpeedsByLayer = {};



Expand Down Expand Up @@ -87,7 +91,11 @@
layerTotal: model.length,
speeds: speeds,
speedsByLayer: speedsByLayer,
printTimeByLayer: printTimeByLayer
volSpeeds: volSpeeds,
volSpeedsByLayer: volSpeedsByLayer,
printTimeByLayer: printTimeByLayer,
extrusionSpeeds: extrusionSpeeds,
extrusionSpeedsByLayer: extrusionSpeedsByLayer
}
});
};
Expand Down Expand Up @@ -174,9 +182,6 @@
type = 'retract';
}else if(!cmds[j].extrude&&cmds[j].retract===0){
type = 'move';
// if(cmds[j].prevZ == '17.1'){
// self.postMessage({cmd: 'Got speed ' + cmds[j].speed + 'with line ' + cmds[j].gcodeLine});
// }
}else {
self.postMessage({cmd: 'unknown type of move'});
type = 'unknown';
Expand All @@ -193,6 +198,39 @@
speedsByLayer[type][cmds[j].prevZ][speedIndex] = cmds[j].speed;
}

if(cmds[j].extrude&&cmds[j].retract === 0&&x_ok&&y_ok){
// we are extruding
var volPerMM = cmds[j].volPerMM;
volPerMM = parseFloat(volPerMM).toFixed(3);
var volIndex = volSpeeds.indexOf(volPerMM);
if(volIndex === -1){
volSpeeds.push(volPerMM);
volIndex = volSpeeds.indexOf(volPerMM);
}
if(typeof(volSpeedsByLayer[cmds[j].prevZ]) === 'undefined'){
volSpeedsByLayer[cmds[j].prevZ] = [];
}
if(volSpeedsByLayer[cmds[j].prevZ].indexOf(volPerMM) === -1){
volSpeedsByLayer[cmds[j].prevZ][volIndex] = volPerMM;
}

var extrusionSpeed = volPerMM*cmds[j].speed;
extrusionSpeed = parseFloat(extrusionSpeed).toFixed(3);
var volIndex = extrusionSpeeds.indexOf(extrusionSpeed);
if(volIndex === -1){
extrusionSpeeds.push(extrusionSpeed);
volIndex = extrusionSpeeds.indexOf(extrusionSpeed);
}
if(typeof(extrusionSpeedsByLayer[cmds[j].prevZ]) === 'undefined'){
extrusionSpeedsByLayer[cmds[j].prevZ] = [];
}
if(extrusionSpeedsByLayer[cmds[j].prevZ].indexOf(extrusionSpeed) === -1){
extrusionSpeedsByLayer[cmds[j].prevZ][volIndex] = extrusionSpeed;
}
}



}
sendSizeProgress(i/model.length*100);

Expand All @@ -218,7 +256,7 @@
// console.time("parseGCode timer");
var reg = new RegExp(/^(?:G0|G1)\s/i);
var comment = new RegExp()
var j, layer= 0, extrude=false, prevRetract= 0, retract=0, x, y, z=0, f, prevZ=0, prevX, prevY,lastF=4000, prev_extrude = {a: undefined, b: undefined, c: undefined, e: undefined, abs: undefined}, extrudeRelative=false;
var j, layer= 0, extrude=false, prevRetract= 0, retract=0, x, y, z=0, f, prevZ=0, prevX, prevY,lastF=4000, prev_extrude = {a: undefined, b: undefined, c: undefined, e: undefined, abs: undefined}, extrudeRelative=false, volPerMM;
var dcExtrude=false;
var assumeNonDC = false;

Expand All @@ -227,6 +265,7 @@
x=undefined;
y=undefined;
z=undefined;
volPerMM=undefined;
retract = 0;


Expand Down Expand Up @@ -316,8 +355,11 @@
extrude = true;
prev_extrude["abs"] = Math.sqrt((prevX-x)*(prevX-x)+(prevY-y)*(prevY-y));
}
if(extrude&&retract == 0){
volPerMM = Number(prev_extrude['abs']/Math.sqrt((prevX-x)*(prevX-x)+(prevY-y)*(prevY-y)));
}
if(!model[layer])model[layer]=[];
if(typeof(x) !== 'undefined' || typeof(y) !== 'undefined' ||typeof(z) !== 'undefined'||retract!=0) model[layer][model[layer].length] = {x: Number(x), y: Number(y), z: Number(z), extrude: extrude, retract: Number(retract), noMove: false, extrusion: (extrude||retract)?Number(prev_extrude["abs"]):0, prevX: Number(prevX), prevY: Number(prevY), prevZ: Number(prevZ), speed: Number(lastF), gcodeLine: Number(i)};
if(typeof(x) !== 'undefined' || typeof(y) !== 'undefined' ||typeof(z) !== 'undefined'||retract!=0) model[layer][model[layer].length] = {x: Number(x), y: Number(y), z: Number(z), extrude: extrude, retract: Number(retract), noMove: false, extrusion: (extrude||retract)?Number(prev_extrude["abs"]):0, prevX: Number(prevX), prevY: Number(prevY), prevZ: Number(prevZ), speed: Number(lastF), gcodeLine: Number(i), volPerMM: typeof(volPerMM)==='undefined'?-1:volPerMM.toFixed(3)};
//{x: x, y: y, z: z, extrude: extrude, retract: retract, noMove: false, extrusion: (extrude||retract)?prev_extrude["abs"]:0, prevX: prevX, prevY: prevY, prevZ: prevZ, speed: lastF, gcodeLine: i};
if(typeof(x) !== 'undefined') prevX = x;
if(typeof(y) !== 'undefined') prevY = y;
Expand Down
16 changes: 14 additions & 2 deletions js/gCodeReader.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ GCODE.gCodeReader = (function(){
var speeds = {};
var slicer = 'unknown';
var speedsByLayer = {};
var volSpeeds = {};
var volSpeedsByLayer = {};
var extrusionSpeeds = {};
var extrusionSpeedsByLayer = {};
var gCodeOptions = {
sortLayers: false,
purgeEmptyLayers: true,
Expand Down Expand Up @@ -249,14 +253,18 @@ GCODE.gCodeReader = (function(){
layerHeight = msg.layerHeight;
layerCnt = msg.layerCnt;
layerTotal = msg.layerTotal;
volSpeeds = msg.volSpeeds;
volSpeedsByLayer = msg.volSpeedsByLayer;
extrusionSpeeds = msg.extrusionSpeeds;
extrusionSpeedsByLayer = msg.extrusionSpeedsByLayer;

var density = 1;
if(gCodeOptions['filamentType'] === 'ABS') {
density = 1.04;
}else if(gCodeOptions['filamentType'] === 'PLA') {
density = 1.24;
}
totalWeight = 3.141*gCodeOptions['filamentDia']/10*gCodeOptions['filamentDia']/10/4*totalFilament/10;
totalWeight = density*3.141*gCodeOptions['filamentDia']/10*gCodeOptions['filamentDia']/10/4*totalFilament/10;

gCodeOptions['wh'] = parseFloat(gCodeOptions['nozzleDia'])/parseFloat(layerHeight);
if(slicer === 'Slic3r' || slicer === 'cura'){
Expand Down Expand Up @@ -284,7 +292,11 @@ GCODE.gCodeReader = (function(){
totalWeight: totalWeight,
layerHeight: layerHeight,
layerCnt: layerCnt,
layerTotal: layerTotal
layerTotal: layerTotal,
volSpeeds: volSpeeds,
volSpeedsByLayer: volSpeedsByLayer,
extrusionSpeeds: extrusionSpeeds,
extrusionSpeedsByLayer: extrusionSpeedsByLayer
};
},
getGCodeLines: function(layer, fromSegments, toSegments){
Expand Down
20 changes: 19 additions & 1 deletion js/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ GCODE.renderer = (function(){
var scaleFactor = 1.1;
var model;
var initialized=false;
var displayType = {speed: 1, expermm: 2, volpersec: 3};
var renderOptions = {
showMoves: true,
showRetracts: true,
Expand All @@ -42,12 +43,17 @@ GCODE.renderer = (function(){
alpha: false,
actualWidth: false,
renderErrors: false,
renderAnalysis: false
renderAnalysis: false,
speedDisplayType: displayType.speed
};

var offsetModelX=0, offsetModelY=0;
var speeds = [];
var speedsByLayer = {};
var volSpeeds = [];
var volSpeedsByLayer = {};
var extrusionSpeeds = [];
var extrusionSpeedsByLayer = {};


var reRender = function(){
Expand Down Expand Up @@ -272,7 +278,15 @@ GCODE.renderer = (function(){
else y = -cmds[i].y;
if(renderOptions["differentiateColors"]&&!renderOptions['showNextLayer']&&!renderOptions['renderAnalysis']){
// if(speedsByLayer['extrude'][prevZ]){
if(renderOptions['speedDisplayType'] === displayType.speed){
speedIndex = speeds['extrude'].indexOf(cmds[i].speed);
}else if(renderOptions['speedDisplayType'] === displayType.expermm){
speedIndex = volSpeeds.indexOf(cmds[i].volPerMM);
}else if(renderOptions['speedDisplayType'] === displayType.volpersec){
speedIndex = extrusionSpeeds.indexOf((cmds[i].volPerMM*cmds[i].speed).toFixed(3));
}else{
speedIndex=0;
}
// speedIndex = GCODE.ui.ArrayIndexOf(speedsByLayer['extrude'][prevZ], function(obj) {return obj.speed === cmds[i].speed;});
// } else {
// speedIndex = -1;
Expand Down Expand Up @@ -457,6 +471,10 @@ GCODE.renderer = (function(){
mdlInfo = GCODE.gCodeReader.getModelInfo();
speeds = mdlInfo.speeds;
speedsByLayer = mdlInfo.speedsByLayer;
volSpeeds = mdlInfo.volSpeeds;
volSpeedsByLayer = mdlInfo.volSpeedsByLayer;
extrusionSpeeds = mdlInfo.extrusionSpeeds;
extrusionSpeedsByLayer = mdlInfo.extrusionSpeedsByLayer;
// console.log(speeds);
// console.log(mdlInfo.min.x + ' ' + mdlInfo.modelSize.x);
offsetModelX = (gridSizeX/2-(mdlInfo.min.x+mdlInfo.modelSize.x/2))*zoomFactor;
Expand Down
105 changes: 90 additions & 15 deletions js/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ GCODE.ui = (function(){
var sliderHor;
var gCodeLines = {first: 0, last: 0};
var showGCode = false;
var displayType = {speed: 1, expermm: 2, volpersec: 3};
// var worker;

var setProgress = function(id, progress){
Expand All @@ -35,37 +36,29 @@ GCODE.ui = (function(){
}
};


var printLayerInfo = function(layerNum){
var prepareSpeedsInfo = function(layerNum){
var z = GCODE.renderer.getZ(layerNum);
var segments = GCODE.renderer.getLayerNumSegments(layerNum);
var filament = GCODE.gCodeReader.getLayerFilament(z);
var layerSpeeds = GCODE.gCodeReader.getModelInfo().speedsByLayer;
var renderOptions = GCODE.renderer.getOptions();
var colors = renderOptions["colorLine"];
var colorLen = renderOptions['colorLineLen'];
var speedIndex = 0;
// var keys, type;
// var showMove=false;
var i;
var output = [];
output.push("Layer number: " + layerNum);
output.push("Layer height (mm): " + z);
output.push("GCODE commands in layer: " + segments);
output.push("Filament used by layer (mm): " + filament.toFixed(2));
output.push("Print time for layer: " + parseFloat(GCODE.gCodeReader.getModelInfo().printTimeByLayer[z]).toFixed(1) + "sec");
var i;

output.push("Extrude speeds:");
for(i=0;i<layerSpeeds['extrude'][z].length;i++){
if(typeof(layerSpeeds['extrude'][z][i])==='undefined'){continue;}
speedIndex = i;
if(speedIndex > colors.length -1){speedIndex = speedIndex % (colors.length-1);}
if(speedIndex > colorLen -1){speedIndex = speedIndex % (colorLen-1);}
output.push("<div id='colorBox"+i+"' class='colorBox' style='background-color: "+colors[speedIndex] + "'></div> = " + (parseFloat(layerSpeeds['extrude'][z][i])/60).toFixed(2)+"mm/s");
}
if(typeof(layerSpeeds['move'][z]) !== 'undefined'){
output.push("Move speeds:");
for(i=0;i<layerSpeeds['move'][z].length;i++){
if(typeof(layerSpeeds['move'][z][i])==='undefined'){continue;}
speedIndex = i;
if(speedIndex > colors.length -1){speedIndex = speedIndex % (colors.length-1);}
if(speedIndex > colorLen -1){speedIndex = speedIndex % (colorLen-1);}
output.push("<div id='colorBox"+i+"' class='colorBox' style='background-color: "+renderOptions['colorMove'] + "'></div> = " + (parseFloat(layerSpeeds['move'][z][i])/60).toFixed(2)+"mm/s");
}
}
Expand All @@ -74,11 +67,82 @@ GCODE.ui = (function(){
for(i=0;i<layerSpeeds['retract'][z].length;i++){
if(typeof(layerSpeeds['retract'][z][i])==='undefined'){continue;}
speedIndex = i;
if(speedIndex > colors.length -1){speedIndex = speedIndex % (colors.length-1);}
if(speedIndex > colorLen -1){speedIndex = speedIndex % (colorLen-1);}
output.push("<span style='color: " + renderOptions['colorRetract'] +"'>&#9679;</span> <span style='color: " + renderOptions['colorRestart'] +"'>&#9679;</span> = " +(parseFloat(layerSpeeds['retract'][z][i])/60).toFixed(2)+"mm/s");
}
}

return output;
}

var prepareExPerMMInfo = function(layerNum){
var z = GCODE.renderer.getZ(layerNum);
var layerSpeeds = GCODE.gCodeReader.getModelInfo().volSpeedsByLayer;
var renderOptions = GCODE.renderer.getOptions();
var colors = renderOptions["colorLine"];
var colorLen = renderOptions['colorLineLen'];
var speedIndex = 0;
var output = [];
var i;

output.push("Extrude speeds in extrusion mm per move mm:");
for(i=0;i<layerSpeeds[z].length;i++){
if(typeof(layerSpeeds[z][i])==='undefined'){continue;}
speedIndex = i;
if(speedIndex > colorLen -1){speedIndex = speedIndex % (colorLen-1);}
output.push("<div id='colorBox"+i+"' class='colorBox' style='background-color: "+colors[speedIndex] + "'></div> = " + (parseFloat(layerSpeeds[z][i])).toFixed(3)+"mm/mm");
}

return output;
}

var prepareVolPerSecInfo = function(layerNum){
var z = GCODE.renderer.getZ(layerNum);
var layerSpeeds = GCODE.gCodeReader.getModelInfo().extrusionSpeedsByLayer;
var renderOptions = GCODE.renderer.getOptions();
var gCodeOptions = GCODE.gCodeReader.getOptions();
var colors = renderOptions["colorLine"];
var colorLen = renderOptions['colorLineLen'];
var speedIndex = 0;
var output = [];
var i;

output.push("Extrude speeds in mm^3/sec:");
for(i=0;i<layerSpeeds[z].length;i++){
if(typeof(layerSpeeds[z][i])==='undefined'){continue;}
speedIndex = i;
if(speedIndex > colorLen -1){speedIndex = speedIndex % (colorLen-1);}
output.push("<div id='colorBox"+i+"' class='colorBox' style='background-color: "+colors[speedIndex] + "'></div> = " + (parseFloat(layerSpeeds[z][i]*3.141*gCodeOptions['filamentDia']/10*gCodeOptions['filamentDia']/10/4)).toFixed(3)+"mm^3/sec");
}

return output;
}


var printLayerInfo = function(layerNum){
var z = GCODE.renderer.getZ(layerNum);
var segments = GCODE.renderer.getLayerNumSegments(layerNum);
var renderOptions = GCODE.renderer.getOptions();
var filament = GCODE.gCodeReader.getLayerFilament(z);
var output = [];

output.push("Layer number: " + layerNum);
output.push("Layer height (mm): " + z);
output.push("GCODE commands in layer: " + segments);
output.push("Filament used by layer (mm): " + filament.toFixed(2));
output.push("Print time for layer: " + parseFloat(GCODE.gCodeReader.getModelInfo().printTimeByLayer[z]).toFixed(1) + "sec");

if(renderOptions['speedDisplayType'] === displayType.speed){
var res = prepareSpeedsInfo(layerNum);
output = output.concat(res);
}else if(renderOptions['speedDisplayType'] === displayType.expermm){
var res = prepareExPerMMInfo(layerNum);
output = output.concat(res);
}else if(renderOptions['speedDisplayType'] === displayType.volpersec){
var res = prepareVolPerSecInfo(layerNum);
output = output.concat(res);
}

$('#layerInfo').html(output.join('<br>'));
// chooseAccordion('layerAccordionTab');
};
Expand Down Expand Up @@ -386,6 +450,11 @@ GCODE.ui = (function(){

if(document.getElementById('plasticABS').checked)GCODE.gCodeReader.setOption({filamentType: "ABS"});
if(document.getElementById('plasticPLA').checked)GCODE.gCodeReader.setOption({filamentType: "PLA"});

if(document.getElementById('speedDisplayRadio').checked)GCODE.renderer.setOption({speedDisplayType: displayType.speed});
if(document.getElementById('exPerMMRadio').checked)GCODE.renderer.setOption({speedDisplayType: displayType.expermm});
if(document.getElementById('volPerSecRadio').checked)GCODE.renderer.setOption({speedDisplayType: displayType.volpersec});

},

updateOptions: function(){
Expand All @@ -397,6 +466,12 @@ GCODE.ui = (function(){

resetSliders: function(){
initSliders();
},

setOption: function(options){
for(var opt in options){
uiOptions[opt] = options[opt];
}
}
}
}());

0 comments on commit a797c52

Please sign in to comment.