Compare commits
37 commits
mrbeam
...
stable-1.2
| Author | SHA1 | Date | |
|---|---|---|---|
| ceca65577c | |||
| 47cd5345e8 | |||
| 3a24067560 | |||
|
|
ff8b77500b | ||
|
|
39c8f7886a | ||
|
|
eb5e7408a9 | ||
|
|
0e346add14 | ||
|
|
5a696e01fa | ||
|
|
9311463cfa | ||
|
|
b19477dcfb | ||
|
|
75f69dd0df | ||
|
|
793b009ab6 | ||
|
|
e366b4c805 | ||
|
|
bcfa42a034 | ||
|
|
6c44d8e243 | ||
|
|
24cebced83 | ||
|
|
8e02a97a61 | ||
|
|
4cb819fd7b | ||
|
|
3ffdceb5af | ||
|
|
fffc0c4ecb | ||
|
|
1966a8b68c | ||
|
|
aad5efff2d | ||
|
|
f486a24914 | ||
|
|
179d2571ee | ||
|
|
074140bcd0 | ||
|
|
6641390620 | ||
|
|
12a3f092e2 | ||
|
|
25be52587e | ||
|
|
3bbdd702db | ||
|
|
0c5804e51a | ||
|
|
36837246fe | ||
|
|
16d2e18daa | ||
|
|
6ffcaabbeb | ||
|
|
48f5b659e1 | ||
|
|
9e95f49461 | ||
|
|
020073f3ae | ||
|
|
94c673473b |
16 changed files with 1989 additions and 1902 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
OctoPrint
|
OctoPrint
|
||||||
=========
|
=========
|
||||||
|
What I did was take the MrBeam fork of Octoprint (because I have a MrBeam, and I like it) - and modify it for pen plotting with an axidraw v3 clone.
|
||||||
|
|
||||||
[](https://flattr.com/submit/auto?user_id=foosel&url=https://github.com/foosel/OctoPrint&title=OctoPrint&language=&tags=github&category=software)
|
[](https://flattr.com/submit/auto?user_id=foosel&url=https://github.com/foosel/OctoPrint&title=OctoPrint&language=&tags=github&category=software)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ def update_source(git_executable, folder, target, force=False):
|
||||||
raise RuntimeError("Could not update, \"git reset --hard\" failed with returncode %d: %s" % (returncode, stdout))
|
raise RuntimeError("Could not update, \"git reset --hard\" failed with returncode %d: %s" % (returncode, stdout))
|
||||||
|
|
||||||
print(">>> Running: git pull")
|
print(">>> Running: git pull")
|
||||||
returncode, stdout = _git(["pull"], folder, git_executable=git_executable)
|
returncode, stdout = _git(["pull", "origin", "stable-1.2.2"], folder, git_executable=git_executable)
|
||||||
if returncode != 0:
|
if returncode != 0:
|
||||||
raise RuntimeError("Could not update, \"git pull\" failed with returncode %d: %s" % (returncode, stdout))
|
raise RuntimeError("Could not update, \"git pull\" failed with returncode %d: %s" % (returncode, stdout))
|
||||||
print(stdout)
|
print(stdout)
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ $(function() {
|
||||||
text += "<small>" + gettext("Those components marked with <i class=\"icon-ok\"></i> can be updated directly.") + "</small>";
|
text += "<small>" + gettext("Those components marked with <i class=\"icon-ok\"></i> can be updated directly.") + "</small>";
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
title: gettext("Update Available"),
|
title: gettext("Mr Beam Update Available"),
|
||||||
text: text,
|
text: text,
|
||||||
hide: false
|
hide: false
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ class SvgToGcodePlugin(octoprint.plugin.SlicerPlugin,
|
||||||
feedrate = max(1,data["defaultFeedrate"])
|
feedrate = max(1,data["defaultFeedrate"])
|
||||||
s.set(["defaultFeedrate"], feedrate)
|
s.set(["defaultFeedrate"], feedrate)
|
||||||
if "svgDPI" in data and data["svgDPI"]:
|
if "svgDPI" in data and data["svgDPI"]:
|
||||||
s.set(["svgDPI"], data["svgDPI"])
|
s.set_int(["svgDPI"], data["svgDPI"])
|
||||||
if "debug_logging" in data:
|
if "debug_logging" in data:
|
||||||
old_debug_logging = s.get_boolean(["debug_logging"])
|
old_debug_logging = s.get_boolean(["debug_logging"])
|
||||||
new_debug_logging = data["debug_logging"] in octoprint.settings.valid_boolean_trues
|
new_debug_logging = data["debug_logging"] in octoprint.settings.valid_boolean_trues
|
||||||
|
|
@ -357,6 +357,8 @@ class SvgToGcodePlugin(octoprint.plugin.SlicerPlugin,
|
||||||
converter_path = '/home/teja/workspace/mrbeam-inkscape-ext'
|
converter_path = '/home/teja/workspace/mrbeam-inkscape-ext'
|
||||||
elif("denkbrett" in hostname):
|
elif("denkbrett" in hostname):
|
||||||
converter_path = '/home/flo/mrbeam/git/mrbeam-inkscape-ext'
|
converter_path = '/home/flo/mrbeam/git/mrbeam-inkscape-ext'
|
||||||
|
elif ("clems-Air" in hostname):
|
||||||
|
converter_path = '/Users/clem/Dropbox/mrBeam/mrbeam-inkscape-ext'
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
sys.path.append(converter_path)
|
sys.path.append(converter_path)
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,10 @@ $(function(){
|
||||||
// image engraving stuff
|
// image engraving stuff
|
||||||
// preset values are a good start for wood engraving
|
// preset values are a good start for wood engraving
|
||||||
self.images_placed = ko.observable(false);
|
self.images_placed = ko.observable(false);
|
||||||
|
self.text_placed = ko.observable(false);
|
||||||
self.show_image_parameters = ko.computed(function(){
|
self.show_image_parameters = ko.computed(function(){
|
||||||
return self.images_placed() || (self.fill_areas() && self.show_vector_parameters());
|
return (self.images_placed() || self.text_placed()
|
||||||
|
|| (self.fill_areas() && self.show_vector_parameters()));
|
||||||
});
|
});
|
||||||
self.imgIntensityWhite = ko.observable(0);
|
self.imgIntensityWhite = ko.observable(0);
|
||||||
self.imgIntensityBlack = ko.observable(500);
|
self.imgIntensityBlack = ko.observable(500);
|
||||||
|
|
@ -85,6 +87,7 @@ $(function(){
|
||||||
self.show_vector_parameters(self.workingArea.getPlacedSvgs().length > 0);
|
self.show_vector_parameters(self.workingArea.getPlacedSvgs().length > 0);
|
||||||
self.show_fill_areas_checkbox(self.workingArea.hasFilledVectors())
|
self.show_fill_areas_checkbox(self.workingArea.hasFilledVectors())
|
||||||
self.images_placed(self.workingArea.getPlacedImages().length > 0);
|
self.images_placed(self.workingArea.getPlacedImages().length > 0);
|
||||||
|
self.text_placed(self.workingArea.hasTextItems());
|
||||||
//self.show_image_parameters(self.workingArea.getPlacedImages().length > 0);
|
//self.show_image_parameters(self.workingArea.getPlacedImages().length > 0);
|
||||||
|
|
||||||
if(self.show_vector_parameters() || self.show_image_parameters()){
|
if(self.show_vector_parameters() || self.show_image_parameters()){
|
||||||
|
|
|
||||||
|
|
@ -30,14 +30,15 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
*/
|
*/
|
||||||
Element.prototype.bake = function (toCubics, dec) {
|
Element.prototype.bake = function (toCubics, dec) {
|
||||||
var elem = this;
|
var elem = this;
|
||||||
if (!elem || !elem.paper) // don't handle unplaced elements. this causes double handling.
|
|
||||||
|
if (!elem || !elem.paper || elem.type !== "text" || elem.type !== "#text" || elem.type !== "tspan"){
|
||||||
return;
|
return;
|
||||||
|
} // don't handle unplaced elements. this causes double handling.
|
||||||
|
|
||||||
if (typeof (toCubics) === 'undefined')
|
if (typeof (toCubics) === 'undefined')
|
||||||
toCubics = false;
|
toCubics = false;
|
||||||
if (typeof (dec) === 'undefined')
|
if (typeof (dec) === 'undefined')
|
||||||
dec = 5;
|
dec = 5;
|
||||||
//var children = elem.selectAll('*')
|
|
||||||
var children = elem.children();
|
var children = elem.children();
|
||||||
if (children.length > 0) {
|
if (children.length > 0) {
|
||||||
for (var i = 0; i < children.length; i++) {
|
for (var i = 0; i < children.length; i++) {
|
||||||
|
|
@ -54,14 +55,15 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
elem.type !== "polygon" &&
|
elem.type !== "polygon" &&
|
||||||
elem.type !== "polyline" &&
|
elem.type !== "polyline" &&
|
||||||
elem.type !== "image" &&
|
elem.type !== "image" &&
|
||||||
elem.type !== "path"){
|
elem.type !== "path" &&
|
||||||
|
elem.type !== "text" &&
|
||||||
// if(elem.type !== 'g' && elem.type !== 'desc' && elem.type !== 'defs')
|
elem.type !== "tspan" &&
|
||||||
// console.log('skipping unsupported element ', elem.type);
|
elem.type !== "#text"){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (elem.type == 'image'){
|
|
||||||
|
if (elem.type == 'image' || elem.type == "text" || elem.type == "#text"){
|
||||||
// TODO ...
|
// TODO ...
|
||||||
var x = parseFloat(elem.attr('x')),
|
var x = parseFloat(elem.attr('x')),
|
||||||
y = parseFloat(elem.attr('y')),
|
y = parseFloat(elem.attr('y')),
|
||||||
|
|
@ -89,7 +91,6 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(elem.type !== 'path') console.log("bake: converting " + elem.type + " to path");
|
|
||||||
var path_elem = elem.convertToPath();
|
var path_elem = elem.convertToPath();
|
||||||
|
|
||||||
if (!path_elem || path_elem.attr('d') === '' || path_elem.attr('d') === null)
|
if (!path_elem || path_elem.attr('d') === '' || path_elem.attr('d') === null)
|
||||||
|
|
@ -438,6 +439,19 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
// Possibly the cubed root of 6, but 1.81 works best
|
// Possibly the cubed root of 6, but 1.81 works best
|
||||||
var num = 1.81;
|
var num = 1.81;
|
||||||
var tag = old_element.type;
|
var tag = old_element.type;
|
||||||
|
|
||||||
|
var convertMMtoPixel = function (val) {
|
||||||
|
attrList = ['rx','ry','r','cx','cy','x1','x2','y1','y2','x','y','width','height'];
|
||||||
|
for(var attrIdx in attrList) {
|
||||||
|
if(val.attr(attrList[attrIdx]) != null && val.attr(attrList[attrIdx]).indexOf('mm') > -1) {
|
||||||
|
var tmp = parseFloat(val.attr(attrList[attrIdx])) * 3.5433;
|
||||||
|
val.attr(attrList[attrIdx], tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
convertMMtoPixel(old_element);
|
||||||
|
|
||||||
switch (tag) {
|
switch (tag) {
|
||||||
case 'ellipse':
|
case 'ellipse':
|
||||||
case 'circle':
|
case 'circle':
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(elem.type === 'image'){
|
if(elem.type === 'image' || elem.type === "text" || elem.type === "#text"){
|
||||||
selection.push(elem);
|
selection.push(elem);
|
||||||
} else {
|
} else {
|
||||||
if(fillPaths && elem.is_filled()){
|
if(fillPaths && elem.is_filled()){
|
||||||
|
|
@ -74,7 +74,10 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
elem.type !== "line" &&
|
elem.type !== "line" &&
|
||||||
elem.type !== "polygon" &&
|
elem.type !== "polygon" &&
|
||||||
elem.type !== "polyline" &&
|
elem.type !== "polyline" &&
|
||||||
elem.type !== "path" ){
|
elem.type !== "path" //&&
|
||||||
|
// elem.type !== "text" &&
|
||||||
|
// elem.type !== "#text"
|
||||||
|
){
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -121,7 +124,7 @@ Snap.plugin(function (Snap, Element, Paper, global) {
|
||||||
|
|
||||||
// get svg as dataUrl
|
// get svg as dataUrl
|
||||||
var svgStr = elem.outerSVG();
|
var svgStr = elem.outerSVG();
|
||||||
var svgDataUri = 'data:image/svg+xml;base64,' + window.btoa(svgStr);
|
var svgDataUri = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svgStr))); //deprecated unescape needed!
|
||||||
var source = new Image();
|
var source = new Image();
|
||||||
source.src = svgDataUri;
|
source.src = svgDataUri;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,7 @@ $(function(){
|
||||||
self.clear = function(){
|
self.clear = function(){
|
||||||
snap.selectAll('#userContent>*').remove();
|
snap.selectAll('#userContent>*').remove();
|
||||||
snap.selectAll('#placedGcodes>*').remove();
|
snap.selectAll('#placedGcodes>*').remove();
|
||||||
|
snap.selectAll('rect:not(#coordGrid)').remove();
|
||||||
self.placedDesigns([]);
|
self.placedDesigns([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -132,9 +133,15 @@ $(function(){
|
||||||
};
|
};
|
||||||
|
|
||||||
self.getXYCoord = function(evt){
|
self.getXYCoord = function(evt){
|
||||||
var scale = evt.target.parentElement.transform.baseVal[0].matrix.a;
|
if(/firefox/.test(navigator.userAgent.toLowerCase())) {
|
||||||
var x = self.px2mm(evt.offsetX) * scale;
|
var scale = evt.target.parentElement.transform.baseVal[0].matrix.a;
|
||||||
var y = self.px2mm(parseFloat(evt.target.attributes.height.value) - evt.offsetY) * scale;
|
var x = self.px2mm(evt.offsetX) * scale;
|
||||||
|
var y = self.px2mm(parseFloat(evt.target.attributes.height.value) - evt.offsetY) * scale;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
var x = self.px2mm(evt.offsetX);
|
||||||
|
var y = self.px2mm(parseFloat(evt.target.farthestViewportElement.clientHeight) - evt.offsetY);
|
||||||
|
}
|
||||||
x = Math.min(x, self.workingAreaWidthMM());
|
x = Math.min(x, self.workingAreaWidthMM());
|
||||||
y = Math.min(y, self.workingAreaHeightMM());
|
y = Math.min(y, self.workingAreaHeightMM());
|
||||||
return {x:x, y:y};
|
return {x:x, y:y};
|
||||||
|
|
@ -236,11 +243,26 @@ $(function(){
|
||||||
var url = self._getSVGserveUrl(file);
|
var url = self._getSVGserveUrl(file);
|
||||||
callback = function (f) {
|
callback = function (f) {
|
||||||
var newSvgAttrs = {};
|
var newSvgAttrs = {};
|
||||||
var root_attrs = f.select('svg').node.attributes;
|
if(f.select('svg') == null){
|
||||||
|
root_attrs = f.node.attributes;
|
||||||
|
} else {
|
||||||
|
var root_attrs = f.select('svg').node.attributes;
|
||||||
|
}
|
||||||
var doc_width = null;
|
var doc_width = null;
|
||||||
var doc_height = null;
|
var doc_height = null;
|
||||||
var doc_viewbox = null;
|
var doc_viewbox = null;
|
||||||
|
|
||||||
|
// find clippath elements
|
||||||
|
var clipPathEl = f.selectAll('clipPath');
|
||||||
|
if(clipPathEl.length != 0){
|
||||||
|
console.warn("Warning: removed unsupported clipPath element in SVG");
|
||||||
|
self.svg_contains_clipPath_warning();
|
||||||
|
clipPathEl.remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
// find all elements with "display=none" and remove them
|
||||||
|
f.selectAll("[display=none]").remove()
|
||||||
|
|
||||||
// iterate svg tag attributes
|
// iterate svg tag attributes
|
||||||
for(var i = 0; i < root_attrs.length; i++){
|
for(var i = 0; i < root_attrs.length; i++){
|
||||||
var attr = root_attrs[i];
|
var attr = root_attrs[i];
|
||||||
|
|
@ -256,9 +278,19 @@ $(function(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find Illustrator comment and notify
|
||||||
|
f.node.childNodes.forEach(function(entry) {
|
||||||
|
if(entry.nodeType == 8) { // Nodetype 8 = comment
|
||||||
|
if(entry.textContent.indexOf('Illustrator') > -1) {
|
||||||
|
new PNotify({title: gettext("Illustrator SVG Detected"), text: "Illustrator SVG detected! To preserve coorect scale, please go to the \'Settings\' menu and change the \'SVG dpi\' field under \'Plugins/Svg Conversion\' according to your file. And add it again.", type: "info", hide: false});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// scale matrix
|
// scale matrix
|
||||||
var mat = self.getDocumentViewBoxMatrix(doc_width, doc_height, doc_viewbox);
|
var mat = self.getDocumentViewBoxMatrix(doc_width, doc_height, doc_viewbox);
|
||||||
var scaleMatrixStr = new Snap.Matrix(mat[0][0],mat[0][1],mat[1][0],mat[1][1],mat[0][2],mat[1][2]).toTransformString();
|
var dpiscale = 90 / self.settings.settings.plugins.svgtogcode.svgDPI();
|
||||||
|
var scaleMatrixStr = new Snap.Matrix(mat[0][0],mat[0][1],mat[1][0],mat[1][1],mat[0][2],mat[1][2]).scale(dpiscale).toTransformString();
|
||||||
newSvgAttrs['transform'] = scaleMatrixStr;
|
newSvgAttrs['transform'] = scaleMatrixStr;
|
||||||
|
|
||||||
var newSvg = snap.group(f.selectAll("svg>*"));
|
var newSvg = snap.group(f.selectAll("svg>*"));
|
||||||
|
|
@ -384,8 +416,20 @@ $(function(){
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
self.svg_contains_clipPath_warning = function(){
|
||||||
|
var error = "<p>" + gettext("The SVG file contains clipPath elements.<br/>clipPath is not supported yet and has been removed from file.") + "</p>";
|
||||||
|
//error += pnotifyAdditionalInfo("<pre>" + data.jqXHR.responseText + "</pre>");
|
||||||
|
new PNotify({
|
||||||
|
title: "clipPath elements removed",
|
||||||
|
text: error,
|
||||||
|
type: "warn",
|
||||||
|
hide: false
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
self.svg_contains_text_warning = function(svg){
|
self.svg_contains_text_warning = function(svg){
|
||||||
var error = "<p>" + gettext("The svg file contains text elements.<br/>Please convert them to paths.<br/>Otherwise they will be ignored.") + "</p>";
|
var error = "<p>" + gettext("The SVG file contains text elements.<br/>If you want to laser just their outlines,<br/>please convert them to paths.<br/>Otherwise they will be engraved with infill.") + "</p>";
|
||||||
//error += pnotifyAdditionalInfo("<pre>" + data.jqXHR.responseText + "</pre>");
|
//error += pnotifyAdditionalInfo("<pre>" + data.jqXHR.responseText + "</pre>");
|
||||||
new PNotify({
|
new PNotify({
|
||||||
title: "Text elements found",
|
title: "Text elements found",
|
||||||
|
|
@ -393,7 +437,6 @@ $(function(){
|
||||||
type: "warn",
|
type: "warn",
|
||||||
hide: false
|
hide: false
|
||||||
});
|
});
|
||||||
svg.selectAll('text,tspan').remove();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.svg_misfitting_warning = function(svg, misfitting){
|
self.svg_misfitting_warning = function(svg, misfitting){
|
||||||
|
|
@ -699,6 +742,16 @@ $(function(){
|
||||||
return snap.selectAll("#userContent image");
|
return snap.selectAll("#userContent image");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.hasTextItems = function () {
|
||||||
|
if(snap.selectAll("#userContent tspan").length > 0 ||
|
||||||
|
snap.selectAll("#userContent text").length > 0 ||
|
||||||
|
snap.selectAll("userContent #text").length > 0) {
|
||||||
|
return true
|
||||||
|
}else{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
self.getPlacedGcodes = ko.computed(function() {
|
self.getPlacedGcodes = ko.computed(function() {
|
||||||
var gcodeFiles = [];
|
var gcodeFiles = [];
|
||||||
ko.utils.arrayForEach(self.placedDesigns(), function(design) {
|
ko.utils.arrayForEach(self.placedDesigns(), function(design) {
|
||||||
|
|
@ -821,7 +874,7 @@ $(function(){
|
||||||
for (var i = 0; i < fillings.length; i++) {
|
for (var i = 0; i < fillings.length; i++) {
|
||||||
var item = fillings[i];
|
var item = fillings[i];
|
||||||
|
|
||||||
if (item.type === 'image') {
|
if (item.type === 'image' || item.type === "text" || item.type === "#text") {
|
||||||
// remove filter effects on images for proper rendering
|
// remove filter effects on images for proper rendering
|
||||||
var style = item.attr('style');
|
var style = item.attr('style');
|
||||||
if (style !== null) {
|
if (style !== null) {
|
||||||
|
|
|
||||||
|
|
@ -331,7 +331,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback):
|
||||||
def position(self, x, y):
|
def position(self, x, y):
|
||||||
printer_profile = self._printerProfileManager.get_current_or_default()
|
printer_profile = self._printerProfileManager.get_current_or_default()
|
||||||
movement_speed = min(printer_profile["axes"]["x"]["speed"], printer_profile["axes"]["y"]["speed"])
|
movement_speed = min(printer_profile["axes"]["x"]["speed"], printer_profile["axes"]["y"]["speed"])
|
||||||
self.commands(["G90", "G0 X%.3f Y%.3f F%d" % (x, y, movement_speed), "?"])
|
self.commands(["G90", "G0 X%.3f Y%.3f F%d" % (x, y, movement_speed)])
|
||||||
|
|
||||||
def _convert_rate_value(self, factor, min=0, max=200):
|
def _convert_rate_value(self, factor, min=0, max=200):
|
||||||
if not isinstance(factor, (int, float, long)):
|
if not isinstance(factor, (int, float, long)):
|
||||||
|
|
|
||||||
BIN
src/octoprint/static/img/mr-draw-red_x120.png
Normal file
BIN
src/octoprint/static/img/mr-draw-red_x120.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title data-bind="text: title">Mr Beam</title>
|
<title data-bind="text: title">Mr Draw</title>
|
||||||
|
|
||||||
<link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}">
|
<link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}">
|
||||||
<link rel="apple-touch-icon" sizes="114x114" href="{{ url_for('static', filename='img/apple-touch-icon-114x114.png') }}">
|
<link rel="apple-touch-icon" sizes="114x114" href="{{ url_for('static', filename='img/apple-touch-icon-114x114.png') }}">
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="navbar-header brand" style="min-width: 272px;">
|
<div class="navbar-header brand" style="min-width: 272px;">
|
||||||
<a class="navbar-brand" href="#">
|
<a class="navbar-brand" href="#">
|
||||||
<img alt="Mr Beam Logo" src="{{ url_for('static', filename='img/mr-typo-red_x120.png') }}">
|
<img alt="Mr Draw Logo" src="{{ url_for('static', filename='img/mr-draw-red_x120.png') }}">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<!-- Navbar -->
|
<!-- Navbar -->
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
|
|
||||||
<div id="control" class="accordion-inner" data-bind="visible: isReady() || isLocked() || isFlashing()">
|
<div id="control" class="accordion-inner" data-bind="visible: isReady() || isLocked() || isFlashing()">
|
||||||
<div data-bind="visible: isLocked ">
|
<div data-bind="visible: isLocked ">
|
||||||
Mr Beam is in a locked state as it does not know its position.
|
Mr Draw is in a locked state as it does not know its position.
|
||||||
First remove any objects blocking the gantry's travel range.
|
First remove any objects blocking the gantry's travel range.
|
||||||
Then do a homing cycle.
|
Then do a homing cycle.
|
||||||
<div style='text-align: center; padding:.5em;'>
|
<div style='text-align: center; padding:.5em;'>
|
||||||
|
|
@ -657,12 +657,10 @@
|
||||||
<div class="span4">
|
<div class="span4">
|
||||||
<ul class="focus_steps">
|
<ul class="focus_steps">
|
||||||
<li>1. Place your material on the working area</li>
|
<li>1. Place your material on the working area</li>
|
||||||
<li>2. Move the laser over the material</li>
|
<li>2. Move the pen over the material</li>
|
||||||
<li>3. Put on your safety glasses</li>
|
<li>→ Now enable the pen calibration mode</li>
|
||||||
<li>4. Turn the laser safety switch to on</li>
|
<li>5. Adjust the pen until it touches the paper</li>
|
||||||
<li>→ Now enable the focus mode</li>
|
<li>→ Disable the pen calibration mode. </li>
|
||||||
<li>5. Adjust the focus until the laser beam is as small as possible</li>
|
|
||||||
<li>→ Disable the focus mode. </li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<div class="btn-group" role="group" aria-label="focus mode control" style="">
|
<div class="btn-group" role="group" aria-label="focus mode control" style="">
|
||||||
|
|
|
||||||
|
|
@ -568,8 +568,8 @@ msgstr ""
|
||||||
"aktualisiert werden."
|
"aktualisiert werden."
|
||||||
|
|
||||||
#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:131
|
#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:131
|
||||||
msgid "Update Available"
|
msgid "Mr Beam Update Available"
|
||||||
msgstr "Aktualisierung verfügbar"
|
msgstr "Mr Beam Aktualisierung verfügbar"
|
||||||
|
|
||||||
#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:143
|
#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:143
|
||||||
msgid "Ignore"
|
msgid "Ignore"
|
||||||
|
|
|
||||||
|
|
@ -1169,6 +1169,9 @@ class PrintingGcodeFileInformation(PrintingFileInformation):
|
||||||
|
|
||||||
if not os.path.exists(self._filename) or not os.path.isfile(self._filename):
|
if not os.path.exists(self._filename) or not os.path.isfile(self._filename):
|
||||||
raise IOError("File %s does not exist" % self._filename)
|
raise IOError("File %s does not exist" % self._filename)
|
||||||
|
|
||||||
|
self._stripCommments()
|
||||||
|
|
||||||
self._size = os.stat(self._filename).st_size
|
self._size = os.stat(self._filename).st_size
|
||||||
self._pos = 0
|
self._pos = 0
|
||||||
|
|
||||||
|
|
@ -1222,6 +1225,16 @@ class PrintingGcodeFileInformation(PrintingFileInformation):
|
||||||
self._logger.exception("Exception while processing line")
|
self._logger.exception("Exception while processing line")
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
def _stripCommments(self):
|
||||||
|
dir = os.path.dirname(os.path.abspath(self._filename))
|
||||||
|
tmpfile = open(dir + '/gcode.tmp', 'w')
|
||||||
|
with open(self._filename, "r") as fileobject:
|
||||||
|
for line in fileobject:
|
||||||
|
if process_gcode_line(line) is not None:
|
||||||
|
tmpfile.write(line)
|
||||||
|
tmpfile.close()
|
||||||
|
self._filename = dir + '/gcode.tmp'
|
||||||
|
|
||||||
def convert_pause_triggers(configured_triggers):
|
def convert_pause_triggers(configured_triggers):
|
||||||
triggers = {
|
triggers = {
|
||||||
"enable": [],
|
"enable": [],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue