add extruder selector
This commit is contained in:
parent
19d23fdf44
commit
e706bb3699
6 changed files with 114 additions and 29 deletions
|
|
@ -386,6 +386,7 @@ var gs_kiri_fdm = exports;
|
||||||
zoff = 0,
|
zoff = 0,
|
||||||
meshIndex,
|
meshIndex,
|
||||||
lastIndex,
|
lastIndex,
|
||||||
|
lastOut,
|
||||||
closest,
|
closest,
|
||||||
mindist,
|
mindist,
|
||||||
minidx,
|
minidx,
|
||||||
|
|
@ -553,6 +554,10 @@ var gs_kiri_fdm = exports;
|
||||||
layerout.height = layerout.height || closest.slice.height;
|
layerout.height = layerout.height || closest.slice.height;
|
||||||
slices[minidx] = null;
|
slices[minidx] = null;
|
||||||
closest.offset.z = zoff;
|
closest.offset.z = zoff;
|
||||||
|
// detect extruder change and print purge block
|
||||||
|
if (lastOut && lastOut.extruder !== closest.slice.extruder) {
|
||||||
|
console.log({extruder_swap: closest.slice.extruder, from: lastOut.extruder});
|
||||||
|
}
|
||||||
// output seek to start point between mesh slices if previous data
|
// output seek to start point between mesh slices if previous data
|
||||||
printPoint = print.slicePrintPath(
|
printPoint = print.slicePrintPath(
|
||||||
closest.slice,
|
closest.slice,
|
||||||
|
|
@ -561,6 +566,7 @@ var gs_kiri_fdm = exports;
|
||||||
layerout,
|
layerout,
|
||||||
{ first: closest.slice.index === 0 }
|
{ first: closest.slice.index === 0 }
|
||||||
);
|
);
|
||||||
|
lastOut = closest.slice,
|
||||||
lastIndex = minidx;
|
lastIndex = minidx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -595,9 +601,10 @@ var gs_kiri_fdm = exports;
|
||||||
fan_power = device.gcodeFan,
|
fan_power = device.gcodeFan,
|
||||||
trackLayers = device.gcodeLayer,
|
trackLayers = device.gcodeLayer,
|
||||||
trackProgress = device.gcodeTrack,
|
trackProgress = device.gcodeTrack,
|
||||||
extruder = 0,
|
tool = 0,
|
||||||
nozzleSize = extruders[extruder].extNozzle,
|
extruder = extruders[tool],
|
||||||
filamentSize = extruders[extruder].extFilament,
|
offset_x = extruder.extOffsetX,
|
||||||
|
offset_y = extruder.extOffsetY,
|
||||||
time = 0,
|
time = 0,
|
||||||
layer = 0,
|
layer = 0,
|
||||||
pause = [],
|
pause = [],
|
||||||
|
|
@ -766,8 +773,8 @@ var gs_kiri_fdm = exports;
|
||||||
while (layer < layers.length) {
|
while (layer < layers.length) {
|
||||||
path = layers[layer];
|
path = layers[layer];
|
||||||
emitPerMM = print.extrudePerMM(
|
emitPerMM = print.extrudePerMM(
|
||||||
nozzleSize,
|
extruder.extNozzle,
|
||||||
filamentSize,
|
extruder.extFilament,
|
||||||
path.layer === 0 ?
|
path.layer === 0 ?
|
||||||
(process.firstSliceHeight || process.sliceHeight) : path.height);
|
(process.firstSliceHeight || process.sliceHeight) : path.height);
|
||||||
|
|
||||||
|
|
@ -828,13 +835,14 @@ var gs_kiri_fdm = exports;
|
||||||
speedMMM = (out.speed || process.outputFeedrate) * 60;
|
speedMMM = (out.speed || process.outputFeedrate) * 60;
|
||||||
|
|
||||||
// look for extruder change and recalc emit factor
|
// look for extruder change and recalc emit factor
|
||||||
if (out.tool !== undefined && out.tool !== extruder) {
|
if (out.tool !== undefined && out.tool !== tool) {
|
||||||
extruder = out.tool;
|
tool = out.tool;
|
||||||
nozzleSize = extruders[extruder].extNozzle;
|
extruder = extruders[tool];
|
||||||
filamentSize = extruders[extruder].extFilament;
|
offset_x = extruder.extOffsetX;
|
||||||
|
offset_y = extruder.extOffsetY;
|
||||||
emitPerMM = print.extrudePerMM(
|
emitPerMM = print.extrudePerMM(
|
||||||
nozzleSize,
|
extruder.extNozzle,
|
||||||
filamentSize,
|
extruder.extFilament,
|
||||||
path.layer === 0 ?
|
path.layer === 0 ?
|
||||||
(process.firstSliceHeight || process.sliceHeight) : path.height);
|
(process.firstSliceHeight || process.sliceHeight) : path.height);
|
||||||
}
|
}
|
||||||
|
|
@ -844,8 +852,8 @@ var gs_kiri_fdm = exports;
|
||||||
dwell(out.speed);
|
dwell(out.speed);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var x = out.point.x,
|
var x = out.point.x + offset_x,
|
||||||
y = out.point.y,
|
y = out.point.y + offset_y,
|
||||||
z = out.point.z;
|
z = out.point.z;
|
||||||
|
|
||||||
// adjust for inversions and offsets
|
// adjust for inversions and offsets
|
||||||
|
|
|
||||||
|
|
@ -540,6 +540,23 @@ var gs_kiri_init = exports;
|
||||||
UI.deviceName.value = devicename;
|
UI.deviceName.value = devicename;
|
||||||
UI.deviceOrigin.checked = proc.outputOriginCenter;
|
UI.deviceOrigin.checked = proc.outputOriginCenter;
|
||||||
|
|
||||||
|
// add extruder selection buttons
|
||||||
|
if (dev.extruders) {
|
||||||
|
let selext = $('sel-ext');
|
||||||
|
selext.innerHTML = '';
|
||||||
|
let arr = [];
|
||||||
|
for (let i=dev.extruders.length-1; i>=0; i--) {
|
||||||
|
let b = DOC.createElement('button');
|
||||||
|
b.appendChild(DOC.createTextNode(i));
|
||||||
|
b.onclick = function() {
|
||||||
|
API.selection.for_widgets(w => {
|
||||||
|
current.widget[w.id] = {extruder: i};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
selext.appendChild(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mode === 'CAM') {
|
if (mode === 'CAM') {
|
||||||
proc.camOriginTop = dev.outputOriginTop;
|
proc.camOriginTop = dev.outputOriginTop;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,16 @@ let gs_kiri_widget = exports;
|
||||||
|
|
||||||
let Group = Widget.Groups = {
|
let Group = Widget.Groups = {
|
||||||
|
|
||||||
|
forid: function(id) {
|
||||||
|
for (let i=0; i<groups.length; i++) {
|
||||||
|
if (groups[i].id === id) return groups[i];
|
||||||
|
}
|
||||||
|
let group = [];
|
||||||
|
group.id = id;
|
||||||
|
groups.push(group);
|
||||||
|
return group;
|
||||||
|
},
|
||||||
|
|
||||||
remove: function(widget) {
|
remove: function(widget) {
|
||||||
groups.slice().forEach(group => {
|
groups.slice().forEach(group => {
|
||||||
let pos = group.indexOf(widget);
|
let pos = group.indexOf(widget);
|
||||||
|
|
@ -114,6 +124,9 @@ let gs_kiri_widget = exports;
|
||||||
this.id = id || new Date().getTime().toString(36)+(nextId++);
|
this.id = id || new Date().getTime().toString(36)+(nextId++);
|
||||||
this.group = group || [];
|
this.group = group || [];
|
||||||
this.group.push(this);
|
this.group.push(this);
|
||||||
|
if (!this.group.id) {
|
||||||
|
this.group.id = this.id;
|
||||||
|
}
|
||||||
if (groups.indexOf(this.group) < 0) {
|
if (groups.indexOf(this.group) < 0) {
|
||||||
groups.push(this.group);
|
groups.push(this.group);
|
||||||
}
|
}
|
||||||
|
|
@ -169,13 +182,13 @@ let gs_kiri_widget = exports;
|
||||||
};
|
};
|
||||||
|
|
||||||
Widget.loadFromState = function(id, ondone, move) {
|
Widget.loadFromState = function(id, ondone, move) {
|
||||||
let widget = newWidget();
|
|
||||||
widget.id = id;
|
|
||||||
widget.saved = time();
|
|
||||||
KIRI.odb.get('ws-save-'+id, function(data) {
|
KIRI.odb.get('ws-save-'+id, function(data) {
|
||||||
if (data) {
|
if (data) {
|
||||||
let vertices = data.geo || data,
|
let vertices = data.geo || data,
|
||||||
track = data.track || null;
|
track = data.track || undefined,
|
||||||
|
group = data.group || id,
|
||||||
|
widget = newWidget(id, Group.forid(group));
|
||||||
|
widget.saved = time();
|
||||||
ondone(widget.loadVertices(vertices));
|
ondone(widget.loadVertices(vertices));
|
||||||
// restore widget position if specified
|
// restore widget position if specified
|
||||||
if (move && track && track.pos) {
|
if (move && track && track.pos) {
|
||||||
|
|
@ -308,7 +321,11 @@ let gs_kiri_widget = exports;
|
||||||
|
|
||||||
PRO.saveState = function(ondone) {
|
PRO.saveState = function(ondone) {
|
||||||
let widget = this;
|
let widget = this;
|
||||||
KIRI.odb.put('ws-save-'+this.id, {geo:widget.getGeoVertices(), track:widget.track}, function(result) {
|
KIRI.odb.put('ws-save-'+this.id, {
|
||||||
|
geo:widget.getGeoVertices(),
|
||||||
|
track:widget.track,
|
||||||
|
group:this.group.id
|
||||||
|
}, function(result) {
|
||||||
widget.saved = time();
|
widget.saved = time();
|
||||||
if (ondone) ondone();
|
if (ondone) ondone();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1062,16 +1062,19 @@ self.kiri.copyright = exports.COPYRIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
function platformAdd(widget, shift, nolayout) {
|
function platformAdd(widget, shift, nolayout) {
|
||||||
settings.widget[widget.id] = {extruder: 0};
|
if (!settings.widget[widget.id]) {
|
||||||
|
settings.widget[widget.id] = {extruder: 0};
|
||||||
|
}
|
||||||
WIDGETS.push(widget);
|
WIDGETS.push(widget);
|
||||||
SPACE.platform.add(widget.mesh);
|
SPACE.platform.add(widget.mesh);
|
||||||
platform.select(widget, shift);
|
platform.select(widget, shift);
|
||||||
platform.compute_max_z();
|
platform.compute_max_z();
|
||||||
API.event.emit('widget.add', widget);
|
API.event.emit('widget.add', widget);
|
||||||
if (nolayout) return;
|
if (nolayout) return;
|
||||||
if (layoutOnAdd) platform.layout();
|
|
||||||
if (!grouping) {
|
if (!grouping) {
|
||||||
platformGroupDone();
|
platformGroupDone();
|
||||||
|
} else if (layoutOnAdd) {
|
||||||
|
platform.layout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1097,6 +1100,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
||||||
if (MODE !== MODES.FDM) platform.layout();
|
if (MODE !== MODES.FDM) platform.layout();
|
||||||
SPACE.update();
|
SPACE.update();
|
||||||
platformUpdateSelected();
|
platformUpdateSelected();
|
||||||
|
if (layoutOnAdd) platform.layout();
|
||||||
API.event.emit('widget.delete', widget);
|
API.event.emit('widget.delete', widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -157,16 +157,33 @@
|
||||||
<label class="label">depth:</label><label id="sel_depth" class="value">mm</label>
|
<label class="label">depth:</label><label id="sel_depth" class="value">mm</label>
|
||||||
<label class="label">height:</label><label id="sel_height" class="value">mm</label>
|
<label class="label">height:</label><label id="sel_height" class="value">mm</label>
|
||||||
|
|
||||||
<label class="label">scale</label>
|
<div class="sel-span">
|
||||||
<label class="label">x</label><input id="scale_x" size="3" value="1"/>
|
<label class="label">scale</label>
|
||||||
<label class="label">y</label><input id="scale_y" size="3" value="1"/>
|
<div id="sel-scale" class="sel-pop">
|
||||||
<label class="label">z</label><input id="scale_z" size="3" value="1"/>
|
<div>
|
||||||
<label class="label">uniform</label><input type="checkbox" id="scale_uni" checked>
|
<label class="label">x</label><input id="scale_x" size="3" value="1"/>
|
||||||
|
<label class="label">y</label><input id="scale_y" size="3" value="1"/>
|
||||||
|
<label class="label">z</label><input id="scale_z" size="3" value="1"/>
|
||||||
|
<label class="label">uniform</label><input type="checkbox" id="scale_uni" checked>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<label class="label">rotate</label>
|
<div class="sel-span">
|
||||||
<button id="x+" title="hold SHIFT to rotate 5 degrees">x+</button><button id="x-" title="hold SHIFT to rotate 5 degrees">x-</button>
|
<label class="label">rotate</label>
|
||||||
<button id="y+" title="hold SHIFT to rotate 5 degrees">y+</button><button id="y-" title="hold SHIFT to rotate 5 degrees">y-</button>
|
<div id="sel-rotate" class="sel-pop">
|
||||||
<button id="z+" title="hold SHIFT to rotate 5 degrees">z+</button><button id="z-" title="hold SHIFT to rotate 5 degrees">z-</button>
|
<div>
|
||||||
|
<button id="x+" title="hold SHIFT to rotate 5 degrees">x+</button><button id="x-" title="hold SHIFT to rotate 5 degrees">x-</button>
|
||||||
|
<button id="y+" title="hold SHIFT to rotate 5 degrees">y+</button><button id="y-" title="hold SHIFT to rotate 5 degrees">y-</button>
|
||||||
|
<button id="z+" title="hold SHIFT to rotate 5 degrees">z+</button><button id="z-" title="hold SHIFT to rotate 5 degrees">z-</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sel-span">
|
||||||
|
<label class="label">extruder</label>
|
||||||
|
<div class="sel-pop"><div id="sel-ext"><div></div>
|
||||||
|
</div>
|
||||||
</span>
|
</span>
|
||||||
<span id="stock">
|
<span id="stock">
|
||||||
<label class="label">stock</label>
|
<label class="label">stock</label>
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,26 @@ input[type=range]::-moz-focus-outer {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
.sel-span {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.sel-pop {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100%;
|
||||||
|
left: 0;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
.sel-pop div {
|
||||||
|
background-color: white;
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
.sel-span:hover .sel-pop {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
#widget-info {
|
#widget-info {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|
@ -64,9 +84,11 @@ input[type=range]::-moz-focus-outer {
|
||||||
padding: 3px 8px 8px 8px;
|
padding: 3px 8px 8px 8px;
|
||||||
background-color: rgba(170,221,255,0.75);
|
background-color: rgba(170,221,255,0.75);
|
||||||
color: rgba(0,0,0,0.5);
|
color: rgba(0,0,0,0.5);
|
||||||
|
z-index: 10;
|
||||||
}
|
}
|
||||||
#widget-info label {
|
#widget-info label {
|
||||||
border: 0;
|
border: 0;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
#widget-info .value {
|
#widget-info .value {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue