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,
|
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;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -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:{
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
54
notes.md
54
notes.md
|
|
@ -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
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue