belt improvements
This commit is contained in:
parent
5b74eb6bbd
commit
bf372eefcf
3 changed files with 41 additions and 28 deletions
|
|
@ -186,9 +186,9 @@
|
||||||
|
|
||||||
function onBooleanClick() {
|
function onBooleanClick() {
|
||||||
// prevent hiding elements in device editor on clicks
|
// prevent hiding elements in device editor on clicks
|
||||||
if (!API.modal.visible()) {
|
// if (!API.modal.visible()) {
|
||||||
UC.refresh();
|
UC.refresh();
|
||||||
}
|
// }
|
||||||
API.conf.update();
|
API.conf.update();
|
||||||
DOC.activeElement.blur();
|
DOC.activeElement.blur();
|
||||||
// API.event.emit("boolean.click");
|
// API.event.emit("boolean.click");
|
||||||
|
|
@ -795,6 +795,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
API.conf.save();
|
API.conf.save();
|
||||||
|
UC.refresh();
|
||||||
|
|
||||||
if (dev.imageURL) {
|
if (dev.imageURL) {
|
||||||
if (dev.imageURL !== deviceURL) {
|
if (dev.imageURL !== deviceURL) {
|
||||||
|
|
@ -1502,8 +1503,8 @@
|
||||||
maxHeight: UC.newInput(LANG.dv_bedh_s, {title:LANG.dv_bedh_l, convert:UC.toFloat, size:6, modes:FDM_SLA}),
|
maxHeight: UC.newInput(LANG.dv_bedh_s, {title:LANG.dv_bedh_l, convert:UC.toFloat, size:6, modes:FDM_SLA}),
|
||||||
spindleMax: UC.newInput(LANG.dv_spmx_s, {title:LANG.dv_spmx_l, convert:UC.toInt, size: 6, modes:CAM}),
|
spindleMax: UC.newInput(LANG.dv_spmx_s, {title:LANG.dv_spmx_l, convert:UC.toInt, size: 6, modes:CAM}),
|
||||||
deviceOrigin: UC.newBoolean(LANG.dv_orgc_s, onBooleanClick, {title:LANG.dv_orgc_l, modes:FDM_LASER_SLA}),
|
deviceOrigin: UC.newBoolean(LANG.dv_orgc_s, onBooleanClick, {title:LANG.dv_orgc_l, modes:FDM_LASER_SLA}),
|
||||||
deviceRound: UC.newBoolean(LANG.dv_bedc_s, onBooleanClick, {title:LANG.dv_bedc_l, modes:FDM}),
|
deviceRound: UC.newBoolean(LANG.dv_bedc_s, onBooleanClick, {title:LANG.dv_bedc_l, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
deviceBelt: UC.newBoolean(LANG.dv_belt_s, onBooleanClick, {title:LANG.dv_belt_l, modes:FDM}),
|
deviceBelt: UC.newBoolean(LANG.dv_belt_s, onBooleanClick, {title:LANG.dv_belt_l, modes:FDM, trigger:true}),
|
||||||
|
|
||||||
extruder: UC.newGroup(LANG.dv_gr_ext, $('device2'), {group:"dext", inline:true, modes:FDM}),
|
extruder: UC.newGroup(LANG.dv_gr_ext, $('device2'), {group:"dext", inline:true, modes:FDM}),
|
||||||
extFilament: UC.newInput(LANG.dv_fila_s, {title:LANG.dv_fila_l, convert:UC.toFloat, modes:FDM}),
|
extFilament: UC.newInput(LANG.dv_fila_s, {title:LANG.dv_fila_l, convert:UC.toFloat, modes:FDM}),
|
||||||
|
|
@ -1587,20 +1588,20 @@
|
||||||
laserSliceSingle: UC.newBoolean(LANG.ls_sngl_s, onBooleanClick, {title:LANG.ls_sngl_l, modes:LASER}),
|
laserSliceSingle: UC.newBoolean(LANG.ls_sngl_s, onBooleanClick, {title:LANG.ls_sngl_l, modes:LASER}),
|
||||||
|
|
||||||
firstLayer: UC.newGroup(LANG.fl_menu, null, {modes:FDM}),
|
firstLayer: UC.newGroup(LANG.fl_menu, null, {modes:FDM}),
|
||||||
firstSliceHeight: UC.newInput(LANG.fl_lahi_s, {title:LANG.fl_lahi_l, convert:UC.toFloat, modes:FDM}),
|
firstSliceHeight: UC.newInput(LANG.fl_lahi_s, {title:LANG.fl_lahi_l, convert:UC.toFloat, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
firstLayerNozzleTemp:UC.newInput(LANG.fl_nozl_s, {title:LANG.fl_nozl_l, convert:UC.toInt, modes:FDM}),
|
firstLayerNozzleTemp:UC.newInput(LANG.fl_nozl_s, {title:LANG.fl_nozl_l, convert:UC.toInt, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
firstLayerBedTemp: UC.newInput(LANG.fl_bedd_s, {title:LANG.fl_bedd_l, convert:UC.toInt, modes:FDM}),
|
firstLayerBedTemp: UC.newInput(LANG.fl_bedd_s, {title:LANG.fl_bedd_l, convert:UC.toInt, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}),
|
firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}),
|
||||||
firstLayerFillRate: UC.newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:UC.toFloat, modes:FDM}),
|
firstLayerFillRate: UC.newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:UC.toFloat, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}),
|
firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}),
|
||||||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
outputBrimCount: UC.newInput(LANG.fl_skrt_s, {title:LANG.fl_skrt_l, convert:UC.toInt, modes:FDM}),
|
outputBrimCount: UC.newInput(LANG.fl_skrt_s, {title:LANG.fl_skrt_l, convert:UC.toInt, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM}),
|
outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
|
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:() => !UI.deviceBelt.checked}),
|
||||||
outputRaftSpacing: UC.newInput(LANG.fr_spac_s, {title:LANG.fr_spac_l, convert:UC.toFloat, bound:UC.bound(0.0,3.0), modes:FDM, show: () => UI.outputRaft.checked }),
|
outputRaftSpacing: UC.newInput(LANG.fr_spac_s, {title:LANG.fr_spac_l, convert:UC.toFloat, bound:UC.bound(0.0,3.0), modes:FDM, show: () => UI.outputRaft.checked && !UI.deviceBelt.checked }),
|
||||||
outputRaft: UC.newBoolean(LANG.fr_nabl_s, onBooleanClick, {title:LANG.fr_nabl_l, modes:FDM, trigger: true}),
|
outputRaft: UC.newBoolean(LANG.fr_nabl_s, onBooleanClick, {title:LANG.fr_nabl_l, modes:FDM, trigger: true, show: () => !UI.deviceBelt.checked }),
|
||||||
|
|
||||||
fdmInfill: UC.newGroup(LANG.fi_menu, $('settings'), {modes:FDM}),
|
fdmInfill: UC.newGroup(LANG.fi_menu, $('settings'), {modes:FDM}),
|
||||||
sliceFillType: UC.newSelect(LANG.fi_type, {modes:FDM}, "infill"),
|
sliceFillType: UC.newSelect(LANG.fi_type, {modes:FDM}, "infill"),
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,8 @@
|
||||||
sliceEntry,
|
sliceEntry,
|
||||||
print = self.worker.print = KIRI.newPrint(settings, widgets),
|
print = self.worker.print = KIRI.newPrint(settings, widgets),
|
||||||
isThin = settings.controller.lineType === "line",
|
isThin = settings.controller.lineType === "line",
|
||||||
isFlat = settings.controller.lineType === "flat";
|
isFlat = settings.controller.lineType === "flat",
|
||||||
|
isBelt = device.bedBelt;
|
||||||
|
|
||||||
// compute bounds if missing
|
// compute bounds if missing
|
||||||
if (!bounds) {
|
if (!bounds) {
|
||||||
|
|
@ -63,7 +64,7 @@
|
||||||
|
|
||||||
// TODO pick a widget with a slice on the first layer and use that nozzle
|
// TODO pick a widget with a slice on the first layer and use that nozzle
|
||||||
// create brim, skirt, raft if specificed in FDM mode (code shared by laser)
|
// create brim, skirt, raft if specificed in FDM mode (code shared by laser)
|
||||||
if (process.outputBrimCount || process.outputRaft) {
|
if (!isBelt && (process.outputBrimCount || process.outputRaft)) {
|
||||||
let brims = [],
|
let brims = [],
|
||||||
offset = process.outputBrimOffset || (process.outputRaft ? 4 : 0);
|
offset = process.outputBrimOffset || (process.outputRaft ? 4 : 0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,8 @@
|
||||||
fillSpacing = nozzleSize,
|
fillSpacing = nozzleSize,
|
||||||
fillOffset = nozzleSize * fillOffsetMult,
|
fillOffset = nozzleSize * fillOffsetMult,
|
||||||
sliceFillAngle = spro.sliceFillAngle,
|
sliceFillAngle = spro.sliceFillAngle,
|
||||||
view = widget.mesh && widget.mesh.newGroup ? widget.mesh.newGroup() : null;
|
view = widget.mesh && widget.mesh.newGroup ? widget.mesh.newGroup() : null,
|
||||||
|
isBelt = sdev.bedBelt;
|
||||||
|
|
||||||
isFlat = settings.controller.lineType === "flat";
|
isFlat = settings.controller.lineType === "flat";
|
||||||
isThin = !isFlat && settings.controller.lineType === "line";
|
isThin = !isFlat && settings.controller.lineType === "line";
|
||||||
|
|
@ -141,7 +142,7 @@
|
||||||
SLICER.sliceWidget(widget, {
|
SLICER.sliceWidget(widget, {
|
||||||
height: sliceHeight,
|
height: sliceHeight,
|
||||||
minHeight: sliceMinHeight,
|
minHeight: sliceMinHeight,
|
||||||
firstHeight: spro.firstSliceHeight,
|
firstHeight: isBelt ? 0 : spro.firstSliceHeight,
|
||||||
// debug: true,
|
// debug: true,
|
||||||
// xray: 3,
|
// xray: 3,
|
||||||
// view: view
|
// view: view
|
||||||
|
|
@ -203,7 +204,7 @@
|
||||||
doShells(slice, spro.sliceShells, firstOffset, shellOffset, fillOffset, {
|
doShells(slice, spro.sliceShells, firstOffset, shellOffset, fillOffset, {
|
||||||
vase: vaseMode,
|
vase: vaseMode,
|
||||||
thin: spro.detectThinWalls,
|
thin: spro.detectThinWalls,
|
||||||
belt0: sdev.bedBelt && slice.index === 0,
|
belt0: isBelt && slice.index === 0,
|
||||||
widget: widget
|
widget: widget
|
||||||
});
|
});
|
||||||
if (solid) {
|
if (solid) {
|
||||||
|
|
@ -365,6 +366,8 @@
|
||||||
* @param {Obejct} options
|
* @param {Obejct} options
|
||||||
*/
|
*/
|
||||||
function doShells(slice, count, offset1, offsetN, fillOffset, opt = {}) {
|
function doShells(slice, count, offset1, offsetN, fillOffset, opt = {}) {
|
||||||
|
let shellout = 0;
|
||||||
|
|
||||||
slice.tops.forEach(function(top) {
|
slice.tops.forEach(function(top) {
|
||||||
let top_poly = [ top.poly ];
|
let top_poly = [ top.poly ];
|
||||||
|
|
||||||
|
|
@ -470,12 +473,20 @@
|
||||||
// for diffing
|
// for diffing
|
||||||
top.last = last;
|
top.last = last;
|
||||||
|
|
||||||
if (opt.belt0 && top.shells.length === 0) {
|
shellout += top.shells.length;
|
||||||
let bounds = opt.widget.bounds;
|
|
||||||
|
// add anchor extrusion if missing on the first belt layer
|
||||||
|
if (opt.belt0 && top.shells.length === 0 && slice.up && slice.up.tops.length) {
|
||||||
|
for (let up of slice.up.tops) {
|
||||||
|
let bounds = up.poly.bounds,
|
||||||
|
midy = (bounds.miny + bounds.maxy) / 2;
|
||||||
|
if (top.poly.isInside(up.poly, 1)) {
|
||||||
top.shells.push(BASE.newPolygon()
|
top.shells.push(BASE.newPolygon()
|
||||||
.setOpen()
|
.setOpen()
|
||||||
.add(bounds.min.x - 5,0,slice.z)
|
.add(bounds.minx,midy,slice.z)
|
||||||
.add(bounds.max.x + 5,0,slice.z));
|
.add(bounds.maxx,midy,slice.z));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -495,7 +506,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
slice.tops.forEach(function(top) {
|
slice.tops.forEach(function(top) {
|
||||||
const lines = fillArea(top.fill_off, angle, spacing, null);
|
let lines = fillArea(top.fill_off, angle, spacing, null);
|
||||||
top.fill_lines.appendAll(lines);
|
top.fill_lines.appendAll(lines);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue