hacked the gCodeViewer to render into our svg preview

This commit is contained in:
Teja 2015-01-29 20:45:41 +01:00
parent 3746ecd17b
commit 8bc350fa8e
3 changed files with 113 additions and 4 deletions

View file

@ -70,9 +70,25 @@ $(function(){
return self.workingAreaWidthMM() / self.workingAreaWidthPx();
});
// matrix scales svg units to display_pixels
self.scaleMatrix = ko.computed(function(){
var m = new Snap.Matrix();
m.scale(25.4/self.svgDPI() * 1/self.px2mm_factor());
var factor = 25.4/self.svgDPI() * 1/self.px2mm_factor();
if(!isNaN(factor)){
m.scale(factor);
return m;
}
return m;
});
// matrix scales svg units to display_pixels
self.scaleMatrixMMtoDisplay = ko.computed(function(){
var m = new Snap.Matrix();
var factor = self.svgDPI()/25.4 ;
if(!isNaN(factor)){
m.scale(factor);
return m;
}
return m;
});
@ -89,7 +105,6 @@ $(function(){
};
self.move_laser = function(el){
console.log(self.state.isOperational(), self.state.isPrinting() , "OP");
if(self.state.isOperational() && !self.state.isPrinting()){
var x = self.px2mm(event.offsetX);
// var y = self.px2mm(event.toElement.offsetHeight - event.offsetY); // toElement.offsetHeight is always 0 on svg>* elements ???
@ -226,8 +241,20 @@ $(function(){
var svg = '<svg height="'+ h +'" version="1.1" width="'+ w +'" xmlns="http://www.w3.org/2000/svg"><defs/>'+ tmpsvg +'</svg>';
return svg;
};
self.draw_gcode = function(points, intensity){
var stroke_color = intensity === 0 ? '#BBBBBB' : '#FF0000';
var d = 'M'+points.join(' ');
var p = snap.path(d).attr({
fill: "none",
stroke: stroke_color,
strokeWidth: 1
});
snap.select('#gCodePreview').append(p);
};
self.onStartup = function(){
GCODE.workingArea = self; // Temporary hack to use the gcode parser from the gCodeViewer
self.files.workingArea = self;
self.conversion.workingArea = self;
$(window).resize(function(){

View file

@ -299,7 +299,7 @@
id="coordGrid" x="0" y="0" width="0" height="0"
stroke="none" fill="none"></rect>
<g id="userContent"></g>
<g id="gCodePreview"></g>
<g id="gCodePreview" data-bind="attr: { transform: scaleMatrixMMtoDisplay() }"></g>
</g>
</svg>

View file

@ -341,7 +341,89 @@ GCODE.renderer = (function(){
ctx.stroke();
};
var drawLayer = function(layerNum, fromProgress, toProgress, isNotCurrentLayer){
var drawLayer = function(layerNum, fromProgress, toProgress, isNotCurrentLayer){
if(GCODE.workingArea){
if (!model || !model[layerNum]) return;
var cmds = model[layerNum];
var x, y;
//~~ find our initial prevX/prevY tuple
if (typeof(cmds[0].prevX) !== 'undefined' && typeof(cmds[0].prevY) !== 'undefined') {
// command contains prevX/prevY values, use those
prevX = cmds[0].prevX; // * zoomFactor;
prevY = -1 * cmds[0].prevY; // * zoomFactor;
} else if (fromProgress > 0) {
// previous command in same layer exists, use x/y as prevX/prevY
prevX = cmds[fromProgress - 1].x; // * zoomFactor;
prevY = -cmds[fromProgress - 1].y; // * zoomFactor;
} else if (model[layerNum - 1]) {
// previous layer exists, use last x/y as prevX/prevY
prevX = undefined;
prevY = undefined;
for (i = model[layerNum-1].length-1; i >= 0; i--) {
if (typeof(prevX) === 'undefined' && typeof(model[layerNum - 1][i].x) !== 'undefined') prevX = model[layerNum - 1][i].x; // * zoomFactor;
if (typeof(prevY) === 'undefined' && typeof(model[layerNum - 1][i].y) !== 'undefined') prevY =- model[layerNum - 1][i].y; // * zoomFactor;
}
}
// if we did not find prevX or prevY, set it to 0 (might be that we are on the first command of the first layer,
// or it's just a very weird model...)
if (typeof(prevX) === 'undefined') prevX = 0;
if (typeof(prevY) === 'undefined') prevY = 0;
//~~ render this layer's commands
var lastLaser = 0;
var points = [];
for (var i = fromProgress; i <= toProgress; i++) {
ctx.lineWidth = 1;
if (typeof(cmds[i]) === 'undefined') continue;
if (typeof(cmds[i].prevX) !== 'undefined' && typeof(cmds[i].prevY) !== 'undefined') {
// override new (prevX, prevY)
prevX = cmds[i].prevX; // * zoomFactor;
prevY = -1 * cmds[i].prevY; // * zoomFactor;
}
// new x
if (typeof(cmds[i].x) === 'undefined' || isNaN(cmds[i].x)) {
x = prevX ;// / zoomFactor;
} else {
x = cmds[i].x;
}
// new y
if (typeof(cmds[i].y) === 'undefined' || isNaN(cmds[i].y)) {
y = prevY;// / zoomFactor;
} else {
y = -cmds[i].y;
}
console.log("cmd", cmds[i]);
if(lastLaser !== cmds[i].laser){
GCODE.workingArea.draw_gcode(points, lastLaser);
console.log("points", points, lastLaser, cmds[i].laser);
points = [[prevX,prevY]];
lastLaser = cmds[i].laser;
}
points.push([x,y]);
prevX = x ;
prevY = y ;
}
GCODE.workingArea.draw_gcode(points, lastLaser);
console.log("final", points, lastLaser);
}
};
var drawLayer2 = function(layerNum, fromProgress, toProgress, isNotCurrentLayer){
var i;
var mdlInfo = GCODE.gCodeReader.getModelInfo();