Merge branch 'stable-1.2.2' into v2_proto

This commit is contained in:
make-ing 2016-03-23 16:24:20 +01:00
commit b105047cad
4 changed files with 85 additions and 39 deletions

View file

@ -70,12 +70,14 @@ Snap.plugin(function (Snap, Element, Paper, global) {
// Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:
// If 'x' and 'y' are not specified, then set both to 0. // CorelDraw is creating that sometimes
if (!isFinite(x))
if (!isFinite(x)) {
console.log('No attribute "x" in image tag. Assuming 0.')
x = 0;
if (!isFinite(y))
}
if (!isFinite(y)) {
console.log('No attribute "y" in image tag. Assuming 0.')
y = 0;
}
var transform = elem.transform();
var matrix = transform['totalMatrix'];
var transformedX = matrix.x(x, y);

View file

@ -345,7 +345,7 @@ $(function(){
dx = -svgBB.x + 0.01;
outside = true;
} else if(svgBB.x2 > waBB.x2){
dx = -svgBB.x2 + waBB.x2 - 0.01;
dx = -svgBB.x + 0.01;
outside = true;
}
if(svgBB.y < waBB.y){
@ -390,7 +390,7 @@ $(function(){
});
};
self.placeIMG = function (file) {
var url = self._getIMGserveUrl(file);
var img = new Image();
@ -426,10 +426,16 @@ $(function(){
};
self.getUsefulDimensions = function(wpx, hpx){
var maxWidthMM = wpx * 0.25; // TODO parametrize
var aspectRatio = wpx / hpx;
var destWidthMM = Math.min(self.workingAreaWidthMM() - 2, maxWidthMM);
var destHeightMM = destWidthMM / aspectRatio;
var maxWidthMM = wpx * 0.25; // TODO parametrize
var maxHeightMM = hpx * 0.25; // TODO parametrize
var aspectRatio = wpx / hpx;
var destWidthMM = Math.min(self.workingAreaWidthMM() - 2, maxWidthMM);
var destHeightMM = Math.min(self.workingAreaHeightMM() - 2, maxHeightMM);
if ((destWidthMM / aspectRatio) > destHeightMM) {
destWidthMM = destHeightMM * aspectRatio;
} else {
destHeightMM = destWidthMM / aspectRatio;
}
var destWidthPT = self.mm2svgUnits(destWidthMM);
var destHeightPT = self.mm2svgUnits(destHeightMM);
return [destWidthPT, destHeightPT];
@ -632,13 +638,13 @@ $(function(){
var userContent = snap.select("#userContent").clone();
compSvg.append(userContent);
self.renderInfill(compSvg, fillAreas, wMM, hMM, 10, function(svgWithRenderedInfill){
callback( self._wrapInSvgAndScale(svgWithRenderedInfill));
$('#compSvg').remove();
});
};
self._wrapInSvgAndScale = function(content){
var svgStr = content.innerSVG();
if(svgStr !== ''){
@ -721,7 +727,7 @@ $(function(){
self.clear_gcode = function(){
snap.select('#gCodePreview').clear();
};
self.onStartup = function(){
self.state.workingArea = self;
self.files.workingArea = self;
@ -754,11 +760,16 @@ $(function(){
}
});
};
self._embedAllImages = function(svg, callback){
var allImages = svg.selectAll('image');
var linkedImages = allImages.items.filter(function(i){ return !i.attr('href').startsWith('data:') });
var linkedImages = allImages.items.filter(function(i){
if(i.attr('xlink:href') != null) {
return !i.attr('xlink:href').startsWith('data:');
} else if(i.attr('href') != null) {
return !i.attr('href').startsWith('data:');
}});
if(linkedImages.length > 0){
var callbackCounter = linkedImages.length;
for (var i = 0; i < linkedImages.length; i++) {
@ -790,7 +801,7 @@ $(function(){
var fillings = userContent.removeUnfilled(fillAreas);
for (var i = 0; i < fillings.length; i++) {
var item = fillings[i];
if (item.type === 'image') {
// remove filter effects on images for proper rendering
var style = item.attr('style');

View file

@ -217,6 +217,8 @@ $(function() {
$("#confirmation_dialog .confirmation_dialog_acknowledge").click(
function (e) {
if (typeof callback === 'function') {
self.resetOverrideSlider();
self.numberOfPasses(1);
callback(e);
$("#confirmation_dialog").modal("hide");
$("#confirmation_dialog .confirmation_dialog_message").html('');
@ -286,8 +288,14 @@ $(function() {
self.onEventRealTimeState = function(payload){
self.currentPos({x: payload.wx, y: payload.wy});
};
self.intensityOverride.subscribe(function(factor){
self._overrideCommand("/intensity "+factor);
});
self.feedrateOverride.subscribe(function(factor){
self._overrideCommand("/feedrate "+factor);
});
self._overrideCommand = function(command, callback) {
$.ajax({
url: API_BASEURL + "printer/command",
@ -302,34 +310,30 @@ $(function() {
}
});
};
self._configureOverrideSliders = function() {
self.intensityOverrideSlider = $("#intensity_override_slider").slider({
step: 1,
min: 10,
max: 200,
value: 100,
tooltip: 'hide'
}).on("slide", function(ev){
self.intensityOverride(ev.value);
// tooltip: 'hide'
}).on("slideStop", function(ev){
self._overrideCommand("/intensity "+self.intensityOverride());
self.intensityOverride(ev.value);
});
self.feedrateOverrideSlider = $("#feedrate_override_slider").slider({
step: 1,
min: 10,
max: 200,
value: 100,
tooltip: 'hide'
}).on("slide", function(ev){
self.feedrateOverride(ev.value);
// tooltip: 'hide'
}).on("slideStop", function(ev){
self._overrideCommand("/feedrate "+self.feedrateOverride());
self.feedrateOverride(ev.value);
});
};
self.increasePasses = function(){
self.numberOfPasses(self.numberOfPasses()+1);
self._jobCommand("incpasses");
@ -339,17 +343,21 @@ $(function() {
self.numberOfPasses(passes);
self._jobCommand("degpasses");
}
self.onEventPrintDone = function(){
self.feedrateOverrideSlider.slider('setValue', 100);
self.resetOverrideSlider();
};
self.onStartup = function() {
self._configureOverrideSliders();
};
self.resetOverrideSlider = function() {
self.feedrateOverrideSlider.slider('setValue', 100);
self.intensityOverrideSlider.slider('setValue', 100);
self.intensityOverride(100);
self.feedrateOverride(100);
};
self.onStartup = function() {
self._configureOverrideSliders();
};
}
OCTOPRINT_VIEWMODELS.push([

View file

@ -84,6 +84,8 @@ class MachineCom(object):
self._actual_intensity = None
self._feedrate_dict = {}
self._intensity_dict = {}
self._passes = 1
self._finished_passes = 0
# regular expressions
self._regex_command = re.compile("^\s*\$?([GM]\d+|[TH])")
@ -164,8 +166,15 @@ class MachineCom(object):
if cmd is not None:
self.sendCommand(cmd)
self._callback.on_comm_progress()
elif len(self._acc_line_buffer) == 0:
self._set_print_finished()
else:
if self._finished_passes >= self._passes:
if len(self._acc_line_buffer) == 0:
self._set_print_finished()
self._currentFile.resetToBeginning()
cmd = self._getNext()
if cmd is not None:
self.sendCommand(cmd)
self._callback.on_comm_progress()
self._sendCommand()
self._send_event.wait(1)
@ -311,7 +320,9 @@ class MachineCom(object):
if self._finished_currentFile is False:
line = self._currentFile.getNext()
if line is None:
self._finished_currentFile = True
self._finished_passes += 1
if self._finished_passes >= self._passes:
self._finished_currentFile = True
return line
else:
return None
@ -830,6 +841,12 @@ class MachineCom(object):
if self._currentFile is None:
raise ValueError("No file selected for printing")
# reset feedrate and intesity factor in case they where changed in a previous run
self._feedrate_factor = 1
self._intensity_factor = 1
self._passes = 1
self._finished_passes = 0
try:
# ensure fan is on whatever gcode follows.
self.sendCommand("M08")
@ -900,10 +917,12 @@ class MachineCom(object):
eventManager().fire(Events.PRINT_PAUSED, payload)
def increasePasses(self):
self._log("increase Passes")
self._passes += 1
self._log("increased Passes to %d" % self._passes)
def degreasePasses(self):
self._log("degrease Passes")
self._passes -= 1
self._log("degrease Passes to %d" % self._passes)
def getStateString(self):
if self._state == self.STATE_NONE:
@ -1167,6 +1186,12 @@ class PrintingGcodeFileInformation(PrintingFileInformation):
pass
self._handle = None
def resetToBeginning(self):
"""
resets the file handle so you can read from the beginning again.
"""
self._handle = open(self._filename, "r")
def getNext(self):
"""
Retrieves the next line for printing.