add laser on/off gcode. cleanup help, export dialogs
This commit is contained in:
parent
8148eeee7e
commit
eb381f3417
13 changed files with 149 additions and 93 deletions
|
|
@ -387,7 +387,14 @@ var gs_base = exports;
|
|||
offsetPrecision : offsetPrecision,
|
||||
intersectRayLine : intersectRayLine,
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -193,6 +193,12 @@ var gs_kiri_conf = exports;
|
|||
d:{
|
||||
bedWidth: 1,
|
||||
bedDepth: 1,
|
||||
gcodePre: 1,
|
||||
gcodePost: 1,
|
||||
gcodeFExt: 1,
|
||||
gcodeSpace: 1,
|
||||
gcodeLaserOn: 1,
|
||||
gcodeLaserOff: 1
|
||||
},
|
||||
// fields permitted in Laser:Process
|
||||
p:{
|
||||
|
|
@ -289,12 +295,14 @@ var gs_kiri_conf = exports;
|
|||
gcodeFan: "", // FDM fan command
|
||||
gcodeTrack: "", // FDM progress command
|
||||
gcodeLayer: "", // FDM layer output
|
||||
gcodeFExt: "", // CAM file extension
|
||||
gcodeSpace: "", // CAM token spacing
|
||||
gcodeStrip: true, // CAM strip comments
|
||||
gcodeDwell: ["G4 P{time}"], // CAM dwell script
|
||||
gcodeChange: ["M6 T{tool}"], // CAM tool change script
|
||||
gcodeSpindle: ["M3 S{speed}"], // CAM spindle speed
|
||||
gcodeFExt: "", // CAM file extension
|
||||
gcodeSpace: "", // CAM token spacing
|
||||
gcodeStrip: true // CAM strip comments
|
||||
gcodeLaserOn: ["M106 S{power}"],// LASER turn on
|
||||
gcodeLaserOff: ["M107"] // LASER turn off
|
||||
},
|
||||
// FDM/CAM/Laser
|
||||
process:{
|
||||
|
|
|
|||
|
|
@ -290,37 +290,52 @@ let gs_kiri_laser = exports;
|
|||
*
|
||||
*/
|
||||
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(
|
||||
print,
|
||||
function(min, max, power, speed) {
|
||||
let width = (max.x - min.x),
|
||||
height = (max.y - min.y);
|
||||
|
||||
dx = min.x;
|
||||
dy = min.y;
|
||||
feedrate = " F" + speed,
|
||||
laser_on = "M106 S" + UTIL.round(256 * (power / 100), 3);
|
||||
// pre
|
||||
feedrate = `${space}F${speed}`;
|
||||
power = (256 * (power / 100)).toFixed(3);
|
||||
|
||||
(dev.gcodePre || []).forEach(line => {
|
||||
lines.push(line);
|
||||
});
|
||||
},
|
||||
function(poly, color) {
|
||||
poly.forEach(function(point, index) {
|
||||
if (index === 0) {
|
||||
lines.push("G0 " + point);
|
||||
lines.push(`G0${space}${point}`);
|
||||
} else if (index === 1) {
|
||||
lines.push(laser_on);
|
||||
lines.push("G1 " + point + feedrate);
|
||||
laser_on.forEach(line => {
|
||||
lines.push(line.replace('{power}', power));
|
||||
});
|
||||
lines.push(`G1${space}${point}${feedrate}`);
|
||||
} else {
|
||||
lines.push("G1 " + point);
|
||||
lines.push(`G1${space}${point}`);
|
||||
}
|
||||
});
|
||||
lines.push("M107");
|
||||
laser_off.forEach(line => {
|
||||
lines.push(line);
|
||||
});
|
||||
},
|
||||
function() {
|
||||
// post
|
||||
(dev.gcodePost || []).forEach(line => {
|
||||
lines.push(line);
|
||||
});
|
||||
},
|
||||
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) {
|
||||
let lines = [], dx = 0, dy = 0, my;
|
||||
let colors = [
|
||||
"black",
|
||||
"purple",
|
||||
"blue",
|
||||
"red",
|
||||
|
|
@ -340,8 +356,7 @@ let gs_kiri_laser = exports;
|
|||
"yellow",
|
||||
"green",
|
||||
"brown",
|
||||
"gray",
|
||||
"black"
|
||||
"gray"
|
||||
];
|
||||
|
||||
exportElements(
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ let gs_kiri_export = exports;
|
|||
if (self.kiri.export) return;
|
||||
|
||||
let KIRI = self.kiri,
|
||||
BASE = self.base,
|
||||
UTIL = BASE.util,
|
||||
API = KIRI.api,
|
||||
SDB = API.sdb,
|
||||
UI = API.ui,
|
||||
|
|
@ -76,7 +78,7 @@ let gs_kiri_export = exports;
|
|||
currentPrint.output.forEach(layer => { segments += layer.length });
|
||||
UI.print.innerHTML = html;
|
||||
$('print-filename').value = filename;
|
||||
$('print-lines').value = segments;
|
||||
$('print-lines').value = UTIL.comma(segments);
|
||||
$('print-close').onclick = API.modal.hide;
|
||||
$('print-svg').onclick = download_svg;
|
||||
$('print-dxf').onclick = download_dxf;
|
||||
|
|
@ -353,9 +355,18 @@ let gs_kiri_export = exports;
|
|||
|
||||
function calcWeight() {
|
||||
try {
|
||||
let density = $('print-density');
|
||||
$('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) { }
|
||||
}
|
||||
|
||||
|
|
@ -381,7 +392,7 @@ let gs_kiri_export = exports;
|
|||
$('print-filament-row').style.display = MODE === MODES.FDM ? '' : 'none';
|
||||
$('mill-info').style.display = MODE === MODES.CAM ? '' : 'none';
|
||||
$('print-filename').value = filename;
|
||||
$('print-filesize').value = currentPrint.bytes;
|
||||
$('print-filesize').value = UTIL.comma(currentPrint.bytes);
|
||||
$('print-filament').value = Math.round(currentPrint.distance);
|
||||
$('grid-host').onkeyup = gridhost_probe;
|
||||
$('grid-apik').onkeyup = gridhost_probe;
|
||||
|
|
|
|||
|
|
@ -118,14 +118,16 @@ var gs_kiri_init = exports;
|
|||
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}),
|
||||
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}),
|
||||
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}),
|
||||
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}),
|
||||
setDevicePre: UC.newText(LANG.dev_head, {title:LANG.dev_head_desc, xmodes:FDM_CAM, size:14, height:3}),
|
||||
setDevicePost: UC.newText(LANG.dev_foot, {title:LANG.dev_foot_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}),
|
||||
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'),
|
||||
toolsSave: $('tools-save'),
|
||||
|
|
@ -879,6 +881,8 @@ var gs_kiri_init = exports;
|
|||
post: UI.setDevicePost.value.split('\n'),
|
||||
pause: UI.setDevicePause.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'),
|
||||
'file-ext': UI.setDeviceFExt.value,
|
||||
'token-space': UI.setDeviceToken.checked ? ' ' : '',
|
||||
|
|
@ -927,7 +931,9 @@ var gs_kiri_init = exports;
|
|||
gcodeChange: valueOf(code['tool-change'], []),
|
||||
gcodeFExt: valueOf(code['file-ext'], 'gcode'),
|
||||
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,
|
||||
|
|
@ -961,6 +967,9 @@ var gs_kiri_init = exports;
|
|||
UI.setDeviceFExt.value = dev.gcodeFExt;
|
||||
UI.setDeviceToken.checked = dev.gcodeSpace ? true : false;
|
||||
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
|
||||
[
|
||||
|
|
@ -986,7 +995,9 @@ var gs_kiri_init = exports;
|
|||
UI.setDeviceChange,
|
||||
UI.setDeviceFExt,
|
||||
UI.setDeviceToken,
|
||||
UI.setDeviceStrip
|
||||
UI.setDeviceStrip,
|
||||
UI.setDeviceLaserOn,
|
||||
UI.setDeviceLaserOff
|
||||
].forEach(function(e) {
|
||||
e.disabled = !local;
|
||||
});
|
||||
|
|
@ -1002,7 +1013,7 @@ var gs_kiri_init = exports;
|
|||
e.parentNode.style.display = dev.spindleMax >= 0 ? 'none' : 'block';
|
||||
});
|
||||
|
||||
UI.deviceSave.disabled =
|
||||
UI.deviceSave.disabled = !local;
|
||||
UI.deviceDelete.disabled = !local;
|
||||
|
||||
API.view.update_fields();
|
||||
|
|
@ -1076,18 +1087,26 @@ var gs_kiri_init = exports;
|
|||
|
||||
UI.deviceSelect.innerHTML = '';
|
||||
let incr = 0;
|
||||
let faves = API.show.favorites();
|
||||
let found = false;
|
||||
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) {
|
||||
let opt = DOC.createElement('option'),
|
||||
fav = isFavoriteDevice(device),
|
||||
// force faves off for second try
|
||||
if (rep === 1) faves = false;
|
||||
let fav = isFavoriteDevice(device),
|
||||
loc = isLocalDevice(device);
|
||||
if (API.show.favorites() && !(fav || loc)) {
|
||||
if (faves && !(fav || loc)) {
|
||||
return;
|
||||
}
|
||||
if (incr === 0) {
|
||||
first = device;
|
||||
}
|
||||
let opt = DOC.createElement('option');
|
||||
opt.appendChild(DOC.createTextNode(device));
|
||||
opt.onclick = function() {
|
||||
selectDevice(device);
|
||||
|
|
@ -1328,7 +1347,7 @@ var gs_kiri_init = exports;
|
|||
|
||||
function showDevices() {
|
||||
if (deviceLock) return;
|
||||
|
||||
API.modal.hide();
|
||||
API.ajax("/api/filters-"+API.mode.get_lower(), function(flvalue) {
|
||||
if (!flvalue) return;
|
||||
renderDevices(js2o(flvalue));
|
||||
|
|
@ -1647,6 +1666,8 @@ var gs_kiri_init = exports;
|
|||
|
||||
API.space.restore(ondone) || checkSeed(ondone) || ondone();
|
||||
|
||||
// extend API
|
||||
API.show.devices = showDevices;
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -90,7 +90,11 @@ var gs_kiri_lang = exports;
|
|||
dev_head: "header",
|
||||
dev_head_desc: "gcode header script",
|
||||
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"
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
54
notes.md
54
notes.md
|
|
@ -1,20 +1,24 @@
|
|||
# Kiri:Moto todo
|
||||
|
||||
* hide the bed with a checkbox? indication of part outside printable area?
|
||||
* set page background color? or dark mode?
|
||||
* better small screen support (on screen button for hiding side panels, compact selectors)
|
||||
* widget general add-ons (fdm supports, cam tabs)
|
||||
* extend mesh object to store raw + annotations (rot,scale,pos)
|
||||
## `C` cosmetic, `F` functional, `P` performance
|
||||
|
||||
* `C` hide the bed with a checkbox? indication of part outside printable area?
|
||||
* `C` set page background color? or dark mode?
|
||||
* `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
|
||||
* bail on decimation if it's proving ineffective
|
||||
* improve decimation speed by avoiding in/out of Point
|
||||
* server-side processing (determine protocol and storage)
|
||||
* refactor / simplify POLY.expand (put onus on collector)
|
||||
* cloned objects should share same slice data unless rotated
|
||||
* remember object's original position/orientation for reset/multi-object import alignment
|
||||
* `F` remember object's original position/orientation for reset/multi-object import alignment
|
||||
* `P` bail on decimation if it's proving ineffective
|
||||
* `P` improve decimation speed by avoiding in/out of Point
|
||||
* `P` server-side processing (determine protocol and storage)
|
||||
* `P` refactor / simplify POLY.expand (put onus on collector)
|
||||
* `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
|
||||
* disable infill fingerprinting for gyroids
|
||||
* first layer segment large flat areas for better fill reliability
|
||||
|
|
@ -29,12 +33,11 @@
|
|||
* fix wrong first point in general (all modes)
|
||||
* trim support offset from layer below
|
||||
* feather sharp tips by reducing extrusion in area of overlap
|
||||
* dual extruder support
|
||||
* add manual supports
|
||||
* dual extruder and swapping extruder support
|
||||
* option to support interior bridges when 0% infill
|
||||
* fix multiple part layout export offset (resend position @ print time)
|
||||
|
||||
# CAM todo
|
||||
# CAM
|
||||
|
||||
* refactor slicing around flats w/ interpolation instead of culling
|
||||
* 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
|
||||
* 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
|
||||
* sla :: svg modified from http://garyhodgson.github.io/slic3rsvgviewer/?file=examples/belt_pulley3.svg
|
||||
|
||||
# References
|
||||
|
||||
* other
|
||||
-----
|
||||
* http://lcamtuf.coredump.cx/gcnc/full/
|
||||
* http://wiki.imal.org/howto/cnc-milling-introduction-cutting-tools
|
||||
* 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
|
||||
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
{
|
||||
"file-ext": "gcode",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"laser-on":[
|
||||
"M106 S{power}"
|
||||
],
|
||||
"laser-off":[
|
||||
"M107"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 300,
|
||||
|
|
|
|||
|
|
@ -1,14 +1,10 @@
|
|||
{
|
||||
"file-ext": "gcode",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"pre":[],
|
||||
"post":[],
|
||||
"laser-on":[],
|
||||
"laser-off":[],
|
||||
"settings": {
|
||||
"bed_width": 500,
|
||||
"bed_depth": 300
|
||||
|
|
|
|||
|
|
@ -23,19 +23,22 @@
|
|||
<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>Or load with Function [Import]
|
||||
<li>Or load with Function <button onclick="kiri.api.event.import()">Import</button>
|
||||
|
||||
<p>
|
||||
<b>Start Working</b>
|
||||
<li>Select device mode: FDM, CAM, Laser
|
||||
<li>Select device profile under Devices
|
||||
<li>Set slicing parameters in right menu
|
||||
<li>Test slicing settings with Function [Slice]
|
||||
<li>Preview slicing output with Function [Preview]
|
||||
<li>Export gcode with Function [Export]
|
||||
|
||||
<li>Set mode
|
||||
<button onclick="kiri.api.mode.set('FDM')">FDM</button>
|
||||
<button onclick="kiri.api.mode.set('CAM')">CAM</button>
|
||||
<button onclick="kiri.api.mode.set('LASER')">LASER</button>
|
||||
<li>Select <button onclick="kiri.api.show.devices()">Device</button>
|
||||
<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>
|
||||
<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="_thingiverse" href="http://www.thingiverse.com/apps/kirimoto/">Thingiverse</a></label> -- Inside Thingiverse
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@
|
|||
<div>
|
||||
<table id="print-info">
|
||||
<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 id="mill-info"><th>estimate (h:m:s)</th><td><input id="mill-time" 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>time estimate (h:m:s)</th><td><input id="mill-time" size="12" disabled="true" /></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="print-filament-row">
|
||||
<table>
|
||||
<tr><th>filament used (mm)</th><td><input id="print-filament" size="10" 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>printed weight (g)</th><td><input id="print-weight" size="10" disabled="true" /></td></tr>
|
||||
<tr><th>estimate (h:m:s)</th><td><input id="print-time" 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="12" value="1.25" /></td></tr>
|
||||
<tr><th>printed weight (g)</th><td><input id="print-weight" size="12" disabled="true" /></td></tr>
|
||||
<tr><th>time estimate (h:m:s)</th><td><input id="print-time" size="12" disabled="true" /></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<div>
|
||||
<table id="print-info">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -532,6 +532,8 @@ button.selected {
|
|||
}
|
||||
#device label {
|
||||
white-space: nowrap;
|
||||
}
|
||||
#device > div > label {
|
||||
padding: 2px;
|
||||
}
|
||||
#device input {
|
||||
|
|
@ -664,7 +666,6 @@ button[import="1"] {
|
|||
z-Index: 10000;
|
||||
}
|
||||
.poptext label {
|
||||
width: 100% !important;
|
||||
text-align: center !important;
|
||||
border-top: 1px solid #888;
|
||||
border-left: 1px solid #888;
|
||||
|
|
@ -676,6 +677,7 @@ button[import="1"] {
|
|||
}
|
||||
.poptext textarea {
|
||||
flex-grow: 1;
|
||||
margin: 0;
|
||||
opacity: 0.95;
|
||||
outline: none;
|
||||
overflow-y: scroll !important;
|
||||
|
|
|
|||
Loading…
Reference in a new issue