add laser on/off gcode. cleanup help, export dialogs

This commit is contained in:
Stewart Allen 2020-03-13 12:31:10 -04:00
commit eb381f3417
13 changed files with 149 additions and 93 deletions

View file

@ -387,7 +387,14 @@ var gs_base = exports;
offsetPrecision : offsetPrecision, offsetPrecision : offsetPrecision,
intersectRayLine : intersectRayLine, intersectRayLine : intersectRayLine,
intersect : intersect, intersect : intersect,
determinant : determinant determinant : determinant,
comma: (v) => {
let [lt,rt] = v.toString().split('.');
lt = lt.toString().split('').reverse().map((v,i,a) => {
return (i < a.length - 1 && i % 3 === 2) ? `,${v}` : v
}).reverse().join('');
return rt ? `${lt}.${rt}` : lt;
}
}; };
})(); })();

View file

@ -193,6 +193,12 @@ var gs_kiri_conf = exports;
d:{ d:{
bedWidth: 1, bedWidth: 1,
bedDepth: 1, bedDepth: 1,
gcodePre: 1,
gcodePost: 1,
gcodeFExt: 1,
gcodeSpace: 1,
gcodeLaserOn: 1,
gcodeLaserOff: 1
}, },
// fields permitted in Laser:Process // fields permitted in Laser:Process
p:{ p:{
@ -289,12 +295,14 @@ var gs_kiri_conf = exports;
gcodeFan: "", // FDM fan command gcodeFan: "", // FDM fan command
gcodeTrack: "", // FDM progress command gcodeTrack: "", // FDM progress command
gcodeLayer: "", // FDM layer output gcodeLayer: "", // FDM layer output
gcodeFExt: "", // CAM file extension
gcodeSpace: "", // CAM token spacing
gcodeStrip: true, // CAM strip comments
gcodeDwell: ["G4 P{time}"], // CAM dwell script gcodeDwell: ["G4 P{time}"], // CAM dwell script
gcodeChange: ["M6 T{tool}"], // CAM tool change script gcodeChange: ["M6 T{tool}"], // CAM tool change script
gcodeSpindle: ["M3 S{speed}"], // CAM spindle speed gcodeSpindle: ["M3 S{speed}"], // CAM spindle speed
gcodeFExt: "", // CAM file extension gcodeLaserOn: ["M106 S{power}"],// LASER turn on
gcodeSpace: "", // CAM token spacing gcodeLaserOff: ["M107"] // LASER turn off
gcodeStrip: true // CAM strip comments
}, },
// FDM/CAM/Laser // FDM/CAM/Laser
process:{ process:{

View file

@ -290,37 +290,52 @@ let gs_kiri_laser = exports;
* *
*/ */
function exportGCode(print) { function exportGCode(print) {
let lines = [], dx = 0, dy = 0, feedrate, laser_on; let lines = [], dx = 0, dy = 0, feedrate;
let dev = print.settings.device;
let space = dev.gcodeSpace;
let power = 255;
let laser_on = dev.gcodeLaserOn || [];
let laser_off = dev.gcodeLaserOff || [];
exportElements( exportElements(
print, print,
function(min, max, power, speed) { function(min, max, power, speed) {
let width = (max.x - min.x), let width = (max.x - min.x),
height = (max.y - min.y); height = (max.y - min.y);
dx = min.x; dx = min.x;
dy = min.y; dy = min.y;
feedrate = " F" + speed, feedrate = `${space}F${speed}`;
laser_on = "M106 S" + UTIL.round(256 * (power / 100), 3); power = (256 * (power / 100)).toFixed(3);
// pre
(dev.gcodePre || []).forEach(line => {
lines.push(line);
});
}, },
function(poly, color) { function(poly, color) {
poly.forEach(function(point, index) { poly.forEach(function(point, index) {
if (index === 0) { if (index === 0) {
lines.push("G0 " + point); lines.push(`G0${space}${point}`);
} else if (index === 1) { } else if (index === 1) {
lines.push(laser_on); laser_on.forEach(line => {
lines.push("G1 " + point + feedrate); lines.push(line.replace('{power}', power));
});
lines.push(`G1${space}${point}${feedrate}`);
} else { } else {
lines.push("G1 " + point); lines.push(`G1${space}${point}`);
} }
}); });
lines.push("M107"); laser_off.forEach(line => {
lines.push(line);
});
}, },
function() { function() {
// post (dev.gcodePost || []).forEach(line => {
lines.push(line);
});
}, },
function(point) { function(point) {
return "X" + UTIL.round(point.x - dx, 3) + " Y" + UTIL.round(point.y - dy, 3); return `X${(point.x - dx, 3).toFixed(3)}${space}Y${(point.y - dy, 3).toFixed(3)}`;
} }
); );
@ -333,6 +348,7 @@ let gs_kiri_laser = exports;
function exportSVG(print, cut_color) { function exportSVG(print, cut_color) {
let lines = [], dx = 0, dy = 0, my; let lines = [], dx = 0, dy = 0, my;
let colors = [ let colors = [
"black",
"purple", "purple",
"blue", "blue",
"red", "red",
@ -340,8 +356,7 @@ let gs_kiri_laser = exports;
"yellow", "yellow",
"green", "green",
"brown", "brown",
"gray", "gray"
"black"
]; ];
exportElements( exportElements(

View file

@ -10,6 +10,8 @@ let gs_kiri_export = exports;
if (self.kiri.export) return; if (self.kiri.export) return;
let KIRI = self.kiri, let KIRI = self.kiri,
BASE = self.base,
UTIL = BASE.util,
API = KIRI.api, API = KIRI.api,
SDB = API.sdb, SDB = API.sdb,
UI = API.ui, UI = API.ui,
@ -76,7 +78,7 @@ let gs_kiri_export = exports;
currentPrint.output.forEach(layer => { segments += layer.length }); currentPrint.output.forEach(layer => { segments += layer.length });
UI.print.innerHTML = html; UI.print.innerHTML = html;
$('print-filename').value = filename; $('print-filename').value = filename;
$('print-lines').value = segments; $('print-lines').value = UTIL.comma(segments);
$('print-close').onclick = API.modal.hide; $('print-close').onclick = API.modal.hide;
$('print-svg').onclick = download_svg; $('print-svg').onclick = download_svg;
$('print-dxf').onclick = download_dxf; $('print-dxf').onclick = download_dxf;
@ -353,9 +355,18 @@ let gs_kiri_export = exports;
function calcWeight() { function calcWeight() {
try { try {
let density = $('print-density');
$('print-weight').value = ( $('print-weight').value = (
UTIL.round((Math.PI * UTIL.sqr(currentPrint.settings.device.filamentSize/2)) * currentPrint.distance * 1.25 / 1000, 2) (Math.PI * UTIL.sqr(
); currentPrint.settings.device.filamentSize / 2
)) *
currentPrint.distance *
(parseFloat(density.value) || 1.25) /
1000
).toFixed(2);
density.onkeyup = (ev) => {
if (ev.key === 'Enter') calcWeight();
};
} catch (e) { } } catch (e) { }
} }
@ -381,7 +392,7 @@ let gs_kiri_export = exports;
$('print-filament-row').style.display = MODE === MODES.FDM ? '' : 'none'; $('print-filament-row').style.display = MODE === MODES.FDM ? '' : 'none';
$('mill-info').style.display = MODE === MODES.CAM ? '' : 'none'; $('mill-info').style.display = MODE === MODES.CAM ? '' : 'none';
$('print-filename').value = filename; $('print-filename').value = filename;
$('print-filesize').value = currentPrint.bytes; $('print-filesize').value = UTIL.comma(currentPrint.bytes);
$('print-filament').value = Math.round(currentPrint.distance); $('print-filament').value = Math.round(currentPrint.distance);
$('grid-host').onkeyup = gridhost_probe; $('grid-host').onkeyup = gridhost_probe;
$('grid-apik').onkeyup = gridhost_probe; $('grid-apik').onkeyup = gridhost_probe;

View file

@ -118,14 +118,16 @@ var gs_kiri_init = exports;
setDeviceTrack: UC.newInput(LANG.dev_prog, {title:LANG.dev_prog_desc, modes:FDM, size:17}), setDeviceTrack: UC.newInput(LANG.dev_prog, {title:LANG.dev_prog_desc, modes:FDM, size:17}),
setDeviceLayer: UC.newText(LANG.dev_layer, {title:LANG.dev_layer_desc, modes:FDM, size:14, height: 2}), setDeviceLayer: UC.newText(LANG.dev_layer, {title:LANG.dev_layer_desc, modes:FDM, size:14, height: 2}),
setDeviceToken: UC.newBoolean(LANG.dev_token, null, {title:LANG.dev_token_desc, modes:CAM_LASER}), setDeviceToken: UC.newBoolean(LANG.dev_token, null, {title:LANG.dev_token_desc, modes:CAM_LASER}),
setDeviceStrip: UC.newBoolean(LANG.dev_strip, null, {title:LANG.dev_strip_desc, modes:CAM_LASER}), setDeviceStrip: UC.newBoolean(LANG.dev_strip, null, {title:LANG.dev_strip_desc, modes:CAM}),
setDeviceFExt: UC.newInput(LANG.dev_fext, {title:LANG.dev_fext_desc, modes:CAM_LASER, size:7}), setDeviceFExt: UC.newInput(LANG.dev_fext, {title:LANG.dev_fext_desc, modes:CAM_LASER, size:7}),
setDeviceDwell: UC.newText(LANG.dev_dwell, {title:LANG.dev_dwell_desc, modes:CAM, size:14, height:2}), setDeviceDwell: UC.newText(LANG.dev_dwell, {title:LANG.dev_dwell_desc, modes:CAM, size:14, height:2}),
setDeviceChange: UC.newText(LANG.dev_tool, {title:LANG.dev_tool_desc, modes:CAM, size:14, height:2}), setDeviceChange: UC.newText(LANG.dev_tool, {title:LANG.dev_tool_desc, modes:CAM, size:14, height:2}),
setDeviceSpindle: UC.newText(LANG.dev_speed, {title:LANG.dev_speed_desc, modes:CAM, size:14, height:2}), setDeviceSpindle: UC.newText(LANG.dev_speed, {title:LANG.dev_speed_desc, modes:CAM, size:14, height:2}),
setDevicePause: UC.newText(LANG.dev_pause, {title:LANG.dev_pause_desc, modes:FDM, size:14, height:3}), setDevicePause: UC.newText(LANG.dev_pause, {title:LANG.dev_pause_desc, modes:FDM, size:14, height:3}),
setDevicePre: UC.newText(LANG.dev_head, {title:LANG.dev_head_desc, xmodes:FDM_CAM, size:14, height:3}), setDeviceLaserOn: UC.newText(LANG.dev_lzon, {title:LANG.dev_lzon_desc, modes:LASER, size:14, height:3}),
setDevicePost: UC.newText(LANG.dev_foot, {title:LANG.dev_foot_desc, xmodes:FDM_CAM, size:14, height:3}), setDeviceLaserOff: UC.newText(LANG.dev_lzof, {title:LANG.dev_lzof_desc, modes:LASER, size:14, height:3}),
setDevicePre: UC.newText(LANG.dev_head, {title:LANG.dev_head_desc, modes:ALL, size:14, height:3}),
setDevicePost: UC.newText(LANG.dev_foot, {title:LANG.dev_foot_desc, modes:ALL, size:14, height:3}),
tools: $('tools'), tools: $('tools'),
toolsSave: $('tools-save'), toolsSave: $('tools-save'),
@ -879,6 +881,8 @@ var gs_kiri_init = exports;
post: UI.setDevicePost.value.split('\n'), post: UI.setDevicePost.value.split('\n'),
pause: UI.setDevicePause.value.split('\n'), pause: UI.setDevicePause.value.split('\n'),
dwell: UI.setDeviceDwell.value.split('\n'), dwell: UI.setDeviceDwell.value.split('\n'),
'laser-on': UI.setDeviceLaserOn.value.split('\n'),
'laser-off': UI.setDeviceLaserOff.value.split('\n'),
'tool-change': UI.setDeviceChange.value.split('\n'), 'tool-change': UI.setDeviceChange.value.split('\n'),
'file-ext': UI.setDeviceFExt.value, 'file-ext': UI.setDeviceFExt.value,
'token-space': UI.setDeviceToken.checked ? ' ' : '', 'token-space': UI.setDeviceToken.checked ? ' ' : '',
@ -927,7 +931,9 @@ var gs_kiri_init = exports;
gcodeChange: valueOf(code['tool-change'], []), gcodeChange: valueOf(code['tool-change'], []),
gcodeFExt: valueOf(code['file-ext'], 'gcode'), gcodeFExt: valueOf(code['file-ext'], 'gcode'),
gcodeSpace: valueOf(code['token-space'], ''), gcodeSpace: valueOf(code['token-space'], ''),
gcodeStrip: valueOf(code['strip-comments'], false) gcodeStrip: valueOf(code['strip-comments'], false),
gcodeLaserOn: valueOf(code['laser-on'], []),
gcodeLaserOff: valueOf(code['laser-off'], [])
}; };
let dev = current.device, let dev = current.device,
@ -961,6 +967,9 @@ var gs_kiri_init = exports;
UI.setDeviceFExt.value = dev.gcodeFExt; UI.setDeviceFExt.value = dev.gcodeFExt;
UI.setDeviceToken.checked = dev.gcodeSpace ? true : false; UI.setDeviceToken.checked = dev.gcodeSpace ? true : false;
UI.setDeviceStrip.checked = dev.gcodeStrip; UI.setDeviceStrip.checked = dev.gcodeStrip;
// LASER
UI.setDeviceLaserOn.value = dev.gcodeLaserOn.join('\n');
UI.setDeviceLaserOff.value = dev.gcodeLaserOff.join('\n');
// disable editing for non-local devices // disable editing for non-local devices
[ [
@ -986,7 +995,9 @@ var gs_kiri_init = exports;
UI.setDeviceChange, UI.setDeviceChange,
UI.setDeviceFExt, UI.setDeviceFExt,
UI.setDeviceToken, UI.setDeviceToken,
UI.setDeviceStrip UI.setDeviceStrip,
UI.setDeviceLaserOn,
UI.setDeviceLaserOff
].forEach(function(e) { ].forEach(function(e) {
e.disabled = !local; e.disabled = !local;
}); });
@ -1002,7 +1013,7 @@ var gs_kiri_init = exports;
e.parentNode.style.display = dev.spindleMax >= 0 ? 'none' : 'block'; e.parentNode.style.display = dev.spindleMax >= 0 ? 'none' : 'block';
}); });
UI.deviceSave.disabled = UI.deviceSave.disabled = !local;
UI.deviceDelete.disabled = !local; UI.deviceDelete.disabled = !local;
API.view.update_fields(); API.view.update_fields();
@ -1076,18 +1087,26 @@ var gs_kiri_init = exports;
UI.deviceSelect.innerHTML = ''; UI.deviceSelect.innerHTML = '';
let incr = 0; let incr = 0;
let faves = API.show.favorites();
let found = false; let found = false;
let first = devices[0]; let first = devices[0];
// run through the list up to twice forcing faves off
// the second time if incr === 0 (no devices shown)
// if incr > 0, second loop is avoided
for (let rep=0; rep<2; rep++)
if (incr === 0)
devices.forEach(function(device, index) { devices.forEach(function(device, index) {
let opt = DOC.createElement('option'), // force faves off for second try
fav = isFavoriteDevice(device), if (rep === 1) faves = false;
let fav = isFavoriteDevice(device),
loc = isLocalDevice(device); loc = isLocalDevice(device);
if (API.show.favorites() && !(fav || loc)) { if (faves && !(fav || loc)) {
return; return;
} }
if (incr === 0) { if (incr === 0) {
first = device; first = device;
} }
let opt = DOC.createElement('option');
opt.appendChild(DOC.createTextNode(device)); opt.appendChild(DOC.createTextNode(device));
opt.onclick = function() { opt.onclick = function() {
selectDevice(device); selectDevice(device);
@ -1328,7 +1347,7 @@ var gs_kiri_init = exports;
function showDevices() { function showDevices() {
if (deviceLock) return; if (deviceLock) return;
API.modal.hide();
API.ajax("/api/filters-"+API.mode.get_lower(), function(flvalue) { API.ajax("/api/filters-"+API.mode.get_lower(), function(flvalue) {
if (!flvalue) return; if (!flvalue) return;
renderDevices(js2o(flvalue)); renderDevices(js2o(flvalue));
@ -1647,6 +1666,8 @@ var gs_kiri_init = exports;
API.space.restore(ondone) || checkSeed(ondone) || ondone(); API.space.restore(ondone) || checkSeed(ondone) || ondone();
// extend API
API.show.devices = showDevices;
}; };
})(); })();

View file

@ -90,7 +90,11 @@ var gs_kiri_lang = exports;
dev_head: "header", dev_head: "header",
dev_head_desc: "gcode header script", dev_head_desc: "gcode header script",
dev_foot: "footer", dev_foot: "footer",
dev_foot_desc: "gcode footer script" dev_foot_desc: "gcode footer script",
dev_lzon: "laser on",
dev_lzon_desc: "gcode laser on script",
dev_lzof: "laser off",
dev_lzof_desc: "gcode laser off script"
}; };

View file

@ -1,20 +1,24 @@
# Kiri:Moto todo # Kiri:Moto todo
* hide the bed with a checkbox? indication of part outside printable area? ## `C` cosmetic, `F` functional, `P` performance
* set page background color? or dark mode?
* better small screen support (on screen button for hiding side panels, compact selectors) * `C` hide the bed with a checkbox? indication of part outside printable area?
* widget general add-ons (fdm supports, cam tabs) * `C` set page background color? or dark mode?
* extend mesh object to store raw + annotations (rot,scale,pos) * `C` better small screen support (on screen button for hiding side panels, compact selectors)
* `F` widget general add-ons (fdm supports, cam tabs)
* `F` extend mesh object to store raw + annotations (rot,scale,pos)
* share raw data w/ dups, encode/decode * share raw data w/ dups, encode/decode
* bail on decimation if it's proving ineffective * `F` remember object's original position/orientation for reset/multi-object import alignment
* improve decimation speed by avoiding in/out of Point * `P` bail on decimation if it's proving ineffective
* server-side processing (determine protocol and storage) * `P` improve decimation speed by avoiding in/out of Point
* refactor / simplify POLY.expand (put onus on collector) * `P` server-side processing (determine protocol and storage)
* cloned objects should share same slice data unless rotated * `P` refactor / simplify POLY.expand (put onus on collector)
* remember object's original position/orientation for reset/multi-object import alignment * `P` cloned objects should share same slice data unless rotated
# FDM todo # FDM
* polishing and other non-planar work
* manual support addition / control
* gradient infill https://www.youtube.com/watch?v=hq53gsYREHU&feature=emb_logo * gradient infill https://www.youtube.com/watch?v=hq53gsYREHU&feature=emb_logo
* disable infill fingerprinting for gyroids * disable infill fingerprinting for gyroids
* first layer segment large flat areas for better fill reliability * first layer segment large flat areas for better fill reliability
@ -29,12 +33,11 @@
* fix wrong first point in general (all modes) * fix wrong first point in general (all modes)
* trim support offset from layer below * trim support offset from layer below
* feather sharp tips by reducing extrusion in area of overlap * feather sharp tips by reducing extrusion in area of overlap
* dual extruder support * dual extruder and swapping extruder support
* add manual supports
* option to support interior bridges when 0% infill * option to support interior bridges when 0% infill
* fix multiple part layout export offset (resend position @ print time) * fix multiple part layout export offset (resend position @ print time)
# CAM todo # CAM
* refactor slicing around flats w/ interpolation instead of culling * refactor slicing around flats w/ interpolation instead of culling
* optimize away topo generation (for z hop/move) when part is flat * optimize away topo generation (for z hop/move) when part is flat
@ -57,31 +60,12 @@
* linear x/y not obeying inset from pocket only * linear x/y not obeying inset from pocket only
* check normals for downward facing facets. mark top for slice skirt/pancake * check normals for downward facing facets. mark top for slice skirt/pancake
# Laser todo # Laser
* add proper devices
* color coding according to # of identical polys that show up in stacked layers
* overcuts, radii for drag knives * overcuts, radii for drag knives
* sla :: svg modified from http://garyhodgson.github.io/slic3rsvgviewer/?file=examples/belt_pulley3.svg
# References # References
* other
-----
* http://lcamtuf.coredump.cx/gcnc/full/ * http://lcamtuf.coredump.cx/gcnc/full/
* http://wiki.imal.org/howto/cnc-milling-introduction-cutting-tools * http://wiki.imal.org/howto/cnc-milling-introduction-cutting-tools
* http://www.twak.co.uk/2011/01/degeneracy-in-weighted-straight.html * http://www.twak.co.uk/2011/01/degeneracy-in-weighted-straight.html
# Sample FDM Pause/Unpause ```
G91 ; Relative Positioning
G0 Z20 ; Move Bed down 20mm
G90 ; Absolute positioning
G0 X10 Y10 ; Move to 10,10
M2000 ; Raise3D N2 Pause command
G91 ; Relative Positioning
G0 Z-20 ; Move Bed up 20mm
G90 ; Absolute positioning
```

View file

@ -1,13 +1,18 @@
{ {
"file-ext": "gcode", "file-ext": "gcode",
"token-space": " ", "token-space": " ",
"strip-comments": false,
"pre":[ "pre":[
"G21 ; set units to MM (required)", "G21 ; set units to MM (required)",
"G90 ; absolute position mode (required)" "G90 ; absolute position mode (required)"
], ],
"post":[ "post":[
"M30 ; program end" "M30 ; program end"
],
"laser-on":[
"M106 S{power}"
],
"laser-off":[
"M107"
], ],
"settings": { "settings": {
"bed_width": 300, "bed_width": 300,

View file

@ -1,14 +1,10 @@
{ {
"file-ext": "gcode", "file-ext": "gcode",
"token-space": " ", "token-space": " ",
"strip-comments": false, "pre":[],
"pre":[ "post":[],
"G21 ; set units to MM (required)", "laser-on":[],
"G90 ; absolute position mode (required)" "laser-off":[],
],
"post":[
"M30 ; program end"
],
"settings": { "settings": {
"bed_width": 500, "bed_width": 500,
"bed_depth": 300 "bed_depth": 300

View file

@ -23,19 +23,22 @@
<b>File Load & Import</b> <b>File Load & Import</b>
<li>Drag and drop an <a href="https://en.wikipedia.org/wiki/STL_(file_format)" target="_stl">STL</a> onto the grid <li>Drag and drop an <a href="https://en.wikipedia.org/wiki/STL_(file_format)" target="_stl">STL</a> onto the grid
<li>Or load with Function [Import] <li>Or load with Function <button onclick="kiri.api.event.import()">Import</button>
<p> <p>
<b>Start Working</b> <b>Start Working</b>
<li>Select device mode: FDM, CAM, Laser <li>Set mode
<li>Select device profile under Devices <button onclick="kiri.api.mode.set('FDM')">FDM</button>
<li>Set slicing parameters in right menu <button onclick="kiri.api.mode.set('CAM')">CAM</button>
<li>Test slicing settings with Function [Slice] <button onclick="kiri.api.mode.set('LASER')">LASER</button>
<li>Preview slicing output with Function [Preview] <li>Select <button onclick="kiri.api.show.devices()">Device</button>
<li>Export gcode with Function [Export] <li>Set slicing parameters in right panel
<li><button onclick = "kiri.api.function.slice()">Slice</button>
using settings from the right panel
<li><button onclick = "kiri.api.function.print()">Preview</button> GCode output
<li><button onclick = "kiri.api.function.export()">Export</button> GCode
<p> <p>
<b>Other ways to use Kiri</b> <b>Other ways to use Kiri:Moto</b>
<li><label><a target="_onshape" href="https://appstore.onshape.com/apps/CAM/EAAEWYIOMQKBENEMYW2N7MF253CT4WYL6SUJGEY=/description">Onshape</a></label> -- Inside Onshape <li><label><a target="_onshape" href="https://appstore.onshape.com/apps/CAM/EAAEWYIOMQKBENEMYW2N7MF253CT4WYL6SUJGEY=/description">Onshape</a></label> -- Inside Onshape
<li><label><a target="_thingiverse" href="http://www.thingiverse.com/apps/kirimoto/">Thingiverse</a></label> -- Inside Thingiverse <li><label><a target="_thingiverse" href="http://www.thingiverse.com/apps/kirimoto/">Thingiverse</a></label> -- Inside Thingiverse

View file

@ -5,17 +5,17 @@
<div> <div>
<table id="print-info"> <table id="print-info">
<tr><th>file name</th><td><input id="print-filename" size="30" spellcheck="false" /></td></tr> <tr><th>file name</th><td><input id="print-filename" size="30" spellcheck="false" /></td></tr>
<tr><th>file size (bytes)</th><td><input id="print-filesize" size="10" disabled="true" /></td></tr> <tr><th>file size (bytes)</th><td><input id="print-filesize" size="12" disabled="true" /></td></tr>
<tr id="mill-info"><th>estimate (h:m:s)</th><td><input id="mill-time" size="10" disabled="true" /></td></tr> <tr id="mill-info"><th>time estimate (h:m:s)</th><td><input id="mill-time" size="12" disabled="true" /></td></tr>
</table> </table>
</div> </div>
<div id="print-filament-row"> <div id="print-filament-row">
<table> <table>
<tr><th>filament used (mm)</th><td><input id="print-filament" size="10" disabled="true" /></td></tr> <tr><th>filament used (mm)</th><td><input id="print-filament" size="12" disabled="true" /></td></tr>
<tr><th>filament density (g/cm^3)</th><td><input id="print-density" size="10" value="1.25" /></td></tr> <tr><th>filament density (g/cm^3)</th><td><input id="print-density" size="12" value="1.25" /></td></tr>
<tr><th>printed weight (g)</th><td><input id="print-weight" size="10" disabled="true" /></td></tr> <tr><th>printed weight (g)</th><td><input id="print-weight" size="12" disabled="true" /></td></tr>
<tr><th>estimate (h:m:s)</th><td><input id="print-time" size="10" disabled="true" /></td></tr> <tr><th>time estimate (h:m:s)</th><td><input id="print-time" size="12" disabled="true" /></td></tr>
</table> </table>
</div> </div>

View file

@ -5,7 +5,7 @@
<div> <div>
<table id="print-info"> <table id="print-info">
<tr><th>file name</th><td><input id="print-filename" size="30" spellcheck="false" /></td></tr> <tr><th>file name</th><td><input id="print-filename" size="30" spellcheck="false" /></td></tr>
<tr><th>segments</th><td><input id="print-lines" size="10" disabled="true" /></td></tr> <tr><th>segments</th><td><input id="print-lines" size="12" disabled="true" /></td></tr>
</table> </table>
</div> </div>

View file

@ -532,6 +532,8 @@ button.selected {
} }
#device label { #device label {
white-space: nowrap; white-space: nowrap;
}
#device > div > label {
padding: 2px; padding: 2px;
} }
#device input { #device input {
@ -664,7 +666,6 @@ button[import="1"] {
z-Index: 10000; z-Index: 10000;
} }
.poptext label { .poptext label {
width: 100% !important;
text-align: center !important; text-align: center !important;
border-top: 1px solid #888; border-top: 1px solid #888;
border-left: 1px solid #888; border-left: 1px solid #888;
@ -676,6 +677,7 @@ button[import="1"] {
} }
.poptext textarea { .poptext textarea {
flex-grow: 1; flex-grow: 1;
margin: 0;
opacity: 0.95; opacity: 0.95;
outline: none; outline: none;
overflow-y: scroll !important; overflow-y: scroll !important;