Merge branch 'rel-4.3' into improved-register
This commit is contained in:
commit
333a965566
336 changed files with 19582 additions and 25184 deletions
149
src/kiri/api.js
149
src/kiri/api.js
|
|
@ -1,149 +0,0 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: moto.broker
|
||||
// dep: data.local
|
||||
// dep: kiri.utils
|
||||
// dep: kiri.consts
|
||||
gapp.register("kiri.api", (root, exports) => {
|
||||
|
||||
let { data, kiri, moto, noop } = root,
|
||||
{ consts, utils } = kiri,
|
||||
{ ajax, o2js, js2o } = utils,
|
||||
lists = consts.LISTS,
|
||||
clone = Object.clone,
|
||||
isHover = false,
|
||||
feature = {
|
||||
seed: true, // seed profiles on first use
|
||||
meta: true, // show selected widget metadata
|
||||
frame: true, // receive frame events
|
||||
alert_event: false, // emit alerts as events instead of display
|
||||
controls: true, // show or not side menus
|
||||
device_filter: undefined, // function to limit devices shown
|
||||
drop_group: undefined, // optional array to group multi drop
|
||||
drop_layout: true, // layout on new drop
|
||||
hoverAdds: false, // when true only searches widget additions
|
||||
on_key: undefined, // function override default key handlers
|
||||
on_key2: [], // allows for multiple key handlers
|
||||
on_load: undefined, // function override file drop loads
|
||||
on_add_stl: undefined, // legacy override stl drop loads
|
||||
on_mouse_up: undefined, // function intercepts mouse up select
|
||||
on_mouse_down: undefined, // function intercepts mouse down
|
||||
work_alerts: true, // allow disabling work progress alerts
|
||||
pmode: consts.PMODES.SPEED, // preview modes
|
||||
// hover: false, // when true fires mouse hover events
|
||||
get hover() {
|
||||
return isHover;
|
||||
},
|
||||
set hover(b) {
|
||||
isHover = b;
|
||||
moto.broker.publish("feature.hover", b);
|
||||
}
|
||||
},
|
||||
onkey = (fn) => {
|
||||
api.feature.on_key2.push(fn);
|
||||
},
|
||||
doit = {
|
||||
undo: noop, // do.js
|
||||
redo: noop // do.js
|
||||
},
|
||||
devel = {
|
||||
xray(layers, raw) {
|
||||
let proc = api.conf.get().process,
|
||||
size = proc.sliceHeight || proc.slaSlice || 1,
|
||||
base = (proc.firstSliceHeight || size);
|
||||
layers = Array.isArray(layers) ? layers : [ layers ];
|
||||
proc.xray = layers.map(l => raw ? l : base + l * size - size / 2);
|
||||
proc.xrayi = layers.slice();
|
||||
api.function.slice();
|
||||
}
|
||||
},
|
||||
local = {
|
||||
get: (key) => localGet(key),
|
||||
getInt: (key) => parseInt(localGet(key)),
|
||||
getFloat: (key) => parseFloat(localGet(key)),
|
||||
getBoolean: (key, def = true) => {
|
||||
let val = localGet(key);
|
||||
return val === true || val === 'true' || val === def;
|
||||
},
|
||||
toggle: (key, val, def) => localSet(key, val ?? !api.local.getBoolean(key, def)),
|
||||
put: (key, val) => localSet(key, val),
|
||||
set: (key, val) => localSet(key, val),
|
||||
},
|
||||
tweak = {
|
||||
line_precision(v) { api.work.config({base:{clipperClean: v}}) },
|
||||
gcode_decimals(v) { api.work.config({base:{gcode_decimals: v}}) }
|
||||
},
|
||||
und = undefined,
|
||||
api = exports({
|
||||
ajax, // via utils
|
||||
alerts: {}, // alerts.js
|
||||
busy: {}, // main.js
|
||||
catalog: und, // main.js
|
||||
clip, // <--
|
||||
clone, // <--
|
||||
color: und, // main.js
|
||||
conf: {}, // settings.js
|
||||
const: {}, // main.js
|
||||
devel, // <--
|
||||
device: {}, // devices.js
|
||||
devices: {}, // devices.js
|
||||
dialog: {}, // main.js
|
||||
doit, // <--
|
||||
event: {}, // main.js
|
||||
feature, // <--
|
||||
function: {}, // function.js
|
||||
group: {}, // main.js
|
||||
help: {}, // main.js
|
||||
hide: {}, // main.js
|
||||
image: {}, // main.js
|
||||
js2o, // via utils
|
||||
language: und, // main.js
|
||||
lists, // <--
|
||||
local, // <--
|
||||
modal: {}, // main.js
|
||||
mode: {}, // main.js
|
||||
o2js, // via utils
|
||||
onkey, // <--
|
||||
platform: {}, // platform.js
|
||||
probe: {}, // main.js
|
||||
process: {}, // main.js
|
||||
sdb: data.local,
|
||||
selection: {}, // selection.js
|
||||
settings: {}, // settings.js
|
||||
show: {}, // main.js
|
||||
space: {}, // main.js
|
||||
tool: {}, // kiri-mode/cam/tools.js
|
||||
tweak, // <--
|
||||
uc: {}, // main.js
|
||||
ui: {}, // main.js
|
||||
util: {}, // main.js
|
||||
var: {
|
||||
layer_lo: 0,
|
||||
layer_hi: 0,
|
||||
layer_max: 0
|
||||
},
|
||||
view: {}, // main.js
|
||||
widgets: {}, // widgets.js
|
||||
work: und, // main.js
|
||||
});
|
||||
|
||||
function clip(text) {
|
||||
navigator.clipboard
|
||||
.writeText(text)
|
||||
.catch(err => console.error('Clipboard Error:', err));
|
||||
}
|
||||
|
||||
function localGet(key) {
|
||||
let sloc = api.conf.get().local;
|
||||
return sloc[key] || api.sdb[key];
|
||||
}
|
||||
|
||||
function localSet(key, val) {
|
||||
let sloc = api.conf.get().local;
|
||||
sloc[key] = api.sdb[key] = val;
|
||||
return val;
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,12 +1,6 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: kiri.api
|
||||
gapp.register("kiri.alerts", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
const { api } = kiri;
|
||||
import { api } from './api.js';
|
||||
|
||||
let alerts = [];
|
||||
|
||||
|
|
@ -68,11 +62,14 @@ function update(clear) {
|
|||
}
|
||||
}
|
||||
|
||||
// extend API
|
||||
Object.assign(api.alerts, {
|
||||
export {
|
||||
hide,
|
||||
show,
|
||||
update
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
export default {
|
||||
hide,
|
||||
show,
|
||||
update
|
||||
};
|
||||
189
src/kiri/core/api.js
Normal file
189
src/kiri/core/api.js
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
import alerts from './alerts.js';
|
||||
import settings from './settings.js'
|
||||
import STACKS from './stacks.js';
|
||||
|
||||
import { broker } from '../../moto/broker.js';
|
||||
import { client as work } from './client.js';
|
||||
import { consts, COLOR as color, LISTS as lists } from './consts.js';
|
||||
import { device, devices } from './devices.js';
|
||||
import { catalog, dialog, event, group, help, hide, image } from './main.js';
|
||||
import { modal, mode, probe, process, show, space, util, view } from './main.js';
|
||||
import { local as dataLocal } from '../../data/local.js';
|
||||
import { noop, ajax, o2js, js2o } from './utils.js';
|
||||
import { functions } from './function.js';
|
||||
import { platform } from './platform.js';
|
||||
import { selection } from './selection.js';
|
||||
import { stats } from './stats.js';
|
||||
import { newWidget } from './widget.js';
|
||||
import { widgets } from './widgets.js';
|
||||
import { updateTool } from '../mode/cam/tools.js';
|
||||
import { beta, version } from '../../moto/license.js';
|
||||
import { space as SPACE } from '../../moto/space.js';
|
||||
|
||||
import { LANG } from './lang.js';
|
||||
import { LOCAL, SETUP, SECURE } from './main.js';
|
||||
import { UI } from './ui.js';
|
||||
|
||||
import web from '../../moto/webui.js';
|
||||
|
||||
let UC = UI.prefix('kiri').inputAction(settings.conf.update),
|
||||
und = undefined,
|
||||
clone = Object.clone,
|
||||
isHover = false,
|
||||
feature = {
|
||||
seed: true, // seed profiles on first use
|
||||
meta: true, // show selected widget metadata
|
||||
frame: true, // receive frame events
|
||||
alert_event: false, // emit alerts as events instead of display
|
||||
controls: true, // show or not side menus
|
||||
device_filter: und, // function to limit devices shown
|
||||
drop_group: und, // optional array to group multi drop
|
||||
drop_layout: true, // layout on new drop
|
||||
hoverAdds: false, // when true only searches widget additions
|
||||
on_key: und, // function override default key handlers
|
||||
on_key2: [], // allows for multiple key handlers
|
||||
on_load: und, // function override file drop loads
|
||||
on_add_stl: und, // legacy override stl drop loads
|
||||
on_mouse_up: und, // function intercepts mouse up select
|
||||
on_mouse_down: und, // function intercepts mouse down
|
||||
work_alerts: true, // allow disabling work progress alerts
|
||||
pmode: consts.PMODES.SPEED, // preview modes
|
||||
// hover: false, // when true fires mouse hover events
|
||||
get hover() {
|
||||
return isHover;
|
||||
},
|
||||
set hover(b) {
|
||||
isHover = b;
|
||||
broker.publish("feature.hover", b);
|
||||
}
|
||||
},
|
||||
busyVal = 0,
|
||||
busy = {
|
||||
val() { return busyVal },
|
||||
inc() { api.event.emit("busy", ++busyVal) },
|
||||
dec() { api.event.emit("busy", --busyVal) }
|
||||
},
|
||||
onkey = (fn) => {
|
||||
api.feature.on_key2.push(fn);
|
||||
},
|
||||
doit = {
|
||||
undo: noop, // do.js
|
||||
redo: noop // do.js
|
||||
},
|
||||
devel = {
|
||||
xray(layers, raw) {
|
||||
let proc = api.conf.get().process,
|
||||
size = proc.sliceHeight || proc.slaSlice || 1,
|
||||
base = (proc.firstSliceHeight || size);
|
||||
layers = Array.isArray(layers) ? layers : [layers];
|
||||
proc.xray = layers.map(l => raw ? l : base + l * size - size / 2);
|
||||
proc.xrayi = layers.slice();
|
||||
api.function.slice();
|
||||
}
|
||||
},
|
||||
local = {
|
||||
get: (key) => localGet(key),
|
||||
getItem: (key) => localGet(key),
|
||||
getInt: (key) => parseInt(localGet(key)),
|
||||
getFloat: (key) => parseFloat(localGet(key)),
|
||||
getBoolean: (key, def = true) => {
|
||||
let val = localGet(key);
|
||||
return val === true || val === 'true' || val === def;
|
||||
},
|
||||
toggle: (key, val, def) => localSet(key, val ?? !api.local.getBoolean(key, def)),
|
||||
put: (key, val) => localSet(key, val),
|
||||
set: (key, val) => localSet(key, val),
|
||||
setItem: (key, val) => localSet(key, val),
|
||||
},
|
||||
tweak = {
|
||||
line_precision(v) { api.work.config({ base: { clipperClean: v } }) },
|
||||
gcode_decimals(v) { api.work.config({ base: { gcode_decimals: v } }) }
|
||||
};
|
||||
|
||||
function clip(text) {
|
||||
navigator.clipboard
|
||||
.writeText(text)
|
||||
.catch(err => console.error('Clipboard Error:', err));
|
||||
}
|
||||
|
||||
function localGet(key) {
|
||||
let sloc = api.conf.get().local;
|
||||
return sloc[key] || api.sdb[key];
|
||||
}
|
||||
|
||||
function localSet(key, val) {
|
||||
let sloc = api.conf.get().local;
|
||||
sloc[key] = api.sdb[key] = val;
|
||||
return val;
|
||||
}
|
||||
|
||||
export const api = {
|
||||
ajax,
|
||||
beta,
|
||||
alerts,
|
||||
busy,
|
||||
catalog,
|
||||
client: work,
|
||||
clip,
|
||||
clone,
|
||||
color,
|
||||
conf: settings.conf,
|
||||
const: { LANG, LOCAL, SETUP, SECURE, STACKS, ...consts },
|
||||
devel,
|
||||
device,
|
||||
devices,
|
||||
dialog,
|
||||
doit,
|
||||
event,
|
||||
feature,
|
||||
function: functions,
|
||||
group,
|
||||
help,
|
||||
hide,
|
||||
image,
|
||||
js2o,
|
||||
language: LANG,
|
||||
lists,
|
||||
local,
|
||||
modal,
|
||||
mode,
|
||||
new: {
|
||||
widget: newWidget
|
||||
},
|
||||
noop,
|
||||
o2js,
|
||||
onkey,
|
||||
platform,
|
||||
probe,
|
||||
process,
|
||||
sdb: dataLocal,
|
||||
selection,
|
||||
settings,
|
||||
show,
|
||||
space,
|
||||
SPACE,
|
||||
stacks: STACKS,
|
||||
stats,
|
||||
tool: {
|
||||
update: updateTool
|
||||
},
|
||||
tweak,
|
||||
uc: UC,
|
||||
ui: {},
|
||||
util,
|
||||
var: {
|
||||
layer_lo: 0,
|
||||
layer_hi: 0,
|
||||
layer_max: 0
|
||||
},
|
||||
version,
|
||||
view,
|
||||
web,
|
||||
widgets,
|
||||
work,
|
||||
};
|
||||
|
||||
// allow widget to straddle client / worker FOR NOW
|
||||
self.kiri_api = api;
|
||||
60
src/kiri/core/boxes.js
Normal file
60
src/kiri/core/boxes.js
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import { space } from '../../moto/space.js';
|
||||
|
||||
const { BoxGeometry, Matrix4, MeshPhongMaterial, Quaternion, Vector3, Mesh } = THREE;
|
||||
const boxes = [];
|
||||
|
||||
let lastBox;
|
||||
|
||||
export function clearboxes() {
|
||||
boxes.length = 0;
|
||||
}
|
||||
|
||||
export function getlastbox() {
|
||||
return lastBox;
|
||||
}
|
||||
|
||||
export function delbox(name) {
|
||||
const old = boxes[name];
|
||||
if (old) {
|
||||
old.groupTo.remove(old);
|
||||
}
|
||||
}
|
||||
|
||||
export function addbox(point, color, name, dim = {x:1,y:1,z:1,rz:0}, opt = {}) {
|
||||
delbox(name);
|
||||
|
||||
const box = new Mesh(
|
||||
new BoxGeometry(dim.x, dim.y, dim.z),
|
||||
new MeshPhongMaterial({
|
||||
transparent: true,
|
||||
opacity: opt.opacity || 0.5,
|
||||
color
|
||||
})
|
||||
);
|
||||
|
||||
if (name) {
|
||||
boxes[name] = box;
|
||||
}
|
||||
|
||||
box.position.x = point.x;
|
||||
box.position.y = point.y;
|
||||
box.position.z = point.z;
|
||||
|
||||
lastBox = { point, dim };
|
||||
|
||||
const group = opt.group || space.scene;
|
||||
group.add(box);
|
||||
box.groupTo = group;
|
||||
|
||||
if (dim.rz) {
|
||||
opt.rotate = new Quaternion().setFromAxisAngle(new Vector3(0,0,1), dim.rz);
|
||||
}
|
||||
if (opt.rotate) {
|
||||
opt.matrix = new Matrix4().makeRotationFromQuaternion(opt.rotate);
|
||||
}
|
||||
if (opt.matrix) {
|
||||
box.geometry.applyMatrix4(opt.matrix);
|
||||
}
|
||||
|
||||
return box;
|
||||
}
|
||||
|
|
@ -1,27 +1,22 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// use: kiri.api
|
||||
gapp.register("kiri.client", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
import { api } from './api.js';
|
||||
import { noop } from './utils.js';
|
||||
import { codec } from './codec.js';
|
||||
import { Widget } from './widget.js';
|
||||
import { newPrint } from './print.js';
|
||||
|
||||
// this code runs in kiri's main loop
|
||||
let loc = self.location,
|
||||
host = loc.hostname,
|
||||
port = loc.port,
|
||||
proto = loc.protocol,
|
||||
debug = self.debug === true,
|
||||
let debug = self.debug === true,
|
||||
time = Date.now,
|
||||
seqid = 1,
|
||||
syncd = {},
|
||||
running = {},
|
||||
worker = null,
|
||||
minions = false,
|
||||
restarting = false
|
||||
// occ = new Worker("/kiri/ext/occ-worker.js", {type:"module"}),
|
||||
;
|
||||
restarting = false,
|
||||
workpath,
|
||||
poolpath;
|
||||
|
||||
/**
|
||||
* @param {Function} fn name of function in kiri.worker
|
||||
|
|
@ -52,13 +47,23 @@ function send(fn, data, onreply, zerocopy) {
|
|||
}
|
||||
|
||||
// code is running in the browser / client context
|
||||
const client = exports({
|
||||
export const client = {
|
||||
send: send,
|
||||
|
||||
setWorkPath(path) {
|
||||
workpath = path;
|
||||
return client;
|
||||
},
|
||||
|
||||
setPoolPath(path) {
|
||||
poolpath = path;
|
||||
return client;
|
||||
},
|
||||
|
||||
pool: {
|
||||
start() {
|
||||
minions = true;
|
||||
send("pool_start", {}, noop);
|
||||
send("pool_start", { url: poolpath }, noop);
|
||||
},
|
||||
|
||||
stop() {
|
||||
|
|
@ -70,9 +75,21 @@ const client = exports({
|
|||
newWorker() {
|
||||
if (self.createWorker) {
|
||||
return self.createWorker();
|
||||
} else if (self.kiri_work) {
|
||||
const work = atob(self.kiri_work);
|
||||
const blob = new Blob([ work ], { type: 'application/javascript' });
|
||||
return new Worker(URL.createObjectURL(blob));
|
||||
} else {
|
||||
let _ = debug ? '_' : '';
|
||||
return new Worker(`/code/kiri_work.js?${_}${gapp.version}`);
|
||||
let worker = new Worker(workpath || api.const.PATHS.work, { type: 'module' });
|
||||
worker.onerror = (error) => {
|
||||
console.log({ WORKER_ERROR: error });
|
||||
error.preventDefault();
|
||||
};
|
||||
worker.onmessageerror = (error) => {
|
||||
console.log({ WORKER_MESSAGE_ERROR: error });
|
||||
error.preventDefault();
|
||||
};
|
||||
return worker;
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -85,6 +102,10 @@ const client = exports({
|
|||
return current > 0;
|
||||
},
|
||||
|
||||
start() {
|
||||
client.restart();
|
||||
},
|
||||
|
||||
restart() {
|
||||
// prevent re-entry from cancel callback
|
||||
if (restarting) {
|
||||
|
|
@ -108,7 +129,7 @@ const client = exports({
|
|||
running = {};
|
||||
worker = client.newWorker();
|
||||
|
||||
client.onmessage = worker.onmessage = function(e) {
|
||||
client.onmessage = worker.onmessage = (e) => {
|
||||
let now = time(),
|
||||
reply = e.data,
|
||||
record = running[reply.seq],
|
||||
|
|
@ -157,7 +178,7 @@ const client = exports({
|
|||
// widget sync
|
||||
sync(widgets) {
|
||||
if (!widgets) {
|
||||
widgets = kiri.api.widgets.all();
|
||||
widgets = api.widgets.all();
|
||||
}
|
||||
// sync any widget that has changed
|
||||
for (let widget of widgets.filter(w => w.modified || !syncd[w.id])) {
|
||||
|
|
@ -181,7 +202,7 @@ const client = exports({
|
|||
send("rotate", { settings }, reply => {
|
||||
if (reply.group) {
|
||||
// collect post-rotation data for slice/preview renders
|
||||
for (let widget of kiri.Widget.Groups.forid(reply.group)) {
|
||||
for (let widget of Widget.Groups.forid(reply.group)) {
|
||||
widget.belt = reply.belt;
|
||||
}
|
||||
} else if (callback) {
|
||||
|
|
@ -241,7 +262,7 @@ const client = exports({
|
|||
ondone(null, reply.error);
|
||||
}
|
||||
if (reply.debug) {
|
||||
kiri.api.event.emit("export.debug", reply.debug);
|
||||
api.event.emit("export.debug", reply.debug);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
@ -262,10 +283,10 @@ const client = exports({
|
|||
y: -origin.y,
|
||||
z: origin.z
|
||||
};
|
||||
const output = kiri.newPrint().parseSVG(code, offset);
|
||||
const output = newPrint().parseSVG(code, offset);
|
||||
send("parse_svg", output, reply => {
|
||||
if (reply.parsed) {
|
||||
done(kiri.codec.decode(reply.parsed));
|
||||
done(codec.decode(reply.parsed));
|
||||
}
|
||||
});
|
||||
return;
|
||||
|
|
@ -275,7 +296,7 @@ const client = exports({
|
|||
progress(reply.progress);
|
||||
}
|
||||
if (reply.parsed) {
|
||||
done(kiri.codec.decode(reply.parsed), reply.maxSpeed, reply.minSpeed);
|
||||
done(codec.decode(reply.parsed), reply.maxSpeed, reply.minSpeed);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
@ -330,9 +351,8 @@ const client = exports({
|
|||
// console.log({ clearCache_reply: reply });
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// start worker
|
||||
client.restart();
|
||||
self.kiri_client = client;
|
||||
|
||||
});
|
||||
export default client;
|
||||
|
|
@ -1,32 +1,14 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { Layers } from './layers.js';
|
||||
import { newPoint } from '../../geo/point.js';
|
||||
import { Polygon, newPolygon } from '../../geo/polygon.js';
|
||||
import { Slice, newSlice, Top, newTop } from './slice.js';
|
||||
import { Widget, newWidget } from './widget.js';
|
||||
|
||||
// dep: main.kiri
|
||||
// dep: geo.base
|
||||
// dep: geo.polygon
|
||||
// dep: kiri.widget
|
||||
// dep: kiri.slice
|
||||
// dep: kiri.layers
|
||||
gapp.register("kiri.codec", [], (root, exports) => {
|
||||
|
||||
const { base, kiri } = root;
|
||||
const decoders = {};
|
||||
const freeMem = true;
|
||||
|
||||
const codec = exports({
|
||||
undef: undefined,
|
||||
encode: encode,
|
||||
decode: decode,
|
||||
registerDecoder: registerDecoder,
|
||||
allocFloat32Array: allocFloat32Array,
|
||||
encodePointArray,
|
||||
decodePointArray,
|
||||
encodePointArray2D,
|
||||
decodePointArray2D,
|
||||
toCodable
|
||||
});
|
||||
|
||||
const TYPE = {
|
||||
WIDGET: 100,
|
||||
SLICE: 200,
|
||||
|
|
@ -210,7 +192,7 @@ function decodePointArray(array) {
|
|||
const points = new Array(length / 3);
|
||||
|
||||
for (let vid=0, pid=0; vid < length; ) {
|
||||
points[pid++] = base.newPoint(array[vid++], array[vid++], array[vid++]);
|
||||
points[pid++] = newPoint(array[vid++], array[vid++], array[vid++]);
|
||||
}
|
||||
|
||||
return points;
|
||||
|
|
@ -225,7 +207,7 @@ function decodePointArray2D(array, z, fn) {
|
|||
for (let vid=0, pid=0; vid < length; ) {
|
||||
points[pid++] = fn ?
|
||||
fn(array[vid++], array[vid++]) :
|
||||
base.newPoint(array[vid++], array[vid++], z);
|
||||
newPoint(array[vid++], array[vid++], z);
|
||||
}
|
||||
|
||||
return points;
|
||||
|
|
@ -233,7 +215,7 @@ function decodePointArray2D(array, z, fn) {
|
|||
|
||||
// ----- Widget Codec -----
|
||||
|
||||
kiri.Widget.prototype.encode = function(state) {
|
||||
Widget.prototype.encode = function(state) {
|
||||
const json = state._json_;
|
||||
const geo = this.getGeoVertices();
|
||||
const coded = {
|
||||
|
|
@ -252,7 +234,7 @@ registerDecoder(TYPE.WIDGET, function(v, state) {
|
|||
const id = v.id,
|
||||
group = v.group || id,
|
||||
track = v.track || undefined,
|
||||
widget = kiri.newWidget(id, kiri.Widget.Groups.forid(group));
|
||||
widget = newWidget(id, Widget.Groups.forid(group));
|
||||
|
||||
widget.loadVertices(v.json ? v.geo.toFloat32() : v.geo);
|
||||
widget.saved = Date.now();
|
||||
|
|
@ -266,7 +248,7 @@ registerDecoder(TYPE.WIDGET, function(v, state) {
|
|||
|
||||
// ----- Slice Codec -----
|
||||
|
||||
kiri.Slice.prototype.encode = function(state) {
|
||||
Slice.prototype.encode = function(state) {
|
||||
const rv = {
|
||||
type: TYPE.SLICE,
|
||||
z: this.z,
|
||||
|
|
@ -279,7 +261,7 @@ kiri.Slice.prototype.encode = function(state) {
|
|||
};
|
||||
|
||||
registerDecoder(TYPE.SLICE, function(v, state) {
|
||||
let slice = kiri.newSlice(v.z, state.mesh ? state.mesh.newGroup() : null);
|
||||
let slice = newSlice(v.z, state.mesh ? state.mesh.newGroup() : null);
|
||||
|
||||
slice.index = v.index;
|
||||
slice.layers = decode(v.layers, state)
|
||||
|
|
@ -289,7 +271,7 @@ registerDecoder(TYPE.SLICE, function(v, state) {
|
|||
|
||||
// ----- Slice.Top Codec -----
|
||||
|
||||
kiri.Top.prototype.encode = function(state) {
|
||||
Top.prototype.encode = function(state) {
|
||||
let obj = {
|
||||
type: TYPE.TOP,
|
||||
poly: encode(this.poly, state)
|
||||
|
|
@ -307,7 +289,7 @@ kiri.Top.prototype.encode = function(state) {
|
|||
};
|
||||
|
||||
registerDecoder(TYPE.TOP, function(v, state) {
|
||||
let top = kiri.newTop(decode(v.poly, state));
|
||||
let top = newTop(decode(v.poly, state));
|
||||
if (state.full) {
|
||||
// top.gaps = decode(v.gaps, state);
|
||||
top.last = decode(v.last, state);
|
||||
|
|
@ -320,7 +302,7 @@ registerDecoder(TYPE.TOP, function(v, state) {
|
|||
|
||||
// ----- Polygon Codec -----
|
||||
|
||||
base.Polygon.prototype.encode = function(state) {
|
||||
Polygon.prototype.encode = function(state) {
|
||||
if (!state.poly) state.poly = {};
|
||||
|
||||
let cached = state.poly[this.id];
|
||||
|
|
@ -352,10 +334,10 @@ registerDecoder(TYPE.POLY, function(v, state) {
|
|||
|
||||
const array = v.array;
|
||||
const length = array.length;
|
||||
const poly = base.newPolygon();
|
||||
const poly = newPolygon();
|
||||
|
||||
for (let vid = 0; vid < length; ) {
|
||||
poly.push(base.newPoint(array[vid++], array[vid++], array[vid++]));
|
||||
poly.push(newPoint(array[vid++], array[vid++], array[vid++]));
|
||||
}
|
||||
|
||||
state.poly[v.id] = poly;
|
||||
|
|
@ -382,7 +364,7 @@ function encodeLayerPolys(polys, state) {
|
|||
});
|
||||
}
|
||||
|
||||
kiri.Layers.prototype.encode = function(state) {
|
||||
Layers.prototype.encode = function(state) {
|
||||
let zeros = state.zeros;
|
||||
let enc = {
|
||||
type: TYPE.LAYERS,
|
||||
|
|
@ -419,7 +401,7 @@ kiri.Layers.prototype.encode = function(state) {
|
|||
};
|
||||
|
||||
registerDecoder(TYPE.LAYERS, function(v, state) {
|
||||
const render = new kiri.Layers();
|
||||
const render = new Layers();
|
||||
const { layers } = v;
|
||||
|
||||
for (let i=0; i<layers.length; i++) {
|
||||
|
|
@ -463,4 +445,28 @@ registerDecoder(TYPE.LAYERS, function(v, state) {
|
|||
return render;
|
||||
});
|
||||
|
||||
});
|
||||
export const codec = {
|
||||
encode,
|
||||
decode,
|
||||
registerDecoder,
|
||||
allocFloat32Array,
|
||||
encodePointArray,
|
||||
decodePointArray,
|
||||
encodePointArray2D,
|
||||
decodePointArray2D,
|
||||
toCodable
|
||||
};
|
||||
|
||||
export {
|
||||
encode,
|
||||
decode,
|
||||
registerDecoder,
|
||||
allocFloat32Array,
|
||||
encodePointArray,
|
||||
decodePointArray,
|
||||
encodePointArray2D,
|
||||
decodePointArray2D,
|
||||
toCodable
|
||||
};
|
||||
|
||||
self.kiri_codec = codec;
|
||||
|
|
@ -1,13 +1,5 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: add.array
|
||||
// dep: data.local
|
||||
gapp.register("kiri.conf", (root, exports) => {
|
||||
|
||||
const { data } = root;
|
||||
const { local } = data;
|
||||
const { clone } = Object;
|
||||
const CVER = 410;
|
||||
|
||||
|
|
@ -215,12 +207,11 @@ const renamed = {
|
|||
drillDwell: "camDrillDwell",
|
||||
drillLift: "camDrillLift",
|
||||
drillingOn: "camDrillingOn",
|
||||
camPocketOnlyFinish: "camOutlinePocket",
|
||||
camWideCutout: "camOutlineWide",
|
||||
outputClockwise: "camConventional"
|
||||
};
|
||||
|
||||
const conf = exports({
|
||||
export const conf = {
|
||||
// --------------- helper functions
|
||||
normalize,
|
||||
device_from_code,
|
||||
|
|
@ -431,9 +422,10 @@ const conf = exports({
|
|||
camLevelTool: 1000,
|
||||
camLevelSpindle: 1000,
|
||||
camLevelOver: 0.75,
|
||||
camLevelStepZ: 0,
|
||||
camLevelSpeed: 1000,
|
||||
camLevelDown: 0,
|
||||
camLevelOver: 0.5,
|
||||
camLevelInset: 0.5,
|
||||
camLevelStock: true,
|
||||
camRoughTool: 1000,
|
||||
camRoughSpindle: 1000,
|
||||
|
|
@ -494,7 +486,7 @@ const conf = exports({
|
|||
camTracePlunge: 200,
|
||||
camTraceOffOver: 0,
|
||||
camTraceDogbone: false,
|
||||
camTraceMerge: true,
|
||||
camTraceMerge: false,
|
||||
camTraceLines: false,
|
||||
camTraceZTop: 0,
|
||||
camTraceZBottom: 0,
|
||||
|
|
@ -527,6 +519,21 @@ const conf = exports({
|
|||
camRegisterSpeed: 1000,
|
||||
camRegisterThru: 5,
|
||||
camRegisterOffset: 10,
|
||||
camHelicalTool: 1000,
|
||||
camHelicalSpindle: 1000,
|
||||
camHelicalDownSpeed: 250,
|
||||
camHelicalSpeed: 1000,
|
||||
camHelicalDown: 5,
|
||||
camHelicalBottomFinish: true,
|
||||
camHelicalThru: 0,
|
||||
camHelicalOffset: "auto",
|
||||
camHelicalForceStartAngle: false,
|
||||
camHelicalStartAngle: 0,
|
||||
camHelicalOffsetOverride: 0,
|
||||
camHelicalEntry: false,
|
||||
camHelicalEntryOffset:0,
|
||||
camHelicalReverse: false,
|
||||
camHelicalClockwise: true,
|
||||
camFlipAxis: "X",
|
||||
camFlipOther: "",
|
||||
camLaserEnable: ["M321"],
|
||||
|
|
@ -580,7 +587,8 @@ const conf = exports({
|
|||
outputInvertY: false,
|
||||
camExpertFast: false,
|
||||
camTrueShadow: false,
|
||||
camArcTolerance: 0.006,
|
||||
camArcEnabled: false,
|
||||
camArcTolerance: 0.15,
|
||||
camArcResolution: 5,
|
||||
camForceZMax: false,
|
||||
camFirstZMax: false,
|
||||
|
|
@ -973,7 +981,7 @@ const conf = exports({
|
|||
id: genID(),
|
||||
ver: CVER
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const settings = conf.template;
|
||||
|
||||
|
|
@ -992,5 +1000,3 @@ settings.cdev.LASER = clone(settings.device);
|
|||
settings.cdev.DRAG = clone(settings.device);
|
||||
settings.cdev.WJET = clone(settings.device);
|
||||
settings.cdev.WEDM = clone(settings.device);
|
||||
|
||||
});
|
||||
|
|
@ -1,9 +1,5 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
gapp.register("kiri.consts", (root, exports) => {
|
||||
|
||||
const COLOR = {
|
||||
wireframe: 0x444444,
|
||||
wireframe_opacity: 0.25,
|
||||
|
|
@ -94,6 +90,11 @@ const LISTS = {
|
|||
{ name: "inside" },
|
||||
{ name: "outside" }
|
||||
],
|
||||
helicaloff:[
|
||||
{ name: "auto" },
|
||||
{ name: "inside" },
|
||||
{ name: "outside" },
|
||||
],
|
||||
zanchor: [
|
||||
{ name: "top" },
|
||||
{ name: "middle" },
|
||||
|
|
@ -145,16 +146,22 @@ const PMODES = {
|
|||
TOOLS: 2
|
||||
};
|
||||
|
||||
const PATHS = {
|
||||
work: "../lib/kiri/run/worker.js",
|
||||
pool: "./minion.js"
|
||||
};
|
||||
|
||||
const SEED = 'kiri-seed';
|
||||
|
||||
exports({
|
||||
PMODES,
|
||||
export let consts = {
|
||||
COLOR,
|
||||
LISTS,
|
||||
MODES,
|
||||
PATHS,
|
||||
PMODES,
|
||||
VIEWS,
|
||||
SEED,
|
||||
beltfact: Math.cos(Math.PI / 4)
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
export { COLOR, LISTS, MODES, VIEWS, PATHS, PMODES, SEED };
|
||||
|
|
@ -13,7 +13,7 @@ const gapp = self.gapp;
|
|||
|
||||
eval( fs.readFileSync("src/add/array.js").toString() );
|
||||
eval( fs.readFileSync("src/data/local.js").toString() );
|
||||
eval( fs.readFileSync("src/kiri/conf.js").toString() );
|
||||
eval( fs.readFileSync("src/kiri/core/conf.js").toString() );
|
||||
|
||||
gapp.main(undefined, undefined, root => {
|
||||
let kiri = root.kiri;
|
||||
382
src/kiri/core/devices.js
Normal file
382
src/kiri/core/devices.js
Normal file
|
|
@ -0,0 +1,382 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
import { $, h } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { conf } from './conf.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
import { devices as devlist } from '../../pack/kiri-devs.js';
|
||||
import { settings, conf as setconf } from './settings.js';
|
||||
|
||||
export const device = {
|
||||
clone: cloneDevice,
|
||||
code: currentDeviceCode,
|
||||
get: currentDeviceName,
|
||||
set: selectDevice,
|
||||
isBelt
|
||||
};
|
||||
|
||||
export const devices = {
|
||||
show: showDevices,
|
||||
select: selectDevice,
|
||||
refresh: updateDeviceList,
|
||||
update_laser_state: updateLaserState
|
||||
};
|
||||
|
||||
function isBelt() {
|
||||
return setconf.get().device.bedBelt;
|
||||
}
|
||||
|
||||
function currentDeviceName() {
|
||||
return setconf.get().filter[api.mode.get()];
|
||||
}
|
||||
|
||||
function currentDeviceCode() {
|
||||
return setconf.get().devices[currentDeviceName()];
|
||||
}
|
||||
|
||||
function getModeDevices() {
|
||||
return Object.keys(devlist[ api.mode.get_lower() ]).sort();
|
||||
}
|
||||
|
||||
export function showDevices() {
|
||||
settings.sync.get().then(_showDevices);
|
||||
}
|
||||
|
||||
function _showDevices() {
|
||||
updateDeviceList();
|
||||
api.modal.show('setup');
|
||||
}
|
||||
|
||||
function updateDeviceList() {
|
||||
renderDevices(getModeDevices());
|
||||
}
|
||||
|
||||
function updateDeviceName(newname) {
|
||||
let selected = api.device.get(),
|
||||
devs = setconf.get().devices;
|
||||
if (newname !== selected) {
|
||||
devs[newname] = devs[selected];
|
||||
delete devs[selected];
|
||||
selectDevice(newname);
|
||||
updateDeviceList();
|
||||
}
|
||||
}
|
||||
|
||||
function putLocalDevice(devicename, obj) {
|
||||
setconf.get().devices[devicename] = obj;
|
||||
setconf.save();
|
||||
}
|
||||
|
||||
function removeLocalDevice(devicename) {
|
||||
delete setconf.get().devices[devicename];
|
||||
setconf.save();
|
||||
settings.sync.put();
|
||||
}
|
||||
|
||||
function isLocalDevice(devicename) {
|
||||
return setconf.get().devices[devicename] ? true : false;
|
||||
}
|
||||
|
||||
function getSelectedDevice() {
|
||||
return api.device.get();
|
||||
}
|
||||
|
||||
function selectDevice(devicename) {
|
||||
if (isLocalDevice(devicename)) {
|
||||
setDeviceCode(setconf.get().devices[devicename], devicename);
|
||||
} else {
|
||||
let code = devlist[api.mode.get_lower()][devicename];
|
||||
if (code) {
|
||||
setDeviceCode(code, devicename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// only for local filters
|
||||
function cloneDevice() {
|
||||
let name = `${getSelectedDevice().replace(/\./g,' ')}`;
|
||||
let code = api.clone(setconf.get().device);
|
||||
code.mode = api.mode.get();
|
||||
if (name.toLowerCase().indexOf('my ') >= 0) {
|
||||
name = `${name} copy`;
|
||||
} else {
|
||||
name = `My ${name}`;
|
||||
}
|
||||
putLocalDevice(name, code);
|
||||
setDeviceCode(code, name);
|
||||
settings.sync.put();
|
||||
}
|
||||
|
||||
function updateLaserState() {
|
||||
const dev = setconf.get().device;
|
||||
$('laser-on').style.display = dev.useLaser ? 'flex' : 'none';
|
||||
$('laser-off').style.display = dev.useLaser ? 'flex' : 'none';
|
||||
}
|
||||
|
||||
function setDeviceCode(code, devicename) {
|
||||
api.event.emit('device.select', devicename);
|
||||
try {
|
||||
if (typeof(code) === 'string') code = js2o(code) || {};
|
||||
|
||||
let mode = api.mode.get(),
|
||||
lmode = mode.toLowerCase(),
|
||||
current = setconf.get(),
|
||||
local = isLocalDevice(devicename),
|
||||
dev = current.device = conf.device_from_code(code,mode),
|
||||
dproc = current.devproc[devicename], // last process name for this device
|
||||
newdev = dproc === undefined, // first time device is selected
|
||||
predev = current.filter[mode], // previous device selection
|
||||
chgdev = predev !== devicename; // device is changing
|
||||
|
||||
// fill missing device fields
|
||||
conf.fill_cull_once(dev, conf.defaults[lmode].d);
|
||||
|
||||
// first time device use, add any print profiles and set to default if present
|
||||
if (code.profiles) {
|
||||
for (let profile of code.profiles) {
|
||||
let profname = profile.processName;
|
||||
// if no saved profile by that name for this mode...
|
||||
if (!current.sproc[mode][profname]) {
|
||||
console.log('adding profile', profname, 'to', mode);
|
||||
current.sproc[mode][profname] = profile;
|
||||
}
|
||||
// if it's a new device, seed the new profile name as last profile
|
||||
if (newdev && !current.devproc[devicename]) {
|
||||
console.log('setting default profile for new device', devicename, 'to', profname);
|
||||
current.devproc[devicename] = dproc = profname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dev.new = false;
|
||||
dev.deviceName = devicename;
|
||||
|
||||
let { platform, ui, uc } = api;
|
||||
|
||||
ui.deviceBelt.checked = dev.bedBelt;
|
||||
ui.deviceRound.checked = dev.bedRound;
|
||||
ui.deviceOrigin.checked = dev.ctOriginCenter || dev.originCenter || dev.bedRound;
|
||||
ui.fwRetract.checked = dev.fwRetract;
|
||||
|
||||
// add extruder selection buttons
|
||||
if (dev.extruders) {
|
||||
let ext = api.lists.extruders = [];
|
||||
dev.internal = 0;
|
||||
for (let i=0; i<dev.extruders.length; i++) {
|
||||
ext.push({id:i, name:i});
|
||||
}
|
||||
}
|
||||
|
||||
// disable editing for non-local devices
|
||||
[
|
||||
// ui.deviceName,
|
||||
ui.gcodePre,
|
||||
ui.gcodePost,
|
||||
ui.bedDepth,
|
||||
ui.bedWidth,
|
||||
ui.maxHeight,
|
||||
ui.useLaser,
|
||||
ui.resolutionX,
|
||||
ui.resolutionY,
|
||||
ui.deviceOrigin,
|
||||
ui.deviceRound,
|
||||
ui.deviceBelt,
|
||||
ui.fwRetract,
|
||||
ui.deviceZMax,
|
||||
ui.gcodeTime,
|
||||
ui.gcodeFan,
|
||||
ui.gcodeFeature,
|
||||
ui.gcodeTrack,
|
||||
ui.gcodeLayer,
|
||||
ui.extFilament,
|
||||
ui.extNozzle,
|
||||
ui.spindleMax,
|
||||
ui.gcodeSpindle,
|
||||
ui.gcodeDwell,
|
||||
ui.gcodeChange,
|
||||
ui.gcodeFExt,
|
||||
ui.gcodeSpace,
|
||||
ui.gcodeStrip,
|
||||
ui.gcodeLaserOn,
|
||||
ui.gcodeLaserOff,
|
||||
ui.laserMaxPower,
|
||||
ui.extPrev,
|
||||
ui.extNext,
|
||||
ui.extAdd,
|
||||
ui.extDel,
|
||||
ui.extOffsetX,
|
||||
ui.extOffsetY
|
||||
].forEach(function(e) {
|
||||
e.disabled = !local;
|
||||
});
|
||||
|
||||
ui.deviceSave.disabled = !local;
|
||||
ui.deviceDelete.disabled = !local;
|
||||
ui.deviceRename.disabled = !local;
|
||||
ui.deviceExport.disabled = !local;
|
||||
ui.deviceAdd.style.display = mode === 'SLA' ? 'none' : '';
|
||||
|
||||
if (local) {
|
||||
ui.deviceAdd.innerText = "copy";
|
||||
ui.deviceDelete.style.display = '';
|
||||
ui.deviceRename.style.display = '';
|
||||
ui.deviceExport.style.display = '';
|
||||
} else {
|
||||
ui.deviceAdd.innerText = "customize";
|
||||
ui.deviceDelete.style.display = 'none';
|
||||
ui.deviceRename.style.display = 'none';
|
||||
ui.deviceExport.style.display = 'none';
|
||||
}
|
||||
ui.deviceAdd.disabled = dev.noclone;
|
||||
|
||||
setconf.update_fields();
|
||||
space.platform.setBelt(isBelt());
|
||||
platform.update_size();
|
||||
platform.update_origin();
|
||||
platform.update();
|
||||
updateLaserState();
|
||||
|
||||
// store current device name for this mode
|
||||
current.filter[mode] = devicename;
|
||||
// cache device record for this mode (restored in setMode)
|
||||
current.cdev[mode] = dev;
|
||||
|
||||
if (dproc) {
|
||||
// restore last process associated with this device
|
||||
setconf.load(null, dproc);
|
||||
} else {
|
||||
setconf.update();
|
||||
}
|
||||
|
||||
setconf.save();
|
||||
|
||||
if (isBelt()) {
|
||||
// space.view.setHome(dev.bedBelt ? Math.PI/2 : 0, Math.PI / 2.5);
|
||||
space.view.setHome(0, Math.PI / 2.5);
|
||||
} else {
|
||||
space.view.setHome(0);
|
||||
}
|
||||
// when changing devices, update focus on widgets
|
||||
if (chgdev) {
|
||||
setTimeout(api.space.set_focus, 0);
|
||||
}
|
||||
|
||||
uc.refresh(1);
|
||||
api.event.emit('device.selected', dev);
|
||||
} catch (e) {
|
||||
console.log({error:e, device:code, devicename});
|
||||
api.show.alert(`invalid or deprecated device: "${devicename}"`, 10);
|
||||
api.show.alert(`please select a new device`, 10);
|
||||
throw e;
|
||||
showDevices();
|
||||
}
|
||||
api.function.clear();
|
||||
api.event.settings();
|
||||
}
|
||||
|
||||
function renderDevices(devices) {
|
||||
let selected = api.device.get() || devices[0],
|
||||
features = api.feature,
|
||||
devs = setconf.get().devices,
|
||||
dfilter = typeof(features.device_filter) === 'function' ? features.device_filter : undefined;
|
||||
|
||||
for (let local in devs) {
|
||||
if (!(devs.hasOwnProperty(local) && devs[local])) {
|
||||
continue;
|
||||
}
|
||||
let dev = devs[local],
|
||||
fdmCode = dev.cmd,
|
||||
fdmMode = (api.mode.get() === 'FDM');
|
||||
if (dev.mode ? (dev.mode === api.mode.get()) : (fdmCode ? fdmMode : !fdmMode)) {
|
||||
devices.push(local);
|
||||
}
|
||||
};
|
||||
|
||||
devices = devices.sort();
|
||||
|
||||
let { event, ui } = api;
|
||||
|
||||
event.emit('devices.render', devices);
|
||||
|
||||
ui.deviceSave.onclick = function() {
|
||||
event.emit('device.save');
|
||||
api.function.clear();
|
||||
setconf.save();
|
||||
settings.sync.put();
|
||||
showDevices();
|
||||
api.modal.hide();
|
||||
};
|
||||
ui.deviceAdd.onclick = function() {
|
||||
api.function.clear();
|
||||
cloneDevice();
|
||||
showDevices();
|
||||
};
|
||||
ui.deviceDelete.onclick = function() {
|
||||
api.function.clear();
|
||||
removeLocalDevice(getSelectedDevice());
|
||||
selectDevice(getModeDevices()[0]);
|
||||
showDevices();
|
||||
};
|
||||
ui.deviceRename.onclick = function() {
|
||||
api.uc.prompt(`Rename "${selected}`, selected).then(newname => {
|
||||
if (newname) {
|
||||
updateDeviceName(newname);
|
||||
setconf.save();
|
||||
settings.sync.put();
|
||||
showDevices();
|
||||
} else {
|
||||
showDevices();
|
||||
}
|
||||
});
|
||||
};
|
||||
ui.deviceExport.onclick = function(event) {
|
||||
const record = {
|
||||
version: kiri.version,
|
||||
device: selected,
|
||||
process: api.process.code(),
|
||||
profiles: event.altKey ? settings.prof() : undefined,
|
||||
code: devs[selected],
|
||||
time: Date.now()
|
||||
};
|
||||
let exp = api.util.b64enc(record);
|
||||
api.device.export(exp, selected, { event, record });
|
||||
};
|
||||
|
||||
let dedup = {};
|
||||
let list_cdev = [];
|
||||
let list_mdev = [];
|
||||
devices.forEach(function(device, index) {
|
||||
// prevent device from appearing twice
|
||||
// such as local name = standard device name
|
||||
if (dedup[device]) {
|
||||
return;
|
||||
}
|
||||
dedup[device] = device;
|
||||
let loc = isLocalDevice(device);
|
||||
if (dfilter && dfilter(device) === false) {
|
||||
return;
|
||||
}
|
||||
if (loc) {
|
||||
list_mdev.push(h.option(device));
|
||||
} else {
|
||||
list_cdev.push(h.option(device));
|
||||
}
|
||||
});
|
||||
|
||||
let dev_list = $('dev-list');
|
||||
h.bind(dev_list, [
|
||||
h.option({ _: '-- My Devices --', disabled: true }),
|
||||
...list_mdev,
|
||||
h.option({ _: '-- Stock Devices --', disabled: true }),
|
||||
...list_cdev
|
||||
]);
|
||||
let dev_opts = [...dev_list.options].map(o => o.innerText);
|
||||
dev_list.selectedIndex = dev_opts.indexOf(selected);
|
||||
dev_list.onchange = ev => {
|
||||
const seldev = dev_list.options[dev_list.selectedIndex];
|
||||
selectDevice(seldev.innerText);
|
||||
api.platform.layout();
|
||||
}
|
||||
selectDevice(selected);
|
||||
}
|
||||
|
||||
|
|
@ -1,13 +1,8 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
// dep: kiri.api
|
||||
// use: kiri.selection
|
||||
// use: moto.space
|
||||
gapp.register("kiri.do", [], (root, events) => {
|
||||
import { api } from './api.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
|
||||
const { kiri, moto } = root;
|
||||
const { api } = kiri;
|
||||
const { space } = moto;
|
||||
const { event } = api;
|
||||
|
||||
let stack = [];
|
||||
|
|
@ -44,7 +39,7 @@ let clear = api.doit.clear = function() {
|
|||
};
|
||||
|
||||
function updateButtons() {
|
||||
let isArrange = api.view.get() === kiri.consts.VIEWS.ARRANGE;
|
||||
let isArrange = api.view.get() === api.consts.VIEWS.ARRANGE;
|
||||
$('doit').style.display = isArrange && stack.length ? 'flex' : 'none';
|
||||
$('undo').disabled = stpos === 0;
|
||||
$('redo').disabled = stpos == stack.length;
|
||||
|
|
@ -175,5 +170,3 @@ event.on('mouse.drag.done', () => {
|
|||
});
|
||||
moved = {x:0, y:0};
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -1,23 +1,13 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: ext.md5
|
||||
// dep: geo.base
|
||||
// dep: data.local
|
||||
// dep: kiri.consts
|
||||
// dep: kiri.api
|
||||
// dep: kiri.main
|
||||
gapp.register("kiri.export", [], (root, exports) => {
|
||||
|
||||
const { base, data, kiri } = root;
|
||||
const { api, consts } = kiri;
|
||||
const { local } = data;
|
||||
const { util } = base;
|
||||
const { stats, ui } = api;
|
||||
const { MODES } = consts;
|
||||
|
||||
kiri.export = exportFile;
|
||||
import { $ } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { client } from './client.js';
|
||||
import { local } from '../../data/local.js';
|
||||
import { util } from '../../geo/base.js';
|
||||
import { MODES } from './consts.js';
|
||||
import { LASER as laser_driver } from '../mode/laser/driver.js';
|
||||
import { SLA as sla_client } from '../mode/sla/client.js';
|
||||
|
||||
let printSeq = parseInt(local['kiri-print-seq'] || local['print-seq'] || "0") + 1;
|
||||
|
||||
|
|
@ -29,7 +19,7 @@ function localSet(key, val) {
|
|||
return api.local.set(key, val);
|
||||
}
|
||||
|
||||
function exportFile(options) {
|
||||
export function exportFile(options) {
|
||||
let mode = api.mode.get();
|
||||
let names = api.widgets.all().map(w => w.meta ? w.meta.file : undefined)
|
||||
.filter(v => v)
|
||||
|
|
@ -53,7 +43,7 @@ function callExport(callback, mode, names) {
|
|||
let gcode = [];
|
||||
let section = [];
|
||||
let sections = { };
|
||||
kiri.client.export(api.conf.get(), (line) => {
|
||||
client.export(api.conf.get(), (line) => {
|
||||
if (typeof line !== 'string') {
|
||||
if (line.section) {
|
||||
sections[line.section] = section = [];
|
||||
|
|
@ -75,7 +65,7 @@ function callExport(callback, mode, names) {
|
|||
}
|
||||
|
||||
function callExportLaser(options, names) {
|
||||
kiri.client.export(api.conf.get(), (line) => {
|
||||
client.export(api.conf.get(), (line) => {
|
||||
// engine export uses lines
|
||||
// console.log({unexpected_line: line});
|
||||
}, (output, error) => {
|
||||
|
|
@ -89,14 +79,14 @@ function callExportLaser(options, names) {
|
|||
}
|
||||
|
||||
function callExportSLA(options, names) {
|
||||
kiri.client.export(api.conf.get(), (line) => {
|
||||
client.export(api.conf.get(), (line) => {
|
||||
api.show.progress(line.progress, "exporting");
|
||||
}, (output, error) => {
|
||||
api.show.progress(0);
|
||||
if (error) {
|
||||
api.show.alert(error, 5);
|
||||
} else {
|
||||
kiri.driver.SLA.printDownload(output, api, names);
|
||||
sla_client.printDownload(output, api, names);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -107,7 +97,7 @@ function exportLaserDialog(data, names) {
|
|||
const fileroot = names[0] || "laser";
|
||||
const filename = `${fileroot}-${(printSeq.toString().padStart(3,"0"))}`;
|
||||
const settings = api.conf.get();
|
||||
const driver = kiri.driver.LASER;
|
||||
const driver = laser_driver;
|
||||
|
||||
function download_svg() {
|
||||
api.util.download(
|
||||
|
|
@ -207,7 +197,7 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
ajax.onreadystatechange = function() {
|
||||
if (ajax.readyState === 4) {
|
||||
let status = ajax.status;
|
||||
stats.add(`ua_${api.mode.get_lower()}_print_octo_${status}`);
|
||||
api.stats.add(`ua_${api.mode.get_lower()}_print_octo_${status}`);
|
||||
if (status >= 200 && status < 300) {
|
||||
api.modal.hide();
|
||||
} else {
|
||||
|
|
@ -278,11 +268,11 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
)
|
||||
.then(t => t.text())
|
||||
.then(t => {
|
||||
stats.add(`ua_${api.mode.get_lower()}_print_local_ok`);
|
||||
api.stats.add(`ua_${api.mode.get_lower()}_print_local_ok`);
|
||||
console.log({grid_spool_said: t});
|
||||
})
|
||||
.catch(e => {
|
||||
stats.add(`ua_${api.mode.get_lower()}_print_local_err`);
|
||||
api.stats.add(`ua_${api.mode.get_lower()}_print_local_err`);
|
||||
console.log({grid_local_spool_error: e});
|
||||
})
|
||||
.finally(() => {
|
||||
|
|
@ -394,7 +384,7 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
xhtr.onreadystatechange = function() {
|
||||
if (xhtr.readyState === 4) {
|
||||
let status = xhtr.status;
|
||||
stats.add(`ua_${api.mode.get_lower()}_print_grid_${status}`);
|
||||
api.stats.add(`ua_${api.mode.get_lower()}_print_grid_${status}`);
|
||||
if (status >= 200 && status < 300) {
|
||||
let json = js2o(xhtr.responseText);
|
||||
gridhost_tracker(host,json.key);
|
||||
|
|
@ -481,7 +471,7 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
$('print-filament').style.display = fdm ? '' : 'none';
|
||||
$('print-filename').value = filename;
|
||||
$('print-filesize').value = util.comma(info.bytes);
|
||||
$('print-filament').value = Math.round(info.distance);
|
||||
$('print-length').value = Math.round(info.distance);
|
||||
if (set.controller.devel) {
|
||||
$('code-preview-textarea').style.height = "30em";
|
||||
}
|
||||
|
|
@ -511,7 +501,7 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
})
|
||||
}
|
||||
}
|
||||
kiri.client.zip(files, progress => {
|
||||
client.zip(files, progress => {
|
||||
api.show.progress(progress.percent/100, "generating zip files");
|
||||
}, output => {
|
||||
api.show.progress(0);
|
||||
|
|
@ -681,7 +671,7 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
name: `Metadata/top_1.png`,
|
||||
data: api.view.bambu.s512.png
|
||||
}];
|
||||
kiri.client.zip(files, progress => {
|
||||
client.zip(files, progress => {
|
||||
api.show.progress(progress.percent/100, "generating 3mf");
|
||||
}, output => {
|
||||
api.show.progress(0);
|
||||
|
|
@ -742,5 +732,3 @@ function exportGCodeDialog(gcode, sections, info, names) {
|
|||
// preview of the generated GCODE (first 64k max)
|
||||
if (preview && gcode) $('code-preview-textarea').value = gcode.substring(0,65535);
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,13 +1,5 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: main.kiri
|
||||
// use: data.index
|
||||
gapp.register("kiri.files", [], (root, exports) => {
|
||||
|
||||
const { kiri } = self;
|
||||
|
||||
class Files {
|
||||
constructor(indexdb) {
|
||||
let store = this;
|
||||
|
|
@ -176,8 +168,8 @@ function notifyFileListeners(store) {
|
|||
}
|
||||
}
|
||||
|
||||
kiri.openFiles = function(indexdb) {
|
||||
export const openFiles = function(indexdb) {
|
||||
return new Files(indexdb);
|
||||
};
|
||||
|
||||
});
|
||||
export { saveFileList, notifyFileListeners };
|
||||
|
|
@ -1,19 +1,12 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// use: load.stl
|
||||
// use: load.svg
|
||||
// use: kiri.api
|
||||
// use: kiri.platform
|
||||
// use: kiri.settings
|
||||
// use: kiri.widget
|
||||
gapp.register("kiri.frame", [], (root, exports) => {
|
||||
import { api } from './api.js';
|
||||
import { load } from '../../load/file.js';
|
||||
import { newWidget } from './widget.js';
|
||||
import { VIEWS } from './consts.js';
|
||||
|
||||
// add frame message api listener
|
||||
window.addEventListener('message', msg => {
|
||||
const { load, kiri, moto } = self;
|
||||
const { api, newWidget } = kiri;
|
||||
const { conf, event, feature, platform, settings, show } = api;
|
||||
|
||||
if (!feature.frame) return;
|
||||
|
|
@ -126,5 +119,3 @@ window.addEventListener('message', msg => {
|
|||
show.progress(data.progress, data.message);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -1,30 +1,16 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: kiri.api
|
||||
// dep: kiri.client
|
||||
// dep: kiri.export
|
||||
// dep: moto.space
|
||||
// use: kiri-mode.cam.client
|
||||
// dep: kiri-mode.fdm.client
|
||||
// dep: kiri-mode.sla.client
|
||||
// dep: kiri-mode.laser.driver
|
||||
// dep: kiri-mode.drag.driver
|
||||
// dep: kiri-mode.wjet.driver
|
||||
// dep: kiri-mode.wedm.driver
|
||||
gapp.register("kiri.function", (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
const { api, client, consts, utils } = kiri;
|
||||
const { space } = moto;
|
||||
const { COLOR, PMODES } = consts;
|
||||
import { api } from './api.js';
|
||||
import { client } from './client.js';
|
||||
import { codec } from './codec.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
import { COLOR, PMODES } from './consts.js';
|
||||
import { exportFile } from './export.js';
|
||||
|
||||
let complete = {};
|
||||
|
||||
function prepareSlices(callback, scale = 1, offset = 0) {
|
||||
const { conf, event, feature, hide, mode, view, platform, show } = api;
|
||||
const { stacks } = kiri;
|
||||
const { conf, event, feature, hide, mode, view, platform, show, stacks } = api;
|
||||
|
||||
if (view.is_arrange()) {
|
||||
// in arrange mode, create a screenshot at the start slicing
|
||||
|
|
@ -139,16 +125,43 @@ function prepareSlices(callback, scale = 1, offset = 0) {
|
|||
}
|
||||
|
||||
function sliceWidget(widget) {
|
||||
// weight each widget progress % by their # vertices
|
||||
let factor = (widget.getVertices().count / defvert);
|
||||
|
||||
widget.slice(settings, (sliced, error) => {
|
||||
function onupdate(update, msg, alert) {
|
||||
if (alert) {
|
||||
api.show.alert(alert);
|
||||
}
|
||||
if (msg && msg !== lastMsg) {
|
||||
let mark = Date.now();
|
||||
if (lastMsg) {
|
||||
let key = slicing.length > 1 ?
|
||||
`${widget.id}_${segNumber++}_${lastMsg}` :
|
||||
`${segNumber++}_${lastMsg}`
|
||||
segtimes[key] = mark - startTime;
|
||||
}
|
||||
lastMsg = msg;
|
||||
startTime = mark;
|
||||
}
|
||||
// on update
|
||||
if (update >= 0) {
|
||||
track[widget.id] = (update || 0) * factor;
|
||||
totalProgress = 0;
|
||||
for (let w of slicing) {
|
||||
totalProgress += (track[w.id] || 0);
|
||||
}
|
||||
show.progress(offset + (totalProgress / slicing.length) * scale, msg);
|
||||
}
|
||||
}
|
||||
|
||||
function ondone(sliced, error) {
|
||||
let mark = Date.now();
|
||||
// update UI info
|
||||
if (sliced) {
|
||||
// update segment time
|
||||
if (lastMsg) {
|
||||
segtimes[`${widget.id}_${segNumber++}_${lastMsg}`] = mark - startTime;
|
||||
let key = slicing.length > 1 ?
|
||||
`${widget.id}_${segNumber++}_${lastMsg}` :
|
||||
`${segNumber++}_${lastMsg}`
|
||||
segtimes[`${key}`] = mark - startTime;
|
||||
}
|
||||
event.emit('slice', settings.mode);
|
||||
}
|
||||
|
|
@ -169,28 +182,55 @@ function prepareSlices(callback, scale = 1, offset = 0) {
|
|||
// start next widget slice
|
||||
sliceNext();
|
||||
}
|
||||
}, (update, msg, alert) => {
|
||||
if (alert) {
|
||||
api.show.alert(alert);
|
||||
}
|
||||
|
||||
// weight each widget progress % by their # vertices
|
||||
let factor = (widget.getVertices().count / defvert);
|
||||
|
||||
widget.settings = settings;
|
||||
widget.clearSlices();
|
||||
|
||||
onupdate(0.0001, "slicing");
|
||||
|
||||
// store slicing visuals
|
||||
widget.stack = api.stacks.create(widget.id, widget.mesh);
|
||||
|
||||
// compensate for zcut (widget moved through floor)
|
||||
widget.stack.obj.view.position.z = widget.track.zcut || 0;
|
||||
|
||||
// in case result of slice is nothing, do not preserve previous
|
||||
widget.slices = []
|
||||
|
||||
// executed from kiri.js
|
||||
client.slice(settings, widget, (reply) => {
|
||||
if (reply.alert) {
|
||||
onupdate(null, null, reply.alert);
|
||||
}
|
||||
if (msg && msg !== lastMsg) {
|
||||
let mark = Date.now();
|
||||
if (lastMsg) {
|
||||
segtimes[`${widget.id}_${segNumber++}_${lastMsg}`] = mark - startTime;
|
||||
}
|
||||
lastMsg = msg;
|
||||
startTime = mark;
|
||||
if (reply.update) {
|
||||
onupdate(reply.update, reply.updateStatus);
|
||||
}
|
||||
// on update
|
||||
if (update >= 0) {
|
||||
track[widget.id] = (update || 0) * factor;
|
||||
totalProgress = 0;
|
||||
for (let w of slicing) {
|
||||
totalProgress += (track[w.id] || 0);
|
||||
}
|
||||
show.progress(offset + (totalProgress / slicing.length) * scale, msg);
|
||||
if (reply.send_start) {
|
||||
widget.xfer = {start: reply.send_start};
|
||||
}
|
||||
if (reply.stats) {
|
||||
widget.stats = reply.stats;
|
||||
}
|
||||
if (reply.send_end) {
|
||||
widget.stats.load_time = widget.xfer.start - reply.send_end;
|
||||
}
|
||||
if (reply.slice) {
|
||||
widget.slices.push(codec.decode(reply.slice, {mesh:widget.mesh}));
|
||||
}
|
||||
if (reply.done) {
|
||||
ondone(true);
|
||||
}
|
||||
if (reply.error) {
|
||||
ondone(false, reply.error);
|
||||
}
|
||||
});
|
||||
|
||||
// discard point cache
|
||||
widget.points = undefined;
|
||||
}
|
||||
|
||||
function sliceDone() {
|
||||
|
|
@ -200,7 +240,10 @@ function prepareSlices(callback, scale = 1, offset = 0) {
|
|||
};
|
||||
for (let widget of slicing) {
|
||||
// on done
|
||||
segtimes[`${widget.id}_${segNumber++}_draw`] = widget.render(widget.stack);
|
||||
let key = slicing.length > 1 ?
|
||||
`${widget.id}_${segNumber++}_draw` :
|
||||
`${segNumber++}_draw`
|
||||
segtimes[`${key}`] = widget.render(widget.stack);
|
||||
// rotate stack for belt beds
|
||||
if (widget.belt) {
|
||||
widget.stack.obj.rotate(widget.belt);
|
||||
|
|
@ -247,9 +290,7 @@ function prepareSlices(callback, scale = 1, offset = 0) {
|
|||
}
|
||||
|
||||
function preparePreview(callback, scale = 1, offset = 0) {
|
||||
const { conf, event, feature, hide, mode, view, platform, show } = api;
|
||||
const { stacks } = kiri;
|
||||
|
||||
const { conf, event, feature, hide, mode, view, platform, show, stacks } = api;
|
||||
const widgets = api.widgets.all();
|
||||
const settings = conf.get();
|
||||
const { device, process, controller } = settings;
|
||||
|
|
@ -305,7 +346,7 @@ function preparePreview(callback, scale = 1, offset = 0) {
|
|||
|
||||
client.prepare(settings, (progress, message, layer) => {
|
||||
if (layer) {
|
||||
output.push(kiri.codec.decode(layer));
|
||||
output.push(codec.decode(layer));
|
||||
}
|
||||
if (message && message !== lastMsg) {
|
||||
const mark = Date.now();
|
||||
|
|
@ -407,7 +448,7 @@ function prepareExport() {
|
|||
}
|
||||
api.event.emit("function.export", {mode: settings.mode});
|
||||
complete.export = true;
|
||||
kiri.export(...argsave);
|
||||
exportFile(...argsave);
|
||||
}
|
||||
|
||||
function cancelWorker() {
|
||||
|
|
@ -417,8 +458,7 @@ function cancelWorker() {
|
|||
}
|
||||
|
||||
function parseCode(code, type) {
|
||||
const { conf, event, show, widgets, view } = api;
|
||||
const { stacks } = kiri;
|
||||
const { conf, event, show, stacks, widgets, view } = api;
|
||||
const settings = conf.get();
|
||||
|
||||
event.emit("code.load", {code, type});
|
||||
|
|
@ -441,8 +481,12 @@ function parseCode(code, type) {
|
|||
});
|
||||
}
|
||||
|
||||
function clear_progress() {
|
||||
complete = {};
|
||||
}
|
||||
|
||||
// extend API (api.function)
|
||||
const functions = Object.assign(api.function, {
|
||||
export const functions = {
|
||||
slice: prepareSlices,
|
||||
print: preparePreview,
|
||||
prepare: preparePreview,
|
||||
|
|
@ -451,7 +495,16 @@ const functions = Object.assign(api.function, {
|
|||
cancel: cancelWorker,
|
||||
parse: parseCode,
|
||||
clear: client.clear,
|
||||
clear_progress() { complete = {} }
|
||||
});
|
||||
clear_progress,
|
||||
};
|
||||
|
||||
});
|
||||
export {
|
||||
prepareSlices as slice,
|
||||
preparePreview as print,
|
||||
preparePreview as prepare,
|
||||
prepareAnimation as animate,
|
||||
prepareExport as export,
|
||||
cancelWorker as cancel,
|
||||
parseCode as parse,
|
||||
clear_progress,
|
||||
};
|
||||
1879
src/kiri/core/init.js
Normal file
1879
src/kiri/core/init.js
Normal file
File diff suppressed because it is too large
Load diff
1
src/kiri/core/lang-en.js
Symbolic link
1
src/kiri/core/lang-en.js
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../../web/kiri/lang/en.js
|
||||
|
|
@ -1,11 +1,6 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
gapp.register("kiri.lang", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
const LANG = kiri.lang = { current: {} };
|
||||
const LANG = self.lang = { current: {} };
|
||||
const KDFL = 'en-us';
|
||||
|
||||
let lset = navigator.language.toLocaleLowerCase();
|
||||
|
|
@ -78,4 +73,6 @@ LANG.set = function() {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
});
|
||||
export default { LANG };
|
||||
|
||||
export { LANG };
|
||||
|
|
@ -1,25 +1,9 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { newPolygon, Polygon } from '../../geo/polygon.js';
|
||||
import { polygons as POLY } from '../../geo/polygons.js';
|
||||
|
||||
/*
|
||||
* provides the `output` abstraction for turning poly lines (open and closed)
|
||||
* into primordial geometries (faces, lines, color ranges). used inside of
|
||||
* workers as part of slicing and preview output.
|
||||
*/
|
||||
|
||||
// dep: geo.base
|
||||
// dep: geo.paths
|
||||
// dep: geo.polygon
|
||||
// dep: geo.polygons
|
||||
gapp.register("kiri.layers", [], (root, exports) => {
|
||||
|
||||
const { base, kiri } = root;
|
||||
const { polygons, newPolygon } = base;
|
||||
|
||||
const POLY = base.polygons;
|
||||
|
||||
class Layers {
|
||||
export class Layers {
|
||||
constructor() {
|
||||
this.init();
|
||||
}
|
||||
|
|
@ -94,7 +78,7 @@ class Layers {
|
|||
options.open = true;
|
||||
const polys = [];
|
||||
for (let i=0; i<lines.length-1; i += 2) {
|
||||
polys.push(new base.Polygon()
|
||||
polys.push(new Polygon()
|
||||
.append(lines[i])
|
||||
.append(lines[i+1])
|
||||
.setOpen());
|
||||
|
|
@ -110,11 +94,14 @@ class Layers {
|
|||
|
||||
// an open or closed polygon
|
||||
addPoly(poly, options) {
|
||||
return this.addPolys([poly], options);
|
||||
return this.addPolys([ poly ], options);
|
||||
}
|
||||
|
||||
// a polygon rendered as a webgl line
|
||||
addPolys(polys, options) {
|
||||
if (!Array.isArray(polys)) {
|
||||
throw "polys must be an array";
|
||||
}
|
||||
if (polys.length === 0) {
|
||||
return this;
|
||||
}
|
||||
|
|
@ -186,8 +173,7 @@ class Layers {
|
|||
p1.setZ(poly.z);
|
||||
p2.setZ(poly.z);
|
||||
}
|
||||
this.addPolys(p1);
|
||||
this.addPolys(p2);
|
||||
this.addPolys([ p1, p2 ]);
|
||||
}
|
||||
const color = opts.color ?
|
||||
(typeof(opts.color) === 'number' ? { line: opts.color, face: opts.color } : opts.color) :
|
||||
|
|
@ -277,7 +263,3 @@ function flat(polys) {
|
|||
return POLY.flatten([polys.clone(true)], [], true);
|
||||
}
|
||||
}
|
||||
|
||||
kiri.Layers = Layers;
|
||||
|
||||
});
|
||||
959
src/kiri/core/main.js
Normal file
959
src/kiri/core/main.js
Normal file
|
|
@ -0,0 +1,959 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
import './frame.js';
|
||||
|
||||
import lang from './lang.js';
|
||||
import STACKS from './stacks.js';
|
||||
|
||||
import { $ } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { broker } from '../../moto/broker.js';
|
||||
import { consts } from './consts.js';
|
||||
import { Index } from '../../data/index.js';
|
||||
import { local as dataLocal } from '../../data/local.js';
|
||||
import { openFiles } from './files.js';
|
||||
import { platform } from './platform.js';
|
||||
import { selection } from './selection.js';
|
||||
import { settings } from './settings.js';
|
||||
import { showDevices } from './devices.js';
|
||||
import { space as SPACE } from '../../moto/space.js';
|
||||
import { stats } from './stats.js';
|
||||
import { noop, utils } from './utils.js';
|
||||
import { version } from '../../moto/license.js';
|
||||
import { Widget, newWidget } from './widget.js';
|
||||
import { showTools } from '../mode/cam/tools.js';
|
||||
|
||||
let { parseOpt, o2js, js2o, ls2o } = utils,
|
||||
{ COLOR, MODES, VIEWS } = consts,
|
||||
LANG = lang.current,
|
||||
WIN = self.window,
|
||||
DOC = self.document,
|
||||
LOC = self.location,
|
||||
SETUP = parseOpt(LOC.search.substring(1)),
|
||||
SECURE = isSecure(LOC.protocol),
|
||||
LOCAL = self.debug && !SETUP.remote,
|
||||
EVENT = broker,
|
||||
SDB = dataLocal,
|
||||
FILES = openFiles(new Index(SETUP.d ? SETUP.d[0] : 'kiri')),
|
||||
clone = Object.clone,
|
||||
MODE = MODES.FDM,
|
||||
viewMode = VIEWS.ARRANGE,
|
||||
autoSaveTimer = null,
|
||||
inits = parseInt(SDB.getItem('kiri-init') || stats.get('init') || 0) + 1;
|
||||
|
||||
// update version and init count
|
||||
SDB.setItem('kiri-init', inits);
|
||||
stats.set('init', inits);
|
||||
stats.set('kiri', version);
|
||||
|
||||
// allow widget to straddle client / worker FOR NOW
|
||||
self.kiri_catalog = FILES;
|
||||
|
||||
export const dialog = {
|
||||
show: showModal,
|
||||
hide: hideModal,
|
||||
update_process_list: updateProcessList
|
||||
};
|
||||
|
||||
export const help = {
|
||||
show: showHelp,
|
||||
file: showHelpFile
|
||||
};
|
||||
|
||||
export const event = {
|
||||
on(t,l) { return EVENT.on(t,l) },
|
||||
emit(t,m,o) { return EVENT.publish(t,m,o) },
|
||||
bind(t,m,o) { return EVENT.bind(t,m,o) },
|
||||
alerts(clr) { api.alerts.update(clr) },
|
||||
import: loadFile,
|
||||
settings: triggerSettingsEvent
|
||||
};
|
||||
|
||||
export const group = {
|
||||
merge: groupMerge,
|
||||
split: groupSplit,
|
||||
};
|
||||
|
||||
export const hide = {
|
||||
alert(rec, recs) { api.alerts.hide(...arguments) },
|
||||
import: noop,
|
||||
slider: hideSlider
|
||||
};
|
||||
|
||||
export const image = {
|
||||
dialog: loadImageDialog,
|
||||
convert: loadImageConvert
|
||||
};
|
||||
|
||||
export const modal = {
|
||||
show: showModal,
|
||||
hide: hideModal,
|
||||
visible: modalShowing
|
||||
};
|
||||
|
||||
export const mode = {
|
||||
get_id() { return MODE },
|
||||
get_lower: getModeLower,
|
||||
get: getMode,
|
||||
set: setMode,
|
||||
switch: switchMode,
|
||||
set_expert: noop,
|
||||
is_fdm() { return MODE === MODES.FDM },
|
||||
is_cam() { return MODE === MODES.CAM },
|
||||
is_sla() { return MODE === MODES.SLA },
|
||||
is_drag() { return MODE === MODES.DRAG },
|
||||
is_wedm() { return MODE === MODES.WEDM },
|
||||
is_wjet() { return MODE === MODES.WJET },
|
||||
is_laser() { return MODE === MODES.LASER },
|
||||
is_2d() { return false ||
|
||||
api.mode.is_drag() ||
|
||||
api.mode.is_wedm() ||
|
||||
api.mode.is_wjet() ||
|
||||
api.mode.is_laser()
|
||||
}
|
||||
};
|
||||
|
||||
export const probe = {
|
||||
live: "https://live.grid.space",
|
||||
grid: noop,
|
||||
local: noop
|
||||
};
|
||||
|
||||
export const process = {
|
||||
code: currentProcessCode,
|
||||
get: currentProcessName
|
||||
};
|
||||
|
||||
export const show = {
|
||||
alert() { return api.alerts.show(...arguments) },
|
||||
controls: setControlsVisible,
|
||||
devices: showDevices,
|
||||
import() { api.ui.import.style.display = '' },
|
||||
layer: setVisibleLayer,
|
||||
local: showLocal,
|
||||
progress: setProgress,
|
||||
slices: showSlices,
|
||||
tools: showTools
|
||||
};
|
||||
|
||||
export const space = {
|
||||
reload,
|
||||
auto_save,
|
||||
restore: restoreWorkspace,
|
||||
clear: clearWorkspace,
|
||||
save: saveWorkspace,
|
||||
set_focus: setFocus,
|
||||
update: SPACE.update,
|
||||
is_dark() { return settings.ctrl().dark }
|
||||
};
|
||||
|
||||
export const util = {
|
||||
isSecure,
|
||||
download: downloadBlob,
|
||||
ui2rec() { api.conf.update_from(...arguments) },
|
||||
rec2ui() { api.conf.update_fields(...arguments) },
|
||||
b64enc(obj) { return base64js.fromByteArray(new TextEncoder().encode(JSON.stringify(obj))) },
|
||||
b64dec(obj) { return JSON.parse(new TextDecoder().decode(base64js.toByteArray(obj))) }
|
||||
};
|
||||
|
||||
export const view = {
|
||||
get() { return viewMode },
|
||||
set() { setViewMode(...arguments) },
|
||||
set_arrange() { api.view.set(VIEWS.ARRANGE) },
|
||||
set_slice() { api.view.set(VIEWS.SLICE) },
|
||||
set_preview() { api.view.set(VIEWS.PREVIEW) },
|
||||
set_animate() { api.view.set(VIEWS.ANIMATE) },
|
||||
is_arrange() { return viewMode === VIEWS.ARRANGE },
|
||||
is_slice() { return viewMode === VIEWS.SLICE },
|
||||
is_preview() { return viewMode === VIEWS.PREVIEW },
|
||||
is_animate() { return viewMode === VIEWS.ANIMATE },
|
||||
update_stack_labels: updateStackLabelState,
|
||||
update_slider_max: updateSliderMax,
|
||||
update_slider: updateSlider,
|
||||
update_speeds: updateSpeeds,
|
||||
hide_slices: hideSlices,
|
||||
snapshot: null,
|
||||
edges: setEdges,
|
||||
unit_scale: unitScale,
|
||||
wireframe: setWireframe
|
||||
};
|
||||
|
||||
// add show() to catalog for API
|
||||
FILES.show = showCatalog;
|
||||
|
||||
// patch broker for api backward compatibility
|
||||
EVENT.on = (topic, listener) => {
|
||||
EVENT.subscribe(topic, listener);
|
||||
return EVENT;
|
||||
};
|
||||
|
||||
function updateStackLabelState() {
|
||||
const settings = api.conf.get();
|
||||
// match label checkboxes to preference
|
||||
for (let label of api.stacks.getLabels()) {
|
||||
let check = `${settings.mode}-${api.view.get()}-${label}`;
|
||||
api.stacks.setVisible(label, settings.labels[check] !== false);
|
||||
}
|
||||
}
|
||||
|
||||
function setFocus(sel, point) {
|
||||
if (point) {
|
||||
SPACE.platform.setCenter(point.x, point.z, point.y);
|
||||
SPACE.view.setFocus(new THREE.Vector3(point.x, point.y, point.z));
|
||||
return;
|
||||
}
|
||||
if (sel === undefined) {
|
||||
sel = api.widgets.all();
|
||||
} else if (!Array.isArray) {
|
||||
sel = [ sel ];
|
||||
} else if (sel.length === 0) {
|
||||
sel = api.widgets.all();
|
||||
}
|
||||
let pos = { x:0, y:0, z:0 };
|
||||
for (let widget of sel) {
|
||||
pos.x += widget.track.pos.x;
|
||||
pos.y += widget.track.pos.y;
|
||||
pos.z += widget.track.pos.z;
|
||||
}
|
||||
if (sel.length) {
|
||||
pos.x /= sel.length;
|
||||
pos.y /= sel.length;
|
||||
pos.z /= sel.length;
|
||||
}
|
||||
let cam_index = api.conf.get().process.camStockIndexed || false;
|
||||
let focus_z = cam_index ? 0 : platform.top_z() / 2;
|
||||
SPACE.platform.setCenter(pos.x, -pos.y, focus_z);
|
||||
SPACE.view.setFocus(new THREE.Vector3(pos.x, focus_z, -pos.y));
|
||||
}
|
||||
|
||||
function reload() {
|
||||
api.event.emit('reload');
|
||||
do_reload(100);
|
||||
}
|
||||
|
||||
function do_reload(time) {
|
||||
// allow time for async saves to complete and busy to to to zero
|
||||
setTimeout(() => {
|
||||
if (api.busy.val() === 0) {
|
||||
LOC.reload();
|
||||
} else {
|
||||
console.log(`reload deferred on busy=${api.busy.val()}`);
|
||||
do_reload(250);
|
||||
}
|
||||
}, time || 100);
|
||||
}
|
||||
|
||||
function auto_save() {
|
||||
if (!settings.ctrl().autoSave) {
|
||||
return;
|
||||
}
|
||||
clearTimeout(autoSaveTimer);
|
||||
autoSaveTimer = setTimeout(() => {
|
||||
api.space.save(true);
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
/** ******************************************************************
|
||||
* Utility Functions
|
||||
******************************************************************* */
|
||||
|
||||
function unitScale() {
|
||||
return api.mode.is_cam() && settings.ctrl().units === 'in' ? 25.4 : 1;
|
||||
}
|
||||
|
||||
function triggerSettingsEvent() {
|
||||
api.event.emit('settings', settings.get());
|
||||
}
|
||||
|
||||
function isSecure(proto) {
|
||||
return proto.toLowerCase().indexOf("https") === 0;
|
||||
}
|
||||
|
||||
function setProgress(value = 0, msg) {
|
||||
value = (value * 100).round(4);
|
||||
api.ui.progress.width = value+'%';
|
||||
if (self.debug) {
|
||||
// console.log(msg, value.round(2));
|
||||
api.ui.prostatus.style.display = 'flex';
|
||||
if (msg) {
|
||||
api.ui.prostatus.innerHTML = msg;
|
||||
} else {
|
||||
api.ui.prostatus.innerHTML = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bound(v,min,max) {
|
||||
return Math.max(min,Math.min(max,v));
|
||||
}
|
||||
|
||||
function updateSpeeds(maxSpeed, minSpeed) {
|
||||
const { ui } = api;
|
||||
ui.speeds.style.display =
|
||||
maxSpeed &&
|
||||
settings.mode !== 'SLA' &&
|
||||
settings.mode !== 'LASER' &&
|
||||
viewMode === VIEWS.PREVIEW &&
|
||||
ui.showSpeeds.checked ? 'block' : '';
|
||||
if (maxSpeed) {
|
||||
const colors = [];
|
||||
for (let i = 0; i <= maxSpeed; i += maxSpeed / 20) {
|
||||
colors.push(Math.round(Math.max(i, 1)));
|
||||
}
|
||||
api.client.colors(colors, maxSpeed, speedColors => {
|
||||
const list = [];
|
||||
Object.keys(speedColors).map(v => parseInt(v)).sort((a, b) => b - a).forEach(speed => {
|
||||
const color = speedColors[speed];
|
||||
const hex = color.toString(16).padStart(6, 0);
|
||||
const r = (color >> 16) & 0xff;
|
||||
const g = (color >> 8) & 0xff;
|
||||
const b = (color >> 0) & 0xff;
|
||||
const style = `background-color:#${hex}`;
|
||||
list.push(`<label style="${style}">${speed}</label>`);
|
||||
});
|
||||
ui.speedbar.innerHTML = list.join('');
|
||||
});
|
||||
api.event.emit('preview.speeds', {
|
||||
min: minSpeed,
|
||||
max: maxSpeed
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function updateSlider() {
|
||||
api.event.emit("slider.set", {
|
||||
start: (api.var.layer_lo / api.var.layer_max),
|
||||
end: (api.var.layer_hi / api.var.layer_max)
|
||||
});
|
||||
api.conf.update_fields_from_range();
|
||||
}
|
||||
|
||||
function setVisibleLayer(h, l) {
|
||||
h = h >= 0 ? h : api.var.layer_hi;
|
||||
l = l >= 0 ? l : api.var.layer_lo;
|
||||
api.var.layer_hi = bound(h, 0, api.var.layer_max);
|
||||
api.var.layer_lo = bound(l, 0, h);
|
||||
api.event.emit("slider.label");
|
||||
updateSlider();
|
||||
showSlices();
|
||||
}
|
||||
|
||||
function setWireframe(bool, color, opacity) {
|
||||
api.widgets.each(function(w) { w.setWireframe(bool, color, opacity) });
|
||||
SPACE.update();
|
||||
}
|
||||
|
||||
function setEdges(bool) {
|
||||
if (bool && bool.toggle) {
|
||||
api.local.toggle('model.edges');
|
||||
} else {
|
||||
api.local.set('model.edges', bool);
|
||||
}
|
||||
bool = api.local.getBoolean('model.edges');
|
||||
api.widgets.each(w => w.setEdges(bool));
|
||||
SPACE.update();
|
||||
}
|
||||
|
||||
function updateSliderMax(set) {
|
||||
let max = STACKS.getRange().tallest - 1;
|
||||
api.var.layer_max = api.ui.sliderMax.innerText = max;
|
||||
if (set || max < api.var.layer_hi) {
|
||||
api.var.layer_hi = api.var.layer_max;
|
||||
api.event.emit("slider.label");
|
||||
updateSlider();
|
||||
}
|
||||
}
|
||||
|
||||
function hideSlices() {
|
||||
STACKS.clear();
|
||||
api.widgets.opacity(COLOR.model_opacity);
|
||||
api.widgets.each(function(widget) {
|
||||
widget.setWireframe(false);
|
||||
});
|
||||
}
|
||||
|
||||
function setWidgetVisibility(bool) {
|
||||
api.widgets.each(w => {
|
||||
if (bool) {
|
||||
w.show();
|
||||
} else {
|
||||
w.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* hide or show slice-layers and their sub-elements
|
||||
*
|
||||
* @param {number} [layer]
|
||||
*/
|
||||
function showSlices(layer) {
|
||||
if (viewMode === VIEWS.ARRANGE) {
|
||||
return;
|
||||
}
|
||||
|
||||
showSlider();
|
||||
|
||||
if (typeof(layer) === 'string' || typeof(layer) === 'number') {
|
||||
layer = parseInt(layer);
|
||||
} else {
|
||||
layer = api.var.layer_hi;
|
||||
}
|
||||
|
||||
layer = bound(layer, 0, api.var.layer_max);
|
||||
if (layer < api.var.layer_lo) api.var.layer_lo = layer;
|
||||
api.var.layer_hi = layer;
|
||||
api.event.emit("slider.label");
|
||||
|
||||
updateSlider();
|
||||
STACKS.setRange(api.var.layer_lo, api.var.layer_hi);
|
||||
|
||||
SPACE.update();
|
||||
}
|
||||
|
||||
function showSlider() {
|
||||
api.ui.layers.style.display = 'flex';
|
||||
api.ui.slider.style.display = 'flex';
|
||||
}
|
||||
|
||||
function hideSlider() {
|
||||
api.ui.layers.style.display = 'none';
|
||||
api.ui.slider.style.display = 'none';
|
||||
api.ui.speeds.style.display = 'none';
|
||||
}
|
||||
|
||||
function loadImageDialog(image, name, force) {
|
||||
if (!force && image.byteLength > 2500000) {
|
||||
return api.uc.confirm("Large images may fail to import<br>Consider resizing under 1000 x 1000<br>Proceed with import?").then(ok => {
|
||||
if (ok) {
|
||||
loadImageDialog(image, name, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
const opt = {pre: [
|
||||
"<div class='f-col a-center'>",
|
||||
" <h3>Image Conversion</h3>",
|
||||
" <p class='t-just' style='width:300px;line-height:1.5em'>",
|
||||
" This will create a 3D model from a 2D PNG image. Photos must",
|
||||
" be blurred to be usable. Values from 0=off to 50=high are suggested.",
|
||||
" Higher values incur more processing time.",
|
||||
" </p>",
|
||||
" <div class='f-row t-right'><table>",
|
||||
" <tr><th>blur value</th><td><input id='png-blur' value='0' size='3'></td>",
|
||||
" <th> invert image</th><td><input id='png-inv' type='checkbox'></td></tr>",
|
||||
" <tr><th>base size</th><td><input id='png-base' value='0' size='3'></td>",
|
||||
" <th> invert alpha</th><td><input id='alpha-inv' type='checkbox'></td></tr>",
|
||||
" <tr><th>border size</th><td><input id='png-border' value='0' size='3'></td>",
|
||||
" <th></th><td></td></tr>",
|
||||
" </table></div>",
|
||||
"</div>"
|
||||
]};
|
||||
api.uc.confirm(undefined, {convert:true, cancel:false}, undefined, opt).then((ok) => {
|
||||
if (ok) {
|
||||
loadImage(image, {
|
||||
file: name,
|
||||
blur: parseInt($('png-blur').value) || 0,
|
||||
base: parseInt($('png-base').value) || 0,
|
||||
border: parseInt($('png-border').value) || 0,
|
||||
inv_image: $('png-inv').checked,
|
||||
inv_alpha: $('alpha-inv').checked
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadImage(image, opt = {}) {
|
||||
const info = Object.assign({settings: settings.get(), png:image}, opt);
|
||||
api.client.image2mesh(info, progress => {
|
||||
api.show.progress(progress, "converting");
|
||||
}, vertices => {
|
||||
api.show.progress(0);
|
||||
const widget = newWidget().loadVertices(vertices);
|
||||
widget.meta.file = opt.file;
|
||||
platform.add(widget);
|
||||
});
|
||||
}
|
||||
|
||||
/** ******************************************************************
|
||||
* Selection Functions
|
||||
******************************************************************* */
|
||||
|
||||
function groupMerge() {
|
||||
Widget.Groups.merge(selection.widgets(true));
|
||||
}
|
||||
|
||||
function groupSplit() {
|
||||
Widget.Groups.split(selection.widgets(false));
|
||||
}
|
||||
|
||||
/** ******************************************************************
|
||||
* Settings Functions
|
||||
******************************************************************* */
|
||||
|
||||
// convert any image type to png
|
||||
function loadImageConvert(res, name) {
|
||||
let url = URL.createObjectURL(new Blob([res]));
|
||||
|
||||
$('mod-any').innerHTML = `<img id="xsrc" src="${url}"><canvas id="xdst"></canvas>`;
|
||||
|
||||
let img = $('xsrc');
|
||||
let can = $('xdst');
|
||||
|
||||
img.onload = () => {
|
||||
can.width = img.width;
|
||||
can.height = img.height;
|
||||
let ctx = can.getContext('2d');
|
||||
ctx.drawImage(img, 0, 0);
|
||||
fetch(can.toDataURL()).then(r => r.arrayBuffer()).then(data => {
|
||||
loadImageDialog(data, name);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function loadFile(ev) {
|
||||
// use modern Filesystem api when available
|
||||
if (false && window.showOpenFilePicker) {
|
||||
window.showOpenFilePicker().then(files => {
|
||||
return Promise.all(files.map(fh => fh.getFile()))
|
||||
}).then(files => {
|
||||
if (files.length) {
|
||||
api.platform.load_files(files);
|
||||
}
|
||||
}).catch(e => { /* ignore cancel */ });
|
||||
return;
|
||||
}
|
||||
api.ui.load.click();
|
||||
}
|
||||
|
||||
function saveWorkspace(quiet) {
|
||||
api.conf.save();
|
||||
const newWidgets = [];
|
||||
const oldWidgets = js2o(SDB.getItem('ws-widgets'), []);
|
||||
api.widgets.each(function(widget) {
|
||||
if (widget.synth) return;
|
||||
newWidgets.push(widget.id);
|
||||
oldWidgets.remove(widget.id);
|
||||
widget.saveState();
|
||||
let ann = api.widgets.annotate(widget.id);
|
||||
ann.file = widget.meta.file;
|
||||
ann.url = widget.meta.url;
|
||||
});
|
||||
SDB.setItem('ws-widgets', o2js(newWidgets));
|
||||
oldWidgets.forEach(wid => {
|
||||
Widget.deleteFromState(wid);
|
||||
});
|
||||
// eliminate dangling saved widgets
|
||||
FILES.deleteFilter(key => newWidgets.indexOf(key.substring(8)) < 0, "ws-save-", "ws-savf");
|
||||
if (!quiet) {
|
||||
api.show.alert("workspace saved", 1);
|
||||
}
|
||||
}
|
||||
|
||||
function restoreWorkspace(ondone, skip_widget_load) {
|
||||
let newset = api.conf.restore(false),
|
||||
camera = newset.controller.view,
|
||||
toload = ls2o('ws-widgets',[]),
|
||||
loaded = 0,
|
||||
position = true;
|
||||
|
||||
api.conf.update_fields();
|
||||
platform.update_size();
|
||||
|
||||
SPACE.view.reset();
|
||||
if (camera) {
|
||||
SPACE.view.load(camera);
|
||||
} else {
|
||||
SPACE.view.home();
|
||||
}
|
||||
|
||||
if (skip_widget_load) {
|
||||
if (ondone) {
|
||||
ondone();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// remove any widgets from platform
|
||||
api.widgets.each(function(widget) {
|
||||
platform.delete(widget);
|
||||
});
|
||||
|
||||
// load any widget by name that was saved to the workspace
|
||||
toload.forEach(function(widgetid) {
|
||||
Widget.loadFromState(widgetid, function(widget) {
|
||||
if (widget) {
|
||||
platform.add(widget, 0, position, true);
|
||||
let ann = api.widgets.annotate(widgetid);
|
||||
widget.meta.file = ann.file;
|
||||
widget.meta.url = ann.url;
|
||||
}
|
||||
if (++loaded === toload.length) {
|
||||
platform.deselect();
|
||||
if (ondone) {
|
||||
ondone();
|
||||
setTimeout(() => {
|
||||
platform.update_bounds();
|
||||
SPACE.update();
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
}, position);
|
||||
});
|
||||
|
||||
return toload.length > 0;
|
||||
}
|
||||
|
||||
function clearWorkspace() {
|
||||
// free up worker cache/mem
|
||||
api.client.clear();
|
||||
platform.select_all();
|
||||
platform.delete(selection.meshes());
|
||||
}
|
||||
|
||||
function modalShowing() {
|
||||
return api.ui.modal.style.display === 'flex';
|
||||
}
|
||||
|
||||
function showModal(which) {
|
||||
let mod = api.ui.modal,
|
||||
style = mod.style,
|
||||
visible = modalShowing(),
|
||||
info = { pct: 0 };
|
||||
|
||||
// hide all modals befroe showing another
|
||||
Object.keys(api.ui.modals).forEach(name => {
|
||||
api.ui.modals[name].style.display = name === which ? 'flex' : '';
|
||||
});
|
||||
|
||||
function ondone() {
|
||||
api.event.emit('modal.show', which);
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
return ondone();
|
||||
}
|
||||
|
||||
style.height = '0';
|
||||
style.display = 'flex';
|
||||
|
||||
new TWEEN.Tween(info).
|
||||
easing(TWEEN.Easing.Quadratic.InOut).
|
||||
to({ pct: 100 }, 100).
|
||||
onUpdate(() => { style.height = `${info.pct}%` }).
|
||||
onComplete(ondone).
|
||||
start();
|
||||
}
|
||||
|
||||
function hideModal() {
|
||||
if (!modalShowing()) {
|
||||
return;
|
||||
}
|
||||
let mod = api.ui.modal, style = mod.style, info={pct:100};
|
||||
new TWEEN.Tween(info).
|
||||
easing(TWEEN.Easing.Quadratic.InOut).
|
||||
to({pct:0}, 100).
|
||||
onUpdate(() => { style.height = `${info.pct}%` }).
|
||||
onComplete(() => {
|
||||
style.display = '';
|
||||
api.event.emit('modal.hide');
|
||||
}).
|
||||
start();
|
||||
}
|
||||
|
||||
function showCatalog() {
|
||||
showModal("files");
|
||||
}
|
||||
|
||||
function editSettings(e) {
|
||||
let current = settings.get(),
|
||||
mode = getMode(),
|
||||
name = e.target.getAttribute("name"),
|
||||
load = current.sproc[mode][name],
|
||||
loadstr = JSON.stringify(load,null,4).split('\n');
|
||||
api.uc.prompt(`settings for "${name}"`, loadstr).then(edit => {
|
||||
if (edit) {
|
||||
try {
|
||||
current.sproc[mode][name] = JSON.parse(edit);
|
||||
if (name === settings.proc().processName) {
|
||||
api.conf.load(null, name);
|
||||
}
|
||||
api.conf.save();
|
||||
api.settings.sync.put();
|
||||
} catch (e) {
|
||||
console.log({ malformed_settings: e });
|
||||
api.uc.alert('malformed settings object');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function exportSettings(e) {
|
||||
let current = settings.get(),
|
||||
mode = getMode(),
|
||||
name = e.target.getAttribute("name"),
|
||||
data = api.util.b64enc({
|
||||
process: current.sproc[mode][name],
|
||||
version,
|
||||
moto: moto.id,
|
||||
time: Date.now(),
|
||||
mode,
|
||||
name
|
||||
});
|
||||
api.uc.prompt("Export Process Filename", name).then(name => {
|
||||
if (name) {
|
||||
api.util.download(data, `${name}.km`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteSettings(e) {
|
||||
let current = settings.get();
|
||||
let name = e.target.getAttribute("del");
|
||||
delete current.sproc[getMode()][name];
|
||||
api.settings.sync.put();
|
||||
updateProcessList();
|
||||
api.conf.save();
|
||||
triggerSettingsEvent();
|
||||
}
|
||||
|
||||
function updateProcessList() {
|
||||
let current = settings.get();
|
||||
let list = [], s = current, sp = s.sproc[getMode()] || {}, table = api.ui.settingsList;
|
||||
table.innerHTML = '';
|
||||
for (let k in sp) {
|
||||
if (sp.hasOwnProperty(k)) list.push(k);
|
||||
}
|
||||
list.filter(n => n !=='default').sort().forEach(function(sk) {
|
||||
let row = DOC.createElement('div'),
|
||||
load = DOC.createElement('button'),
|
||||
edit = DOC.createElement('button'),
|
||||
xprt = DOC.createElement('button'),
|
||||
del = DOC.createElement('button'),
|
||||
name = sk;
|
||||
|
||||
load.setAttribute('load', sk);
|
||||
load.onclick = (ev) => {
|
||||
api.conf.load(undefined, sk);
|
||||
updateProcessList();
|
||||
hideModal();
|
||||
}
|
||||
load.appendChild(DOC.createTextNode(sk));
|
||||
if (sk == settings.proc().processName) {
|
||||
load.setAttribute('class', 'selected')
|
||||
}
|
||||
api.ui.settingsName.value = settings.proc().processName;
|
||||
|
||||
del.setAttribute('del', sk);
|
||||
del.setAttribute('title', "remove '"+sk+"'");
|
||||
del.innerHTML = '<i class="far fa-trash-alt"></i>';
|
||||
del.onclick = deleteSettings;
|
||||
|
||||
edit.setAttribute('name', sk);
|
||||
edit.setAttribute('title', 'edit');
|
||||
edit.innerHTML = '<i class="far fa-edit"></i>';
|
||||
edit.onclick = editSettings;
|
||||
|
||||
xprt.setAttribute('name', sk);
|
||||
xprt.setAttribute('title', 'export');
|
||||
xprt.innerHTML = '<i class="fas fa-download"></i>';
|
||||
xprt.onclick = exportSettings;
|
||||
|
||||
row.setAttribute("class", "flow-row");
|
||||
row.appendChild(edit);
|
||||
row.appendChild(load);
|
||||
row.appendChild(xprt);
|
||||
row.appendChild(del);
|
||||
table.appendChild(row);
|
||||
});
|
||||
}
|
||||
|
||||
function showHelp() {
|
||||
showHelpFile(`local`,() => {});
|
||||
}
|
||||
|
||||
function showHelpFile(local,then) {
|
||||
if (!local) {
|
||||
WIN.open("//docs.grid.space/", "_help");
|
||||
return;
|
||||
}
|
||||
const LANG = api.language.current;
|
||||
$('kiri-version').innerHTML = `${LANG.version} ${version}`;
|
||||
showModal('help');
|
||||
api.event.emit('help.show', local);
|
||||
}
|
||||
|
||||
function showLocal() {
|
||||
showModal('local');
|
||||
api.probe.local((err,data) => {
|
||||
let devc = 0;
|
||||
let bind = [];
|
||||
let html = ['<table>'];
|
||||
html.push(`<thead><tr><th>device</th><th>type</th><th>status</th><th></th></tr></thead>`);
|
||||
html.push(`<tbody>`);
|
||||
let recs = [];
|
||||
for (let k in data) {
|
||||
recs.push(data[k].stat);
|
||||
}
|
||||
recs.sort((a,b) => {
|
||||
return a.device.name < b.device.name ? -1 : 1;
|
||||
});
|
||||
for (let r of recs) {
|
||||
bind.push({uuid: r.device.uuid, host: r.device.addr[0], port: r.device.port});
|
||||
html.push(`<tr>`);
|
||||
html.push(`<td>${r.device.name}</td>`);
|
||||
html.push(`<td>${r.device.mode}</td>`);
|
||||
html.push(`<td>${r.state}</td>`);
|
||||
html.push(`<td><button id="${r.device.uuid}">admin</button></td>`);
|
||||
html.push(`</tr>`);
|
||||
devc++;
|
||||
}
|
||||
html.push(`</tbody>`);
|
||||
html.push(`</table>`);
|
||||
if (devc) {
|
||||
$('mod-local').innerHTML = html.join('');
|
||||
} else {
|
||||
$('mod-local').innerHTML = `<br><b>no local devices</b>`;
|
||||
}
|
||||
bind.forEach(rec => {
|
||||
$(rec.uuid).onclick = () => {
|
||||
window.open(`http://${rec.host}:${rec.port||4080}/`);
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setViewMode(mode) {
|
||||
const isCAM = settings.mode() === 'CAM';
|
||||
viewMode = mode;
|
||||
platform.deselect();
|
||||
selection.update_info();
|
||||
// clear any bounds forced by, for example, WireEDM previews
|
||||
api.platform.set_bounds();
|
||||
// disable clear in non-arrange modes
|
||||
['view-arrange','act-slice','act-preview','act-animate'].forEach(el => {
|
||||
$(el).classList.remove('selected')
|
||||
});
|
||||
$('render-tools').classList.add('hide');
|
||||
switch (mode) {
|
||||
case VIEWS.ARRANGE:
|
||||
$('view-arrange').classList.add('selected');
|
||||
$('render-tools').classList.remove('hide');
|
||||
api.function.clear_progress();
|
||||
api.client.clear();
|
||||
STACKS.clear();
|
||||
hideSlider();
|
||||
updateSpeeds();
|
||||
setVisibleLayer();
|
||||
setWidgetVisibility(true);
|
||||
api.widgets.opacity(1);
|
||||
api.view.edges(api.local.getBoolean('model.edges'));
|
||||
break;
|
||||
case VIEWS.SLICE:
|
||||
$('act-slice').classList.add('selected');
|
||||
updateSpeeds();
|
||||
updateSliderMax();
|
||||
setWidgetVisibility(true);
|
||||
!isCAM && api.view.edges(false);
|
||||
break;
|
||||
case VIEWS.PREVIEW:
|
||||
$('act-preview').classList.add('selected');
|
||||
setWidgetVisibility(true);
|
||||
!isCAM && api.view.edges(false);
|
||||
break;
|
||||
case VIEWS.ANIMATE:
|
||||
$('act-animate').classList.add('selected');
|
||||
!isCAM && api.view.edges(false);
|
||||
break;
|
||||
default:
|
||||
console.log("invalid view mode: "+mode);
|
||||
return;
|
||||
}
|
||||
api.event.emit('view.set', mode);
|
||||
DOC.activeElement.blur();
|
||||
}
|
||||
|
||||
function getMode() {
|
||||
return settings.mode();
|
||||
}
|
||||
|
||||
function getModeLower() {
|
||||
return getMode().toLowerCase();
|
||||
}
|
||||
|
||||
function switchMode(mode) {
|
||||
setMode(mode, null, platform.update_size);
|
||||
}
|
||||
|
||||
function setMode(mode, lock, then) {
|
||||
if (!MODES[mode]) {
|
||||
console.log("invalid mode: "+mode);
|
||||
mode = 'FDM';
|
||||
}
|
||||
const current = settings.get();
|
||||
// change mode constants
|
||||
current.mode = mode;
|
||||
MODE = MODES[mode];
|
||||
// gcode edit area for any non-SLA mode
|
||||
api.uc.setVisible($('gcode-edit'), mode !== 'SLA');
|
||||
// highlight selected mode menu item
|
||||
["FDM","CAM","SLA","LASER","DRAG","WJET","WEDM"].forEach(sm => {
|
||||
const cl = $(`mode-${sm.toLowerCase()}`).classList;
|
||||
if (sm === mode) {
|
||||
cl.add('selected');
|
||||
} else {
|
||||
cl.remove('selected');
|
||||
}
|
||||
});
|
||||
// restore cached device profile for this mode
|
||||
if (current.cdev[mode]) {
|
||||
current.device = clone(current.cdev[mode]);
|
||||
api.event.emit('device.select', api.device.get());
|
||||
}
|
||||
// hide/show
|
||||
api.uc.setVisible($('set-tools'), mode === 'CAM');
|
||||
// updates right-hand menu by enabling/disabling fields
|
||||
setViewMode(VIEWS.ARRANGE);
|
||||
api.uc.setMode(MODE);
|
||||
// sanitize and persist settings
|
||||
api.conf.load();
|
||||
api.conf.save();
|
||||
// other housekeeping
|
||||
triggerSettingsEvent();
|
||||
platform.update_selected();
|
||||
selection.update_bounds(api.widgets.all());
|
||||
api.conf.update_fields();
|
||||
// because device dialog, if showing, needs to be updated
|
||||
if (modalShowing()) {
|
||||
api.show.devices();
|
||||
}
|
||||
api.space.restore(null, true);
|
||||
api.event.emit("mode.set", mode);
|
||||
if (then) {
|
||||
then();
|
||||
}
|
||||
}
|
||||
|
||||
function currentProcessName() {
|
||||
return settings.get().cproc[getMode()];
|
||||
}
|
||||
|
||||
function currentProcessCode() {
|
||||
return settings.get().sproc[getMode()][currentProcessName()];
|
||||
}
|
||||
|
||||
function setControlsVisible(show) {
|
||||
// TODO fix
|
||||
// $('mid-left').style.display = show ? 'flex' : 'none';
|
||||
// $('mid-right').style.display = show ? 'flex' : 'none';
|
||||
}
|
||||
|
||||
function downloadBlob(data, filename) {
|
||||
let url = WIN.URL.createObjectURL(new Blob([data], {type: "octet/stream"}));
|
||||
$('mod-any').innerHTML = `<a id="_dexport_" href="${url}" download="${filename}">x</a>`;
|
||||
$('_dexport_').click();
|
||||
}
|
||||
|
||||
// prevent safari from exiting full screen mode
|
||||
DOC.onkeydown = function (evt) { if (evt.keyCode == 27) evt.preventDefault() }
|
||||
|
||||
export { FILES as catalog, LOCAL, SETUP, SECURE };
|
||||
|
|
@ -1,17 +1,6 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* adapted from
|
||||
* http://codeincomplete.com/posts/2011/5/7/bin_packing/
|
||||
*/
|
||||
|
||||
gapp.register("kiri.pack", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
|
||||
class Packer {
|
||||
export class Packer {
|
||||
constructor(w, h, spacing, opt = {}) {
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
|
|
@ -150,7 +139,3 @@ class Packer {
|
|||
return node;
|
||||
}
|
||||
}
|
||||
|
||||
kiri.Pack = Packer;
|
||||
|
||||
});
|
||||
|
|
@ -1,26 +1,16 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { $, h } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { ajax, js2o } from './utils.js';
|
||||
import { base } from '../../geo/base.js';
|
||||
import { load } from '../../load/file.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
import { Widget, newWidget } from './widget.js';
|
||||
import { Packer } from './pack.js';
|
||||
|
||||
// dep: moto.space
|
||||
// dep: moto.webui
|
||||
// dep: kiri.api
|
||||
// dep: kiri.consts
|
||||
// dep: kiri.utils
|
||||
// dep: kiri.widget
|
||||
// dep: load.stl
|
||||
// dep: load.obj
|
||||
// dep: load.3mf
|
||||
// dep: load.gbr
|
||||
// use: kiri-mode.cam.tool
|
||||
gapp.register("kiri.platform", [], (root, exports) => {
|
||||
|
||||
const { base, kiri, moto, load } = root;
|
||||
const { api, consts, driver, utils, newWidget, Widget } = kiri;
|
||||
const { ajax, js2o } = utils;
|
||||
const { space } = moto;
|
||||
const { util } = base;
|
||||
const { COLOR, MODES } = consts;
|
||||
import { COLOR, MODES } from './consts.js';
|
||||
import { THREE } from '../../ext/three.js';
|
||||
|
||||
const V0 = new THREE.Vector3(0,0,0);
|
||||
|
||||
|
|
@ -525,7 +515,7 @@ function platformDelete(widget, defer) {
|
|||
api.event.emit('widget.delete', widget);
|
||||
return;
|
||||
}
|
||||
kiri.client.clear(widget);
|
||||
api.client.clear(widget);
|
||||
api.widgets.remove(widget);
|
||||
api.selection.remove(widget);
|
||||
Widget.Groups.remove(widget);
|
||||
|
|
@ -719,12 +709,12 @@ function platformLayout() {
|
|||
mp = [sz.x, sz.y],
|
||||
ms = [mp[0] / 2, mp[1] / 2],
|
||||
c = Widget.Groups.blocks().sort(),
|
||||
p = new kiri.Pack(ms[0], ms[1], gap).fit(c);
|
||||
p = new Packer(ms[0], ms[1], gap).fit(c);
|
||||
|
||||
while (!p.packed) {
|
||||
ms[0] *= 1.1;
|
||||
ms[1] *= 1.1;
|
||||
p = new kiri.Pack(ms[0], ms[1], gap).fit(c);
|
||||
p = new Packer(ms[0], ms[1], gap).fit(c);
|
||||
}
|
||||
|
||||
for (i = 0; i < c.length; i++) {
|
||||
|
|
@ -809,7 +799,7 @@ function platformLoadFiles(files, group) {
|
|||
if (api.conf.get().controller.devel) {
|
||||
api.event.emit('cam.parse.gerber', { data: text });
|
||||
} else {
|
||||
kiri.client.gerber2mesh(text, progress => {
|
||||
api.client.gerber2mesh(text, progress => {
|
||||
api.show.progress(progress, "converting");
|
||||
}, vertices => {
|
||||
api.show.progress(0);
|
||||
|
|
@ -847,7 +837,7 @@ function platformLoadFiles(files, group) {
|
|||
api.function.parse(data.textDecode('utf-8'), 'gcode');
|
||||
load_dec();
|
||||
} else if (issvg) {
|
||||
loadSVGDialog(opt => {
|
||||
loadSVGDialog(opt => {
|
||||
group = group || [];
|
||||
let svg = load.SVG.parse(data.textDecode('utf-8'), opt);
|
||||
let ind = 0;
|
||||
|
|
@ -921,7 +911,7 @@ function fitDeviceToWidgets() {
|
|||
}
|
||||
|
||||
// extend API (api.platform)
|
||||
const platform = Object.assign(api.platform, {
|
||||
export const platform = {
|
||||
fit: fitDeviceToWidgets,
|
||||
add: platformAdd,
|
||||
changed: platformChanged,
|
||||
|
|
@ -950,6 +940,4 @@ const platform = Object.assign(api.platform, {
|
|||
show_volume: space.platform.showVolume,
|
||||
top_z() { return topZ },
|
||||
clear() { api.space.clear(); api.space.save(true) }
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
|
@ -1,19 +1,13 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { arcToPath } from '../../geo/paths.js';
|
||||
import { consts } from './consts.js';
|
||||
import { newPoint } from '../../geo/point.js';
|
||||
import { util } from '../../geo/base.js';
|
||||
|
||||
// dep: geo.base
|
||||
// dep: geo.point
|
||||
// dep: geo.polygon
|
||||
// dep: geo.paths
|
||||
// dep: kiri.consts
|
||||
gapp.register("kiri.print", [], (root, evets) => {
|
||||
|
||||
const { base, kiri } = self;
|
||||
const { paths, util, newPoint } = base;
|
||||
const { arcToPath } = paths;
|
||||
const { numOrDefault } = util;
|
||||
const { beltfact } = kiri.consts;
|
||||
const { beltfact } = consts;
|
||||
|
||||
const XAXIS = new THREE.Vector3(1,0,0);
|
||||
const DEG2RAD = Math.PI / 180;
|
||||
|
||||
|
|
@ -463,10 +457,10 @@ class Print {
|
|||
|
||||
let arcPoints = arcToPath( prevPoint, point, 64,{ clockwise:g2,center}) ?? []
|
||||
let emit = g2 ? 2 : 3;
|
||||
|
||||
|
||||
// console.log("clone point",structuredClone({point,prevPoint,center,arcPoints,emit}));
|
||||
// console.log("pointer point",{point,prevPoint,center,arcPoints,emit});
|
||||
|
||||
|
||||
outputPoint(point,prevPoint,emit,{center,arcPoints});
|
||||
// scope.addOutput(seq, point, emit, pos.F, tool,{center,arcPoints});
|
||||
}
|
||||
|
|
@ -619,10 +613,15 @@ class Print {
|
|||
scope.belt = belt;
|
||||
|
||||
if (scope.debugE) {
|
||||
console.log({ bounds, print_time: time.round(2) });
|
||||
console.log({
|
||||
bounds,
|
||||
minf,
|
||||
maxf,
|
||||
print_time: time.round(2),
|
||||
output: scope.output
|
||||
});
|
||||
}
|
||||
|
||||
console.log(scope.output)
|
||||
done({ output: scope.output });
|
||||
}
|
||||
}
|
||||
|
|
@ -646,8 +645,8 @@ class Output {
|
|||
|
||||
const { type, center, arcPoints } = (options ?? {});
|
||||
//speed, tool, type, center, arcPoints
|
||||
this.point = point; // point to emit
|
||||
this.emit = emit; // emit (feed for printers, power for lasers, cut for cam)
|
||||
this.point = point;
|
||||
this.emit = Number(emit); //convert bools into 0/1
|
||||
this.speed = speed;
|
||||
this.tool = tool;
|
||||
this.type = type;
|
||||
|
|
@ -680,9 +679,7 @@ function newPrint(settings, widgets, id) {
|
|||
return new Print(settings, widgets, id);
|
||||
};
|
||||
|
||||
gapp.overlay(kiri, {
|
||||
export {
|
||||
Print,
|
||||
newPrint
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
|
@ -1,35 +1,24 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { Layers } from './layers.js';
|
||||
import { newPoint } from '../../geo/point.js';
|
||||
import { newPolygon } from '../../geo/polygon.js';
|
||||
import { newSlopeFromAngle } from '../../geo/slope.js';
|
||||
|
||||
/*
|
||||
* uses `layers.js` to convert paths (usually preview) into primordial geometries.
|
||||
* the input is based on an array (layers) of arrays containing `Output` objects
|
||||
*/
|
||||
|
||||
// dep: geo.base
|
||||
// dep: geo.point
|
||||
// dep: geo.polygon
|
||||
gapp.register("kiri.render", [], (root, exports) => {
|
||||
|
||||
const { base, kiri } = root;
|
||||
const { config, util, newPolygon } = base;
|
||||
const hsV = 0.9;
|
||||
const XAXIS = new THREE.Vector3(1,0,0);
|
||||
const DEG2RAD = Math.PI / 180;
|
||||
|
||||
exports({
|
||||
path,
|
||||
is_dark,
|
||||
rate_to_color
|
||||
});
|
||||
function worker() {
|
||||
return self.kiri_worker.current;
|
||||
}
|
||||
|
||||
function is_cam() {
|
||||
return root.worker.print.settings.mode === 'CAM';
|
||||
return worker().print.settings.mode === 'CAM';
|
||||
}
|
||||
|
||||
function is_dark() {
|
||||
return root.worker.print.settings.controller.dark ? true : false;
|
||||
return worker().print.settings.controller.dark ? true : false;
|
||||
};
|
||||
|
||||
function rate_to_color(rate, max) {
|
||||
|
|
@ -44,17 +33,17 @@ function rate_to_color(rate, max) {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Generate visual representation of a gcode program.
|
||||
* @param {Output[][]} levels - Array of arrays containing `Output` objects.
|
||||
* @param {function} update - Called with a completion percentage and the rendered layer.
|
||||
* @param {{tools: Object, flat: Boolean, thin: Boolean, speed: Boolean, lineWidth: Number, toolMode: Boolean, z: Number, action: String, other: String}} [opts] - Optional parameters.
|
||||
* @returns {Promise.kiri.Layers[]} - Array of layers.
|
||||
*/
|
||||
/**
|
||||
* Generate visual representation of a gcode program.
|
||||
* @param {Output[][]} levels - Array of arrays containing `Output` objects.
|
||||
* @param {function} update - Called with a completion percentage and the rendered layer.
|
||||
* @param {{tools: Object, flat: Boolean, thin: Boolean, speed: Boolean, lineWidth: Number, toolMode: Boolean, z: Number, action: String, other: String}} [opts] - Optional parameters.
|
||||
* @returns {Promise.kiri.Layers[]} - Array of layers.
|
||||
*/
|
||||
async function path(levels, update, opts = {}) {
|
||||
levels = levels.filter(level => level.length);
|
||||
if (levels.length === 0) {
|
||||
self.worker.print.maxSpeed = 0;
|
||||
worker().print.maxSpeed = 0;
|
||||
return [];
|
||||
}
|
||||
|
||||
|
|
@ -107,10 +96,11 @@ async function path(levels, update, opts = {}) {
|
|||
// }).reduce((a, v) => Math.max(a, v)) + 1;
|
||||
|
||||
// for reporting
|
||||
self.worker.print.minSpeed = minspd;
|
||||
self.worker.print.maxSpeed = maxspd;
|
||||
self.worker.print.thinColor = thin;
|
||||
self.worker.print.flatColor = flat;
|
||||
let print = worker().print;
|
||||
print.minSpeed = minspd;
|
||||
print.maxSpeed = maxspd;
|
||||
print.thinColor = thin;
|
||||
print.flatColor = flat;
|
||||
|
||||
let lastTool = null;
|
||||
let lastEnd = null;
|
||||
|
|
@ -138,7 +128,8 @@ async function path(levels, update, opts = {}) {
|
|||
const engages = [];
|
||||
const lasers = [];
|
||||
const sparks = [];
|
||||
const output = new kiri.Layers();
|
||||
const output = new Layers();
|
||||
|
||||
layers.push(output);
|
||||
|
||||
const pushPrint = (toolid, poly) => {
|
||||
|
|
@ -172,8 +163,8 @@ async function path(levels, update, opts = {}) {
|
|||
let p2 = new THREE.Vector3(point.x, point.y, point.z)
|
||||
.applyAxisAngle(XAXIS, point.a * DEG2RAD);
|
||||
// reconstruct point point for display without A axis
|
||||
outPoint = base.newPoint(p2.x, p2.y, p2.z);
|
||||
// let sp = base.newPoint(outPoint.x * 1.1, outPoint.y * 1.1, outPoint.z * 1.1);
|
||||
outPoint = newPoint(p2.x, p2.y, p2.z);
|
||||
// let sp = newPoint(outPoint.x * 1.1, outPoint.y * 1.1, outPoint.z * 1.1);
|
||||
// sparks.push(outPoint, sp);
|
||||
}
|
||||
if (out.tool !== lastTool) {
|
||||
|
|
@ -321,8 +312,8 @@ async function path(levels, update, opts = {}) {
|
|||
.addAreas(heads.map(points => {
|
||||
const {p1, p2} = points;
|
||||
const slope = p2.slopeTo(p1);
|
||||
const s1 = base.newSlopeFromAngle(slope.angle + 20);
|
||||
const s2 = base.newSlopeFromAngle(slope.angle - 20);
|
||||
const s1 = newSlopeFromAngle(slope.angle + 20);
|
||||
const s2 = newSlopeFromAngle(slope.angle - 20);
|
||||
const p3 = points.p2.projectOnSlope(s1, arrowSize);
|
||||
const p4 = points.p2.projectOnSlope(s2, arrowSize);
|
||||
return newPolygon().addPoints([p2,p3,p4]).setZ(p2.z + 0.01);
|
||||
|
|
@ -543,4 +534,14 @@ function color4(rgb, inc, seg) {
|
|||
}
|
||||
}
|
||||
|
||||
});
|
||||
export const render = {
|
||||
path,
|
||||
is_dark,
|
||||
rate_to_color
|
||||
};
|
||||
|
||||
export {
|
||||
path,
|
||||
is_dark,
|
||||
rate_to_color
|
||||
};
|
||||
|
|
@ -1,16 +1,9 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: moto.space
|
||||
// dep: kiri.api
|
||||
// dep: kiri.consts
|
||||
// dep: kiri.utils
|
||||
gapp.register("kiri.selection", (root, exports) => {
|
||||
|
||||
const { kiri, moto, noop } = self;
|
||||
const { api, consts, utils } = kiri;
|
||||
const { space } = moto;
|
||||
import { api } from './api.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
import { THREE } from '../../ext/three.js';
|
||||
import { tool as MeshTool } from '../../mesh/tool.js';
|
||||
|
||||
const selectedMeshes = [];
|
||||
|
||||
|
|
@ -214,6 +207,39 @@ function merge() {
|
|||
api.platform.select(w);
|
||||
}
|
||||
|
||||
/**
|
||||
* Isolates the bodies within the selected widgets. If no widgets are selected,
|
||||
* it processes all available widgets. For each widget, it checks if a tool is
|
||||
* associated; if not, it creates a new MeshTool and indexes the vertices.
|
||||
* The function identifies isolated bodies within each widget. If a widget has
|
||||
* a single body, it remains selected. Otherwise, it creates new widgets for
|
||||
* each isolated body and selects them while deleting the original widget.
|
||||
*/
|
||||
function isolateBodies(){
|
||||
let sel = widgets();
|
||||
console.log('isolate', sel);
|
||||
if (sel.length === 0) {
|
||||
sel = api.widgets.all();
|
||||
}
|
||||
for(let widget of sel){
|
||||
if (!widget.tool) {
|
||||
let tool = widget.tool = new MeshTool();
|
||||
tool.index(widget.getGeoVertices({ unroll: true, translate:true }));
|
||||
}
|
||||
let bodies = widget.tool.isolateBodies()
|
||||
if(bodies.length ==1){
|
||||
api.platform.select(widget);
|
||||
}else{
|
||||
console.log(bodies,Array.from(bodies.entries()))
|
||||
for(let [i,verts] of bodies.entries()){
|
||||
let w = api.platform.load_verts([], verts, `isolate ${i} of ${ widget.anno.file}`);
|
||||
api.platform.select(w)
|
||||
}
|
||||
api.platform.delete(widget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function exportWidgets(format = "stl") {
|
||||
let sel = widgets();
|
||||
if (sel.length === 0) {
|
||||
|
|
@ -296,9 +322,10 @@ function setDisabled(bool) {
|
|||
}
|
||||
|
||||
// extend API (api.selection)
|
||||
const selection = Object.assign(api.selection, {
|
||||
export const selection = {
|
||||
move,
|
||||
merge,
|
||||
isolateBodies,
|
||||
scale,
|
||||
rotate,
|
||||
mirror,
|
||||
|
|
@ -320,6 +347,4 @@ const selection = Object.assign(api.selection, {
|
|||
disable() { setDisabled(true) },
|
||||
opacity() { api.widgets.opacity(...arguments) },
|
||||
meshes() { return selectedMeshes.slice() },
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
|
@ -1,23 +1,20 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
import { $, h } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { conf } from './conf.js';
|
||||
import { codec } from './codec.js';
|
||||
import { consts } from './consts.js';
|
||||
import { space } from '../../moto/space.js';
|
||||
import { local } from '../../data/local.js';
|
||||
import { utils } from './utils.js';
|
||||
import { version } from '../../moto/license.js';
|
||||
import { JSZip } from '../../ext/jszip-esm.js';
|
||||
|
||||
// dep: kiri.api
|
||||
// dep: kiri.conf
|
||||
// dep: kiri.utils
|
||||
// dep: moto.space
|
||||
// dep: data.local
|
||||
// use: kiri.widgets
|
||||
// use: ext.base64
|
||||
gapp.register("kiri.settings", (root, exports) => {
|
||||
|
||||
const { data, kiri, moto, noop } = self;
|
||||
const { api, conf, consts, utils } = kiri;
|
||||
const { space } = moto;
|
||||
const { local } = data;
|
||||
const { clone } = Object;
|
||||
const { areEqual, ls2o, js2o } = utils;
|
||||
const { COLOR } = consts;
|
||||
const { clone } = Object;
|
||||
|
||||
const localFilterKey ='kiri-gcode-filters';
|
||||
const localFilters = js2o(local.getItem(localFilterKey)) || [];
|
||||
|
||||
|
|
@ -225,7 +222,7 @@ function updateSettingsFromFields(setrec, uirec = api.ui, changes) {
|
|||
}
|
||||
|
||||
// given a settings region, update values of matching bound UI fields
|
||||
function updateFieldsFromSettings(setrec, uirec = api.ui, trace) {
|
||||
function updateFieldsFromSettings(setrec, uirec = api.ui, opt = {}) {
|
||||
if (!setrec) {
|
||||
updateFieldsFromSettings(settings.device);
|
||||
updateFieldsFromSettings(settings.process);
|
||||
|
|
@ -233,6 +230,9 @@ function updateFieldsFromSettings(setrec, uirec = api.ui, trace) {
|
|||
updateExtruderFields(settings.device);
|
||||
return;
|
||||
}
|
||||
if (opt.trace) {
|
||||
console.log({ setrec, uirec });
|
||||
}
|
||||
for (let key in setrec) {
|
||||
if (!setrec.hasOwnProperty(key)) {
|
||||
continue;
|
||||
|
|
@ -242,6 +242,9 @@ function updateFieldsFromSettings(setrec, uirec = api.ui, trace) {
|
|||
continue;
|
||||
}
|
||||
let uie = uirec[key], typ = uie ? uie.type : null;
|
||||
if (opt.trace) {
|
||||
console.log({ key, uie, typ, val });
|
||||
}
|
||||
if (typ === 'text') {
|
||||
if (uie.setv) {
|
||||
uie.setv(val);
|
||||
|
|
@ -275,6 +278,8 @@ function updateFieldsFromSettings(setrec, uirec = api.ui, trace) {
|
|||
} else {
|
||||
uie.value = '';
|
||||
}
|
||||
} else if (opt.trace) {
|
||||
console.log('skipped', { key, val, typ });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -506,7 +511,7 @@ function settingsExport(opts = {}) {
|
|||
const widgets = api.widgets.all();
|
||||
const note = opts.node || undefined;
|
||||
const shot = opts.work || opts.screen ? space.screenshot() : undefined;
|
||||
const work = opts.work ? kiri.codec.encode(widgets,{_json_:true}) : undefined;
|
||||
const work = opts.work ? codec.encode(widgets,{_json_:true}) : undefined;
|
||||
const view = opts.work ? space.view.save() : undefined;
|
||||
const setn = Object.clone(settings);
|
||||
// stuff in legacy annotations for re-import
|
||||
|
|
@ -515,7 +520,7 @@ function settingsExport(opts = {}) {
|
|||
}
|
||||
const xprt = {
|
||||
settings: setn,
|
||||
version: kiri.version,
|
||||
version: version,
|
||||
screen: shot,
|
||||
space: space.info,
|
||||
note: note,
|
||||
|
|
@ -600,7 +605,7 @@ function settingsImport(data, ask) {
|
|||
work.type = 100;
|
||||
}
|
||||
}
|
||||
kiri.codec.decode(data.work).forEach(widget => {
|
||||
codec.decode(data.work).forEach(widget => {
|
||||
api.platform.add(widget, 0, true, true);
|
||||
});
|
||||
if (data.view) {
|
||||
|
|
@ -655,7 +660,7 @@ function settingsImportUrl(url, ask) {
|
|||
|
||||
function settingsImportZip(data, ask) {
|
||||
let alert = api.show.alert("Importing Workspace");
|
||||
JSZip.loadAsync(data).then(zip => {
|
||||
new JSZip().loadAsync(data).then(zip => {
|
||||
for (let [key,value] of Object.entries(zip.files)) {
|
||||
if (key === "workspace.json") {
|
||||
value.async("string").then(json => {
|
||||
|
|
@ -760,9 +765,14 @@ function setEnableWASM(bool) {
|
|||
api.event.emit("set.assembly", bool);
|
||||
}
|
||||
|
||||
// extend API (api.conf)
|
||||
Object.assign(api.conf, {
|
||||
dbo: () => { return ls2o('ws-settings') },
|
||||
// merged api for backward compatibility
|
||||
const apiSet = {
|
||||
dbo() { return ls2o('ws-settings') },
|
||||
dev() { return settings.device },
|
||||
proc() { return settings.process },
|
||||
ctrl() { return settings.controller },
|
||||
mode() { return settings.mode },
|
||||
prof() { return settings.sproc[settings.mode] },
|
||||
get: getSettings,
|
||||
put: putSettings,
|
||||
load: loadSettings,
|
||||
|
|
@ -777,25 +787,26 @@ Object.assign(api.conf, {
|
|||
restore: restoreSettings,
|
||||
export: settingsExport,
|
||||
import: settingsImport,
|
||||
});
|
||||
|
||||
// extend API (api.settings)
|
||||
Object.assign(api.settings, {
|
||||
get: getSettings,
|
||||
import: settingsImport,
|
||||
import_zip: settingsImportZip,
|
||||
import_url: settingsImportUrl,
|
||||
import_prusa: settingsPrusaConvert,
|
||||
dev() { return settings.device },
|
||||
proc() { return settings.process },
|
||||
ctrl() { return settings.controller },
|
||||
mode() { return settings.mode },
|
||||
prof() { return settings.sproc[settings.mode] },
|
||||
sync: {
|
||||
async get() {},
|
||||
async put() {},
|
||||
status: false
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
// for backward compatibility
|
||||
apiSet.conf = apiSet;
|
||||
apiSet.set = apiSet;
|
||||
apiSet.settings = apiSet;
|
||||
|
||||
export default apiSet;
|
||||
|
||||
// for backward compatibility
|
||||
export {
|
||||
apiSet as conf,
|
||||
apiSet as set,
|
||||
apiSet as settings
|
||||
};
|
||||
|
|
@ -1,14 +1,8 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: geo.base
|
||||
// dep: geo.polygons
|
||||
gapp.register("kiri.slice", [], (root, exports) => {
|
||||
|
||||
const { base, kiri } = root;
|
||||
|
||||
const POLY = base.polygons;
|
||||
import { Layers } from './layers.js';
|
||||
import { newPoint } from '../../geo/point.js';
|
||||
import { polygons as POLY } from '../../geo/polygons.js';
|
||||
|
||||
let tracker;
|
||||
|
||||
|
|
@ -41,7 +35,7 @@ class Slice {
|
|||
*/
|
||||
output() {
|
||||
if (this.layers) return this.layers;
|
||||
let layers = this.layers = new kiri.Layers();
|
||||
let layers = this.layers = new Layers();
|
||||
if (tracker) {
|
||||
layers.setRotation(-tracker.rotation || 0);
|
||||
}
|
||||
|
|
@ -150,7 +144,7 @@ class Slice {
|
|||
} else {
|
||||
// create top object from object bundle passed back by slicePost()
|
||||
let top = new Top(data.poly);
|
||||
top.thin_fill = data.thin_fill ? data.thin_fill.map(p => base.newPoint(p.x,p.y,p.z)) : undefined;
|
||||
top.thin_fill = data.thin_fill ? data.thin_fill.map(p => newPoint(p.x,p.y,p.z)) : undefined;
|
||||
top.fill_lines = data.fill_lines;
|
||||
top.fill_sparse = data.fill_sparse;
|
||||
top.fill_off = data.fill_off;
|
||||
|
|
@ -251,12 +245,10 @@ function newSlice(z, view) {
|
|||
return new Slice(z, view);
|
||||
}
|
||||
|
||||
gapp.overlay(kiri, {
|
||||
export {
|
||||
Top,
|
||||
Slice,
|
||||
newTop,
|
||||
newSlice,
|
||||
setSliceTracker
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
|
@ -1,15 +1,9 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
gapp.register("kiri.stack", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
|
||||
/*
|
||||
* converts `layers.js` output data structures into three.js meshes for display
|
||||
*/
|
||||
class Stack {
|
||||
export class Stack {
|
||||
constructor(view, freeMem, shiny) {
|
||||
this._view = view;
|
||||
this.view = view.newGroup();
|
||||
|
|
@ -245,8 +239,6 @@ class Stack {
|
|||
}
|
||||
}
|
||||
|
||||
kiri.Stack = Stack;
|
||||
|
||||
let shininess = 15,
|
||||
specular = 0x444444,
|
||||
emissive = 0x101010,
|
||||
|
|
@ -301,5 +293,3 @@ function createLambertMaterial(color, flat) {
|
|||
side: flat ? THREE.DoubleSide : THREE.FrontSide
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,13 +1,8 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: kiri.stack
|
||||
// use: kiri.api
|
||||
// use: kiri.ui
|
||||
gapp.register("kiri.stacks", [], (root, exports) => {
|
||||
|
||||
const { kiri } = root;
|
||||
import { $ } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { Stack } from './stack.js';
|
||||
|
||||
let freeMem = true,
|
||||
stacks = {},
|
||||
|
|
@ -18,7 +13,7 @@ let freeMem = true,
|
|||
|
||||
function init() {
|
||||
labels = $("layers");
|
||||
API = kiri.api,
|
||||
API = api,
|
||||
UC = API.uc,
|
||||
UI = API.ui;
|
||||
}
|
||||
|
|
@ -80,7 +75,7 @@ function create(name, view) {
|
|||
}
|
||||
const stack = stacks[name] = {
|
||||
layers: [ ],
|
||||
obj: new kiri.Stack(view, freeMem, kiri.api.conf.get().controller.shiny),
|
||||
obj: new Stack(view, freeMem, api.conf.get().controller.shiny),
|
||||
add: function(layers) {
|
||||
let lmap = layers.layers;
|
||||
let map = stack.obj.addLayers(layers);
|
||||
|
|
@ -93,9 +88,9 @@ function create(name, view) {
|
|||
mat.visible = ctrl.toggle.checked;
|
||||
});
|
||||
if (ctrl.toggle.checked) {
|
||||
kiri.api.event.emit("stack.show", label);
|
||||
api.event.emit("stack.show", label);
|
||||
} else {
|
||||
kiri.api.event.emit("stack.hide", label)
|
||||
api.event.emit("stack.hide", label)
|
||||
}
|
||||
})
|
||||
};
|
||||
|
|
@ -155,7 +150,7 @@ function setFraction(frac) {
|
|||
});
|
||||
}
|
||||
|
||||
kiri.stacks = {
|
||||
export default {
|
||||
clear,
|
||||
create,
|
||||
rotate,
|
||||
|
|
@ -170,4 +165,17 @@ kiri.stacks = {
|
|||
setFreeMem
|
||||
};
|
||||
|
||||
});
|
||||
export {
|
||||
clear,
|
||||
create,
|
||||
rotate,
|
||||
remove,
|
||||
getStack,
|
||||
getStacks,
|
||||
getRange,
|
||||
setRange,
|
||||
getLabels,
|
||||
setVisible,
|
||||
setFraction,
|
||||
setFreeMem
|
||||
};
|
||||
|
|
@ -1,20 +1,12 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: moto.broker
|
||||
// dep: kiri.api
|
||||
// dep: kiri.utils
|
||||
gapp.register("kiri.stats", [], (root, exports) => {
|
||||
|
||||
const { data, kiri, gapp } = root;
|
||||
const { broker } = gapp;
|
||||
const { api, utils } = kiri;
|
||||
const { js2o, o2js } = utils;
|
||||
import { local } from '../../data/local.js';
|
||||
import { broker } from '../../moto/broker.js';
|
||||
import { js2o, o2js } from './utils.js';
|
||||
|
||||
class Stats {
|
||||
constructor(db) {
|
||||
this.db = db || data.local;
|
||||
this.db = db || local;
|
||||
this.obj = js2o(this.db['stats'] || '{}');
|
||||
let o = this.obj, k;
|
||||
for (k in o) {
|
||||
|
|
@ -56,6 +48,6 @@ class Stats {
|
|||
}
|
||||
}
|
||||
|
||||
kiri.stats = new Stats();
|
||||
export const stats = new Stats();
|
||||
|
||||
});
|
||||
export { stats as Stats };
|
||||
|
|
@ -1,12 +1,10 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
// dep: add.three
|
||||
// dep: kiri.api
|
||||
gapp.register("kiri.tools", (root, exports) => {
|
||||
import { api } from './api.js';
|
||||
import { THREE } from '../../ext/three.js';
|
||||
|
||||
const { Vector3, Quaternion } = THREE;
|
||||
const { kiri, moto } = root;
|
||||
const { api } = kiri;
|
||||
|
||||
const XAXIS = new THREE.Vector3(1,0,0);
|
||||
const ZAXIS = new THREE.Vector3(0,0,1);
|
||||
|
|
@ -164,4 +162,5 @@ api.event.on('mouse.hover.up', (ev) => {
|
|||
endIt();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
export { onLayFlatSelect, onFaceUpSelect, startIt, endIt, cleanup, scale, onDone };
|
||||
865
src/kiri/core/ui.js
Normal file
865
src/kiri/core/ui.js
Normal file
|
|
@ -0,0 +1,865 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
import { $ } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
|
||||
let DOC = self.document,
|
||||
inputAction = null,
|
||||
lastAddTo = null,
|
||||
lastGroup = null,
|
||||
lastDiv = null,
|
||||
addTo = null,
|
||||
bindTo = null,
|
||||
groups = {},
|
||||
groupSticky = false,
|
||||
groupName = undefined,
|
||||
heads = {}, // hideable group heads (clickable label)
|
||||
hidden = {}, // hidden groups (by name)
|
||||
hasModes = [],
|
||||
setters = [],
|
||||
lastMode = null,
|
||||
lastExpert = true,
|
||||
prefix = "tab",
|
||||
units = 1,
|
||||
lastChange = null,
|
||||
lastBtn = null,
|
||||
lastTxt = null,
|
||||
lastPop = null;
|
||||
|
||||
export const UI = {
|
||||
prefix: function(pre) { prefix = pre; return UI },
|
||||
inputAction: function(fn) { inputAction = fn; return UI },
|
||||
lastChange: function() { return lastChange },
|
||||
checkpoint,
|
||||
restore,
|
||||
refresh,
|
||||
setHidden,
|
||||
setMode,
|
||||
bound,
|
||||
toInt,
|
||||
toFloat,
|
||||
toDegsFloat,
|
||||
isSticky,
|
||||
setSticky,
|
||||
newBoolean,
|
||||
newButton,
|
||||
newBlank,
|
||||
newDiv,
|
||||
newElement,
|
||||
newExpand,
|
||||
endExpand,
|
||||
newGCode,
|
||||
newGroup,
|
||||
newLabel,
|
||||
newInput,
|
||||
newValue,
|
||||
newRange,
|
||||
newRow,
|
||||
newSelect,
|
||||
newText,
|
||||
setGroup,
|
||||
addUnits,
|
||||
setUnits,
|
||||
confirm,
|
||||
prompt,
|
||||
alert,
|
||||
onBlur,
|
||||
setEnabled(el, bool) {
|
||||
if (bool) {
|
||||
el.removeAttribute('disabled');
|
||||
} else {
|
||||
el.setAttribute('disabled','');
|
||||
}
|
||||
},
|
||||
setVisible(el, bool) {
|
||||
UI.setClass(el, 'hide', !bool);
|
||||
},
|
||||
setClass(el, clazz, bool) {
|
||||
if (bool) {
|
||||
el.classList.add(clazz);
|
||||
} else {
|
||||
el.classList.remove(clazz);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function setHidden(map) {
|
||||
hidden = map;
|
||||
refresh();
|
||||
for (let ctrl of Object.values(heads)) {
|
||||
ctrl.update();
|
||||
}
|
||||
}
|
||||
|
||||
function onBlur(obj, fn) {
|
||||
if (Array.isArray(obj)) {
|
||||
for (let o of obj) onBlur(o, fn);
|
||||
return;
|
||||
}
|
||||
obj.addEventListener('blur', fn);
|
||||
}
|
||||
|
||||
function alert(message) {
|
||||
return confirm(message, {ok:true});
|
||||
}
|
||||
|
||||
function prompt(message, value) {
|
||||
return confirm(message, {ok:true, cancel:undefined}, value);
|
||||
}
|
||||
|
||||
function confirm(message, buttons, input, opt = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let { feature } = api;
|
||||
let onkey_save = feature.on_key;
|
||||
feature.on_key = key => {
|
||||
// console.log({ eat_key: key });
|
||||
return true;
|
||||
};
|
||||
let dialog = $('dialog');
|
||||
let btns = buttons || {
|
||||
"yes": true,
|
||||
"no": false
|
||||
};
|
||||
let rnd = Date.now().toString(36);
|
||||
let html = [
|
||||
`<div class="confirm f-col a-stretch" style="padding:5px !important">`
|
||||
];
|
||||
if (message) {
|
||||
html.push(`<label style="user-select:text">${message}</label>`);
|
||||
}
|
||||
if (opt.pre) {
|
||||
html = opt.pre.appendAll(html);
|
||||
}
|
||||
let iid;
|
||||
if (Array.isArray(input)) {
|
||||
iid = `confirm-input-${rnd}`;
|
||||
html.append(`<div><textarea rows="15" cols="40" class="grow" type="text" spellcheck="false" id="${iid}"></textarea></div>`);
|
||||
} else if (input !== undefined) {
|
||||
iid = `confirm-input-${rnd}`;
|
||||
html.append(`<div><input class="grow" type="text" spellcheck="false" id="${iid}"/></div>`);
|
||||
}
|
||||
html.append(`<div class="f-row j-end">`);
|
||||
Object.entries(btns).forEach((row,i) => {
|
||||
html.append(`<button id="confirm-${i}-${rnd}">${row[0]}</button>`);
|
||||
});
|
||||
html.append(`</div></div>`);
|
||||
if (opt.post) {
|
||||
html.appendAll(opt.post);
|
||||
}
|
||||
dialog.innerHTML = html.join('');
|
||||
function done(value) {
|
||||
dialog.close();
|
||||
feature.on_key = onkey_save;
|
||||
if (value !== undefined) {
|
||||
setTimeout(() => { resolve(value) }, 150);
|
||||
}
|
||||
}
|
||||
if (iid) {
|
||||
let array = Array.isArray(input);
|
||||
iid = $(iid);
|
||||
iid.value = array ? input.join('\n') : input;
|
||||
if (!array)
|
||||
iid.onkeypress = (ev) => {
|
||||
if (ev.key === 'Enter' || ev.charCode === 13) {
|
||||
done(ev.target.value);
|
||||
}
|
||||
};
|
||||
}
|
||||
Object.entries(btns).forEach((row,i) => {
|
||||
$(`confirm-${i}-${rnd}`).onclick = (ev) => {
|
||||
let value = iid && row[1] ? iid.value : row[1];
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
done(value);
|
||||
}
|
||||
});
|
||||
setTimeout(() => {
|
||||
dialog.showModal();
|
||||
if (iid) {
|
||||
iid.focus();
|
||||
iid.selectionStart = 0;
|
||||
iid.selectionEnd = iid.value.length;
|
||||
}
|
||||
}, 150);
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
setMode(lastMode);
|
||||
setters.forEach(input => {
|
||||
if (input.setv) {
|
||||
input.setv(input.real);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setMode(mode) {
|
||||
lastMode = mode;
|
||||
hasModes.forEach(div => div.setMode(mode));
|
||||
}
|
||||
|
||||
function checkpoint(at) {
|
||||
return { addTo: at || addTo, lastDiv: at || lastDiv, lastGroup, groupName };
|
||||
}
|
||||
|
||||
function restore(opt = {}) {
|
||||
addTo = opt.addTo || addTo;
|
||||
bindTo = opt.bindTo || null;
|
||||
lastDiv = opt.lastDiv || lastDiv;
|
||||
lastGroup = opt.lastGroup || lastGroup;
|
||||
groupName = opt.groupName || groupName;
|
||||
}
|
||||
|
||||
// at present only used by the layers popup menu
|
||||
function setGroup(div) {
|
||||
addTo = lastDiv = div;
|
||||
groupName = undefined;
|
||||
lastGroup = [];
|
||||
return div;
|
||||
}
|
||||
|
||||
function newElement(type, opt = {}) {
|
||||
let el = DOC.createElement(type);
|
||||
if (opt.id) {
|
||||
el.setAttribute("id", opt.id);
|
||||
}
|
||||
if (opt.class) {
|
||||
for (let cl of opt.class.split(' ')) {
|
||||
el.classList.add(cl);
|
||||
}
|
||||
}
|
||||
if (opt.attr) {
|
||||
for (let [key, val] of Object.entries(opt.attr)) {
|
||||
el.setAttribute(key, val);
|
||||
}
|
||||
}
|
||||
return el;
|
||||
}
|
||||
|
||||
function newGroup(label, div, opt = {}) {
|
||||
lastDiv = div = (div || lastDiv);
|
||||
|
||||
let group = opt.group || label,
|
||||
row = DOC.createElement('div'),
|
||||
dbkey = `beta-${prefix}-show-${group}`,
|
||||
link;
|
||||
|
||||
if (opt.class) {
|
||||
opt.class.split(' ').forEach(ce => {
|
||||
row.classList.add(ce);
|
||||
});
|
||||
} else {
|
||||
row.setAttribute("class", "set-header");
|
||||
}
|
||||
|
||||
if (div && opt.driven) {
|
||||
addModeControls(div, opt);
|
||||
}
|
||||
|
||||
addTo = lastDiv;
|
||||
|
||||
div.appendChild(row);
|
||||
if (label) {
|
||||
link = DOC.createElement('a');
|
||||
link.appendChild(DOC.createTextNode(label));
|
||||
row.appendChild(link);
|
||||
}
|
||||
|
||||
addModeControls(row, opt);
|
||||
lastGroup = groups[group] = [];
|
||||
lastGroup.key = dbkey;
|
||||
groupName = group;
|
||||
|
||||
if (opt.hideable) {
|
||||
let pad = DOC.createElement('i');
|
||||
let arr = DOC.createElement('span');
|
||||
pad.setAttribute('class','grow');
|
||||
row.appendChild(pad);
|
||||
row.appendChild(arr);
|
||||
const ctrl = heads[group] = {
|
||||
row,
|
||||
arr,
|
||||
update() {
|
||||
if (!hidden[group]) {
|
||||
arr.innerHTML = '<i class="fa-solid fa-caret-down"></i>';
|
||||
row.classList.add('hidden');
|
||||
} else {
|
||||
arr.innerHTML = '<i class="fa-solid fa-caret-up"></i>';
|
||||
row.classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
};
|
||||
row.onclick = () => {
|
||||
hidden[group] = !hidden[group];
|
||||
refresh();
|
||||
ctrl.update();
|
||||
};
|
||||
}
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
function addCollapsableElement(parent, options = {}) {
|
||||
let row = newDiv(options);
|
||||
if (parent) parent.appendChild(row);
|
||||
if (lastGroup) lastGroup.push(row);
|
||||
return row;
|
||||
}
|
||||
|
||||
function bound(low,high) {
|
||||
return function(v) {
|
||||
if (isNaN(v)) return low;
|
||||
return v < low ? low : v > high ? high : v;
|
||||
};
|
||||
}
|
||||
|
||||
function toInt() {
|
||||
let nv = this.value !== '' ? parseInt(this.value) : null;
|
||||
if (isNaN(nv)) nv = 0;
|
||||
if (nv !== null && this.bound) nv = this.bound(nv);
|
||||
this.value = nv;
|
||||
if (this.setv) {
|
||||
return this.real = Math.round(nv * units);
|
||||
};
|
||||
return nv;
|
||||
}
|
||||
|
||||
function toFloat() {
|
||||
let nv = this.value !== '' ? parseFloat(this.value) : null;
|
||||
if (nv !== null && this.bound) nv = this.bound(nv);
|
||||
if (this.setv) {
|
||||
return this.setv(nv * units);
|
||||
} else {
|
||||
this.value = nv;
|
||||
}
|
||||
return nv;
|
||||
}
|
||||
|
||||
function toDegsFloat(){
|
||||
let nv = this.value !== '' ? parseFloat(this.value) : null;
|
||||
if (nv !== null && this.bound) nv = this.bound(nv);
|
||||
nv = (nv+360)% 360; // bound the val to 0-359.99
|
||||
if (this.setv) {
|
||||
return this.setv(nv);
|
||||
} else {
|
||||
this.value = nv;
|
||||
}
|
||||
return nv;
|
||||
}
|
||||
|
||||
function raw() {
|
||||
return this.value !== '' ? this.value : null;
|
||||
}
|
||||
|
||||
function setUnits(v) {
|
||||
if (v !== units) {
|
||||
units = v;
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
function newLabel(text, opt = {}) {
|
||||
let label = DOC.createElement('label');
|
||||
label.appendChild(DOC.createTextNode(text));
|
||||
label.setAttribute("class", "noselect");
|
||||
if (opt.class) opt.class.split(' ').forEach(cl => {
|
||||
label.classList.add(cl);
|
||||
})
|
||||
return label;
|
||||
}
|
||||
|
||||
function newValue(size = 6, opt = {}) {
|
||||
let value = DOC.createElement('input');
|
||||
value.setAttribute("size", size);
|
||||
value.setAttribute("readonly", '');
|
||||
value.setAttribute("class", "nooutline noselect");
|
||||
if (opt.class) opt.class.split(' ').forEach(cl => {
|
||||
value.classList.add(cl);
|
||||
})
|
||||
return value;
|
||||
}
|
||||
|
||||
function addId(el, opt = {}) {
|
||||
if (opt.id) {
|
||||
el.setAttribute("id", opt.id);
|
||||
}
|
||||
}
|
||||
|
||||
function safecall(fn) {
|
||||
try {
|
||||
return fn();
|
||||
} catch (e) {
|
||||
// console.log({ safecall_error: e });
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function addModeControls(el, opt = {}) {
|
||||
el.__opt = opt;
|
||||
el.showMe = function() {
|
||||
if (opt.trace) console.log({ showMe: el });
|
||||
el.classList.remove('hide');
|
||||
};
|
||||
el.hideMe = function() {
|
||||
if (opt.trace) console.log({ hideMe: el });
|
||||
el.classList.add('hide');
|
||||
};
|
||||
el.setVisible = function(show) {
|
||||
if (opt.trace) console.log({ setVisible: show });
|
||||
if (show) el.showMe();
|
||||
else el.hideMe();
|
||||
};
|
||||
el.setMode = function(mode) {
|
||||
let hidn = hidden[el._group] === true;
|
||||
let xprt = opt.expert === undefined || (opt.expert === lastExpert);
|
||||
let show = opt.show ? safecall(opt.show) : true;
|
||||
let disp = opt.visible ? opt.visible() : true;
|
||||
let hmod = el.hasMode(mode);
|
||||
if (opt.trace) console.log({ setMode: mode, xprt, show, disp, hmod, modes:el.modes });
|
||||
if (opt.manual) return;
|
||||
el.setVisible(!hidn && hmod && show && xprt && disp);
|
||||
}
|
||||
el.hasMode = function(mode) {
|
||||
return (el.modes.length === 0) ||
|
||||
(el.modes.contains && el.modes.contains(mode)) ||
|
||||
(el.modes === mode);
|
||||
}
|
||||
el.modes = opt.modes || [];
|
||||
hasModes.push(el);
|
||||
}
|
||||
|
||||
function newDiv(opt = {}) {
|
||||
let div = DOC.createElement(opt.tag || 'div');
|
||||
addModeControls(div, opt);
|
||||
(opt.addto || addTo).appendChild(div);
|
||||
if (opt.addto) lastDiv = addTo = div;
|
||||
if (opt.class) div.setAttribute('class', opt.class);
|
||||
if (opt.group !== false) {
|
||||
lastGroup?.push(div);
|
||||
div._group = groupName;
|
||||
} else {
|
||||
lastGroup = undefined;
|
||||
groupName = undefined;
|
||||
}
|
||||
return div;
|
||||
}
|
||||
|
||||
function newExpand(label, opt = {}, opteach = {}) {
|
||||
let div = DOC.createElement('details');
|
||||
div.setAttribute('class', opt.class || 'f-col');
|
||||
addModeControls(div, opt);
|
||||
|
||||
let summary = DOC.createElement('summary');
|
||||
summary.setAttribute('class', opt.class || 'var-row');
|
||||
summary.innerHTML = `<label>${label}</label>`;
|
||||
|
||||
div.appendChild( summary );
|
||||
div.collapse = () => {
|
||||
div.removeAttribute('open');
|
||||
};
|
||||
|
||||
lastAddTo = addTo;
|
||||
addTo.appendChild(div);
|
||||
addTo = div;
|
||||
|
||||
return div;
|
||||
}
|
||||
|
||||
function endExpand() {
|
||||
addTo = lastAddTo;
|
||||
return addTo;
|
||||
}
|
||||
|
||||
function isSticky() {
|
||||
return groupSticky;
|
||||
}
|
||||
|
||||
function setSticky(bool) {
|
||||
groupSticky = bool;
|
||||
}
|
||||
|
||||
function newGCode(label, options) {
|
||||
let opt = options || {},
|
||||
btn = DOC.createElement("button"),
|
||||
txt = DOC.createElement("textarea"),
|
||||
area = opt.area;
|
||||
|
||||
txt.setAttribute("wrap", "off");
|
||||
txt.setAttribute("spellcheck", "false");
|
||||
txt.setAttribute("style", "resize: none");
|
||||
txt.onblur = bindTo || inputAction;
|
||||
txt.button = btn;
|
||||
|
||||
btn.setAttribute("class", "basis-50");
|
||||
btn.appendChild(DOC.createTextNode(label));
|
||||
btn.setAttribute("title", opt.title || undefined);
|
||||
btn.onclick = function(ev) {
|
||||
ev.stopPropagation();
|
||||
if (ev.target === txt) {
|
||||
// drop clicks on TextArea
|
||||
ev.target.focus();
|
||||
} else {
|
||||
let fc = area.firstChild;
|
||||
if (fc) area.removeChild(fc);
|
||||
area.appendChild(txt);
|
||||
txt.scrollTop = 0;
|
||||
txt.scrollLeft = 0;
|
||||
txt.selectionEnd = 0;
|
||||
let rows = txt.value.split('\n');
|
||||
let cols = 0;
|
||||
rows.forEach(row => {
|
||||
cols = Math.max(cols, row.length);
|
||||
});
|
||||
let showing = btn === lastBtn;
|
||||
if (lastTxt) {
|
||||
lastTxt.classList.remove('txt-sel');
|
||||
}
|
||||
if (lastBtn) {
|
||||
lastBtn.classList.remove('btn-sel');
|
||||
}
|
||||
if (!showing) {
|
||||
btn.classList.add('btn-sel');
|
||||
lastTxt = btn;
|
||||
lastBtn = btn;
|
||||
txt.focus();
|
||||
} else {
|
||||
inputAction();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
addModeControls(btn, opt);
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
function newText(label, options) {
|
||||
let opt = options || {},
|
||||
inline = opt.row,
|
||||
row = inline ? lastDiv : newDiv(options),
|
||||
btn = DOC.createElement("button"),
|
||||
pop = DOC.createElement("div"),
|
||||
txt = DOC.createElement("textarea"),
|
||||
area = opt.area;
|
||||
|
||||
txt.setAttribute("wrap", "off");
|
||||
txt.setAttribute("spellcheck", "false");
|
||||
txt.setAttribute("style", "resize: none");
|
||||
txt.onblur = inputAction;
|
||||
|
||||
btn.appendChild(DOC.createTextNode(inline ? label : "edit"));
|
||||
|
||||
btn.onclick = function(ev) {
|
||||
ev.stopPropagation();
|
||||
if (ev.target === txt) {
|
||||
// drop clicks on TextArea
|
||||
ev.target.focus();
|
||||
} else {
|
||||
let fc = area.firstChild;
|
||||
if (fc) area.removeChild(fc);
|
||||
area.appendChild(txt);
|
||||
// first time, button click / show
|
||||
btn.parentNode.onclick = btn.onclick;
|
||||
txt.scrollTop = 0;
|
||||
txt.scrollLeft = 0;
|
||||
txt.selectionEnd = 0;
|
||||
let rows = txt.value.split('\n');
|
||||
let cols = 0;
|
||||
rows.forEach(row => {
|
||||
cols = Math.max(cols, row.length);
|
||||
});
|
||||
|
||||
let showing = pop === lastPop;
|
||||
if (lastBtn) {
|
||||
lastBtn.classList.remove('btn-sel');
|
||||
}
|
||||
if (lastTxt) {
|
||||
lastTxt.classList.remove('txt-sel');
|
||||
}
|
||||
if (!showing) {
|
||||
row.classList.add('txt-sel');
|
||||
pop.style.display = "flex";
|
||||
lastPop = pop;
|
||||
lastTxt = row;
|
||||
txt.focus();
|
||||
} else {
|
||||
inputAction();
|
||||
}
|
||||
}
|
||||
};
|
||||
addModeControls(btn, opt);
|
||||
addId(btn, opt);
|
||||
|
||||
if (!inline) {
|
||||
row.appendChild(newLabel(label));
|
||||
row.setAttribute("class", "var-row");
|
||||
}
|
||||
row.appendChild(btn);
|
||||
if (opt.title) row.setAttribute("title", options.title);
|
||||
if (row.setVisible) {
|
||||
btn.setVisible = row.setVisible;
|
||||
}
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
function newInput(label, opt = {}) {
|
||||
let row = newDiv(opt),
|
||||
hide = opt.hide,
|
||||
size = opt.size || 5,
|
||||
height = opt.height || 0,
|
||||
ip = height > 1 ? DOC.createElement('textarea') : DOC.createElement('input'),
|
||||
action = opt.action || bindTo || inputAction;
|
||||
|
||||
row.appendChild(newLabel(label));
|
||||
row.appendChild(ip);
|
||||
row.setAttribute("class", opt.class || "var-row");
|
||||
if (height > 1) {
|
||||
ip.setAttribute("cols", size);
|
||||
ip.setAttribute("rows", height);
|
||||
ip.setAttribute("wrap", "off");
|
||||
} else {
|
||||
if (Number.isInteger(size)) {
|
||||
ip.setAttribute("size", size);
|
||||
} else {
|
||||
ip.setAttribute("style", `width:${size}`);
|
||||
}
|
||||
}
|
||||
ip.setAttribute("type", "text");
|
||||
ip.setAttribute("spellcheck", "false");
|
||||
row.style.display = hide ? 'none' : '';
|
||||
if (opt.disabled) ip.setAttribute("disabled", "true");
|
||||
if (opt.title) row.setAttribute("title", opt.title);
|
||||
if (opt.convert) ip.convert = opt.convert.bind(ip);
|
||||
if (opt.bound) ip.bound = opt.bound;
|
||||
if (opt.action) action = opt.action;
|
||||
ip.addEventListener('focus', function(event) {
|
||||
setSticky(true);
|
||||
});
|
||||
if (action) {
|
||||
ip.addEventListener('keydown', function(event) {
|
||||
let key = event.key;
|
||||
if (
|
||||
opt.text ||
|
||||
(key >= '0' && key <= '9') ||
|
||||
key === '.' ||
|
||||
key === '-' ||
|
||||
key === 'Backspace' ||
|
||||
key === 'Delete' ||
|
||||
key === 'ArrowLeft' ||
|
||||
key === 'ArrowRight' ||
|
||||
key === 'Tab' ||
|
||||
event.metaKey ||
|
||||
event.ctrlKey ||
|
||||
(key === ',' && options.comma)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
});
|
||||
ip.addEventListener('keyup', function(event) {
|
||||
if (event.keyCode === 13) {
|
||||
ip.blur();
|
||||
}
|
||||
});
|
||||
ip.addEventListener('blur', function(event) {
|
||||
setSticky(false);
|
||||
lastChange = ip;
|
||||
action(event);
|
||||
if (opt.trigger) {
|
||||
refresh(opt.trigger === 1 || opt.trigger === true);
|
||||
}
|
||||
});
|
||||
if (opt.units) {
|
||||
addUnits(ip, opt.round || 3);
|
||||
}
|
||||
}
|
||||
if (!ip.convert) ip.convert = raw.bind(ip);
|
||||
ip.setVisible = row.setVisible;
|
||||
|
||||
return ip;
|
||||
}
|
||||
|
||||
function addUnits(input, round) {
|
||||
setters.push(input);
|
||||
input.setv = function(value) {
|
||||
if (typeof(value) === 'number') {
|
||||
input.real = value;
|
||||
input.value = (value / units).round(round);
|
||||
} else {
|
||||
input.value = value;
|
||||
}
|
||||
// console.log({ value }, input.real, input.value );
|
||||
return input.real;
|
||||
};
|
||||
return input;
|
||||
}
|
||||
|
||||
function newRange(label, options) {
|
||||
let row = newDiv(options),
|
||||
ip = DOC.createElement('input'),
|
||||
hide = options && options.hide,
|
||||
action = bindTo || inputAction;
|
||||
|
||||
if (label) row.appendChild(newLabel(label));
|
||||
row.appendChild(ip);
|
||||
row.setAttribute("class", "var-row");
|
||||
ip.setAttribute("type", "range");
|
||||
ip.setAttribute("min", (options && options.min ? options.min : 0));
|
||||
ip.setAttribute("max", (options && options.max ? options.max : 100));
|
||||
ip.setAttribute("value", 0);
|
||||
row.style.display = hide ? 'none' : '';
|
||||
if (options) {
|
||||
if (options.title) {
|
||||
ip.setAttribute("title", options.title);
|
||||
row.setAttribute("title", options.title);
|
||||
}
|
||||
if (options.action) action = options.action;
|
||||
}
|
||||
ip.setVisible = row.setVisible;
|
||||
|
||||
return ip;
|
||||
}
|
||||
|
||||
function newSelect(label, options = {}, source) {
|
||||
let row = newDiv(options),
|
||||
ip = DOC.createElement('select'),
|
||||
hide = options && options.hide,
|
||||
action = bindTo || inputAction;
|
||||
|
||||
row.appendChild(newLabel(label));
|
||||
row.appendChild(ip);
|
||||
if (Array.isArray(source)) {
|
||||
ip._source = source;
|
||||
} else {
|
||||
row.setAttribute("source", source || "tools");
|
||||
}
|
||||
row.setAttribute("class", "var-row");
|
||||
row.style.display = hide ? 'none' : '';
|
||||
if (options.convert) ip.convert = options.convert.bind(ip);
|
||||
if (options.disabled) ip.setAttribute("disabled", "true");
|
||||
if (options.title) row.setAttribute("title", options.title);
|
||||
if (options.action) action = options.action;
|
||||
ip.setVisible = row.setVisible;
|
||||
ip.onchange = function(ev) {
|
||||
lastChange = ip;
|
||||
action();
|
||||
if (options.trigger) {
|
||||
refresh();
|
||||
}
|
||||
};
|
||||
ip.onclick = (ev) => {
|
||||
groupSticky = true;
|
||||
};
|
||||
// because firefox
|
||||
ip.onmouseenter = (ev) => {
|
||||
groupSticky = true;
|
||||
};
|
||||
|
||||
return ip;
|
||||
}
|
||||
|
||||
function newBoolean(label, action = bindTo, opt = {}) {
|
||||
let row = newDiv(opt),
|
||||
ip = DOC.createElement('input'),
|
||||
hide = opt.hide;
|
||||
|
||||
if (label) {
|
||||
row.appendChild(newLabel(label));
|
||||
}
|
||||
row.appendChild(ip);
|
||||
row.setAttribute("class", "var-row");
|
||||
row.style.display = hide ? 'none' : '';
|
||||
ip.setAttribute("type", "checkbox");
|
||||
ip.checked = false;
|
||||
if (opt.disabled) {
|
||||
ip.setAttribute("disabled", "true");
|
||||
}
|
||||
if (opt.title) {
|
||||
ip.setAttribute("title", opt.title);
|
||||
row.setAttribute("title", opt.title);
|
||||
}
|
||||
if (action) {
|
||||
ip.onclick = function(ev) {
|
||||
action(ip);
|
||||
if (opt.trigger) {
|
||||
refresh();
|
||||
}
|
||||
};
|
||||
}
|
||||
ip.setVisible = row.setVisible;
|
||||
|
||||
return ip;
|
||||
}
|
||||
|
||||
function newBlank(options) {
|
||||
let opt = options || {},
|
||||
row = newDiv(opt),
|
||||
hide = opt.hide;
|
||||
|
||||
row.isBlank = true;
|
||||
row.style.display = hide ? 'none' : '';
|
||||
|
||||
if (!opt.driven) {
|
||||
row.setAttribute("class", "var-row");
|
||||
}
|
||||
|
||||
if (opt.class) {
|
||||
opt.class.split(' ').forEach(ce => {
|
||||
row.classList.add(ce);
|
||||
});
|
||||
}
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
// unlike other elements, does not auto-add to a row
|
||||
function newButton(label, action, opt = {}) {
|
||||
let b = DOC.createElement('button');
|
||||
|
||||
b.onclick = function() {
|
||||
switch (typeof action) {
|
||||
case "string":
|
||||
api.event.emit(action);
|
||||
break;
|
||||
case "function":
|
||||
action(...arguments);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
if (opt.class) {
|
||||
opt.class.split(' ').forEach(ce => {
|
||||
b.classList.add(ce);
|
||||
});
|
||||
}
|
||||
if (opt.icon) {
|
||||
let d = DOC.createElement('div');
|
||||
d.innerHTML = opt.icon;
|
||||
b.appendChild(d);
|
||||
}
|
||||
if (opt.title) {
|
||||
b.setAttribute('title', opt.title);
|
||||
}
|
||||
if (label) {
|
||||
b.appendChild(DOC.createTextNode(label));
|
||||
}
|
||||
|
||||
addModeControls(b, opt);
|
||||
addId(b, opt);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
function newRow(children, options) {
|
||||
let row = addCollapsableElement((options && options.noadd) ? null : addTo);
|
||||
if (children) children.forEach(function (c) { row.appendChild(c) });
|
||||
addModeControls(row, options);
|
||||
if (options && options.class) {
|
||||
options.class.split(' ').forEach(ce => {
|
||||
row.classList.add(ce);
|
||||
});
|
||||
}
|
||||
return row;
|
||||
}
|
||||
|
|
@ -1,8 +1,7 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
gapp.register("kiri.utils", [], (root, exports) => {
|
||||
import { ajax as moto_ajax } from '../../moto/ajax.js';
|
||||
import { local as dataLocal } from '../../data/local.js';
|
||||
|
||||
function parseOpt(ov) {
|
||||
let opt = {}, kv, kva;
|
||||
|
|
@ -28,7 +27,7 @@ function encodeOpt(opt) {
|
|||
}
|
||||
|
||||
function ajax(url, fn, rt, po, hd) {
|
||||
return moto.ajax.new(fn, rt).request(url, po, hd);
|
||||
return moto_ajax.new(fn, rt).request(url, po, hd);
|
||||
}
|
||||
|
||||
function o2js(o,def) {
|
||||
|
|
@ -46,7 +45,7 @@ function js2o(s,def) {
|
|||
|
||||
function ls2o(key,def) {
|
||||
// defer ref b/c it may run in a worker
|
||||
return js2o(root.data.local.getItem(key),def);
|
||||
return js2o(dataLocal.getItem(key),def);
|
||||
}
|
||||
|
||||
// split 24 bit color into [ r, g, b ]
|
||||
|
|
@ -99,11 +98,14 @@ function trackFn(fn, name) {
|
|||
}
|
||||
}
|
||||
|
||||
exports({
|
||||
function noop() {}
|
||||
|
||||
export {
|
||||
trackFn,
|
||||
areEqual,
|
||||
parseOpt,
|
||||
encodeOpt,
|
||||
noop,
|
||||
ajax,
|
||||
o2js,
|
||||
js2o,
|
||||
|
|
@ -111,6 +113,19 @@ exports({
|
|||
avgc,
|
||||
rgb,
|
||||
a2c
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
export let utils = {
|
||||
trackFn,
|
||||
areEqual,
|
||||
parseOpt,
|
||||
encodeOpt,
|
||||
noop,
|
||||
ajax,
|
||||
o2js,
|
||||
js2o,
|
||||
ls2o,
|
||||
avgc,
|
||||
rgb,
|
||||
a2c
|
||||
};
|
||||
|
|
@ -1,23 +1,11 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// dep: geo.base
|
||||
// dep: geo.point
|
||||
// dep: geo.points
|
||||
// dep: geo.polygons
|
||||
// dep: kiri.utils
|
||||
// use: kiri.codec
|
||||
// use: mesh.util
|
||||
gapp.register("kiri.widget", [], (root, exports) => {
|
||||
|
||||
const { base, kiri } = root;
|
||||
const { api, driver, utils } = kiri;
|
||||
const { util, polygons } = base;
|
||||
const { Mesh, newPoint, verticesToPoints } = base;
|
||||
const { inRange, time } = util;
|
||||
const { avgc, trackFn } = utils;
|
||||
import { base } from '../../geo/base.js';
|
||||
import { avgc } from './utils.js';
|
||||
import { verticesToPoints } from '../../geo/points.js';
|
||||
import { util as mesh_util } from '../../mesh/util.js';
|
||||
|
||||
const { inRange, time } = base.util;
|
||||
const solid_opacity = 1.0;
|
||||
const groups = [];
|
||||
|
||||
|
|
@ -28,12 +16,14 @@ let nextId = 0;
|
|||
|
||||
function newWidget(id,group) { return new Widget(id,group) }
|
||||
|
||||
function catalog() { return kiri.catalog }
|
||||
function catalog() { return self.kiri_catalog };
|
||||
|
||||
function index() { return catalog().index }
|
||||
function index() { return self.kiri_catalog.index }
|
||||
|
||||
class Widget {
|
||||
constructor(id, group) {
|
||||
this.api = self.kiri_api;
|
||||
|
||||
this.id = id || Date.now().toString(36)+(nextId++);
|
||||
this.grouped = group ? true : false;
|
||||
this.group = group || [];
|
||||
|
|
@ -347,7 +337,7 @@ class Widget {
|
|||
}
|
||||
|
||||
selectFaces(faces) {
|
||||
let groups = mesh.util.facesToGroups(faces || []);
|
||||
let groups = mesh_util.facesToGroups(faces || []);
|
||||
let geo = this.mesh.geometry;
|
||||
geo.clearGroups();
|
||||
for (let group of groups) {
|
||||
|
|
@ -503,8 +493,8 @@ class Widget {
|
|||
w._move(x, y, z, abs);
|
||||
});
|
||||
// allow for use in engine / cli
|
||||
if ((x || y || z) && api && api.event) {
|
||||
api.event.emit('widget.move', {widget: this, pos: {x, y, z}, abs});
|
||||
if ((x || y || z) && this.api && this.api.event) {
|
||||
this.api.event.emit('widget.move', {widget: this, pos: {x, y, z}, abs});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -555,8 +545,8 @@ class Widget {
|
|||
w._scale(x, y, z);
|
||||
});
|
||||
this.center(false);
|
||||
if (api && api.event) {
|
||||
api.event.emit('widget.scale', {widget: this, x, y, z});
|
||||
if (this.api && this.api.event) {
|
||||
this.api.event.emit('widget.scale', {widget: this, x, y, z});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -586,8 +576,8 @@ class Widget {
|
|||
if (this.outline) {
|
||||
this.setEdges(true);
|
||||
}
|
||||
if ((x || y || z) && api && api.event) {
|
||||
api.event.emit('widget.rotate', {widget: this, x, y, z});
|
||||
if ((x || y || z) && this.api && this.api.event) {
|
||||
this.api.event.emit('widget.rotate', {widget: this, x, y, z});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -630,8 +620,8 @@ class Widget {
|
|||
w._mirror();
|
||||
});
|
||||
this.center();
|
||||
if (api && api.event) {
|
||||
api.event.emit('widget.mirror', {widget: this});
|
||||
if (this.api && this.api.event) {
|
||||
this.api.event.emit('widget.mirror', {widget: this});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -758,113 +748,21 @@ class Widget {
|
|||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* processes points into facets, then into slices
|
||||
*
|
||||
* once upon a time there were multiple slicers. this was the fastest in most cases.
|
||||
* lines are added to all the buckets they cross. then buckets are processed in order.
|
||||
* buckets are contiguous ranges of z slicers. the advantage of this method is that
|
||||
* as long as a large percentage of lines do not cross large z distances, this reduces
|
||||
* the number of lines each slice has to consider thus improving speed.
|
||||
*
|
||||
* @params {Object} settings
|
||||
* @params {Function} [ondone]
|
||||
* @params {Function} [onupdate]
|
||||
*/
|
||||
slice(settings, ondone, onupdate) {
|
||||
let widget = this;
|
||||
let startTime = time();
|
||||
|
||||
widget.settings = settings;
|
||||
widget.clearSlices();
|
||||
onupdate(0.0001, "slicing");
|
||||
|
||||
if (kiri.client && !widget.inWorker) {
|
||||
// store slicing visuals
|
||||
widget.stack = kiri.stacks.create(widget.id, widget.mesh);
|
||||
// compensate for zcut (widget moved through floor)
|
||||
widget.stack.obj.view.position.z = widget.track.zcut || 0;
|
||||
// in case result of slice is nothing, do not preserve previous
|
||||
widget.slices = []
|
||||
|
||||
// executed from kiri.js
|
||||
kiri.client.slice(settings, this, function(reply) {
|
||||
if (reply.alert) {
|
||||
onupdate(null, null, reply.alert);
|
||||
}
|
||||
if (reply.update) {
|
||||
onupdate(reply.update, reply.updateStatus);
|
||||
}
|
||||
if (reply.send_start) {
|
||||
widget.xfer = {start: reply.send_start};
|
||||
}
|
||||
if (reply.stats) {
|
||||
widget.stats = reply.stats;
|
||||
}
|
||||
if (reply.send_end) {
|
||||
widget.stats.load_time = widget.xfer.start - reply.send_end;
|
||||
}
|
||||
if (reply.slice) {
|
||||
widget.slices.push(kiri.codec.decode(reply.slice, {mesh:widget.mesh}));
|
||||
}
|
||||
if (reply.done) {
|
||||
ondone(true);
|
||||
}
|
||||
if (reply.error) {
|
||||
ondone(false, reply.error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (kiri.server) {
|
||||
// executed from kiri-worker.js
|
||||
let catchdone = function(error) {
|
||||
if (error) {
|
||||
return ondone(error);
|
||||
}
|
||||
|
||||
onupdate(1.0, "transfer");
|
||||
|
||||
widget.stats.slice_time = time() - startTime;
|
||||
|
||||
ondone();
|
||||
};
|
||||
|
||||
let catchupdate = function(progress, message, alert) {
|
||||
onupdate(progress, message, alert);
|
||||
};
|
||||
|
||||
let drv = driver[settings.mode.toUpperCase()];
|
||||
|
||||
if (drv) {
|
||||
let promise = drv.slice(settings, widget, catchupdate, catchdone);
|
||||
if (promise) promise.catch(error => ondone(error));
|
||||
} else {
|
||||
console.log('invalid mode: '+settings.mode);
|
||||
ondone('invalid mode: '+settings.mode);
|
||||
}
|
||||
}
|
||||
|
||||
// discard point cache
|
||||
widget.points = undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* render to provided stack
|
||||
*/
|
||||
render(stack) {
|
||||
const mark = Date.now();
|
||||
if (this.slices)
|
||||
this.slices.forEach(slice => {
|
||||
for (let slice of this.slices || []) {
|
||||
if (slice.layers) {
|
||||
stack.add(slice.layers);
|
||||
}
|
||||
});
|
||||
}
|
||||
return Date.now() - mark;
|
||||
}
|
||||
|
||||
setEdges(set) {
|
||||
if (!(api && api.conf)) {
|
||||
if (!(this.api && this.api.conf)) {
|
||||
// missing api features in engine mode
|
||||
return;
|
||||
}
|
||||
|
|
@ -878,8 +776,8 @@ class Widget {
|
|||
|
||||
}
|
||||
if (set) {
|
||||
let dark = api.space.is_dark();
|
||||
let angle = api.conf.get().controller.edgeangle || 20;
|
||||
let dark = this.api.space.is_dark();
|
||||
let angle = this.api.conf.get().controller.edgeangle || 20;
|
||||
let edges = new THREE.EdgesGeometry(mesh.geometry, angle);
|
||||
let material = new THREE.LineBasicMaterial({ color: 0 });
|
||||
this.outline = new THREE.LineSegments(edges, material);
|
||||
|
|
@ -889,7 +787,7 @@ class Widget {
|
|||
}
|
||||
|
||||
setWireframe(set, color, opacity) {
|
||||
if (!(api && api.conf)) {
|
||||
if (!(this.api && this.api.conf)) {
|
||||
// missing api features in engine mode
|
||||
return;
|
||||
}
|
||||
|
|
@ -901,7 +799,7 @@ class Widget {
|
|||
this.wire = null;
|
||||
}
|
||||
if (set) {
|
||||
let dark = api.space.is_dark();
|
||||
let dark = this.api.space.is_dark();
|
||||
let mat = new THREE.MeshBasicMaterial({
|
||||
wireframe: true,
|
||||
color: dark ? 0xaaaaaa : 0,
|
||||
|
|
@ -911,7 +809,7 @@ class Widget {
|
|||
let wire = widget.wire = new THREE.Mesh(mesh.geometry.shallowClone(), mat);
|
||||
mesh.add(wire);
|
||||
}
|
||||
if (api.view.is_arrange()) {
|
||||
if (this.api.view.is_arrange()) {
|
||||
this.setColor(this.color);
|
||||
} else {
|
||||
this.setColor(0x888888,undefined,false);
|
||||
|
|
@ -1066,7 +964,4 @@ Widget.deleteFromState = function(id,ondone) {
|
|||
index().remove('ws-save-'+id, ondone);
|
||||
};
|
||||
|
||||
kiri.Widget = Widget;
|
||||
kiri.newWidget = newWidget;
|
||||
|
||||
});
|
||||
export { Widget, newWidget };
|
||||
|
|
@ -1,14 +1,9 @@
|
|||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||
|
||||
"use strict";
|
||||
|
||||
// use: load.file
|
||||
// use: kiri.selection
|
||||
// use: kiri.platform
|
||||
gapp.register("kiri.widgets", (root, exports) => {
|
||||
|
||||
const { data, kiri, moto, noop } = root;
|
||||
const { api, consts, utils, newWidget, Widget } = kiri;
|
||||
import { $ } from '../../moto/webui.js';
|
||||
import { api } from './api.js';
|
||||
import { load } from '../../load/file.js';
|
||||
import { Widget, newWidget } from './widget.js';
|
||||
|
||||
let WIDGETS = [];
|
||||
|
||||
|
|
@ -36,7 +31,7 @@ function rename(sel) {
|
|||
return;
|
||||
}
|
||||
let widget = widgets[0];
|
||||
kiri.ui.prompt("new widget name", widget.meta.file || "no name").then(newname => {
|
||||
api.uc.prompt("new widget name", widget.meta.file || "no name").then(newname => {
|
||||
if (newname) {
|
||||
widget.meta.file = newname;
|
||||
api.platform.changed();
|
||||
|
|
@ -89,7 +84,7 @@ function meshes() {
|
|||
|
||||
function opacity(value) {
|
||||
api.widgets.each(w => w.setOpacity(value));
|
||||
moto.space.update();
|
||||
api.space.update();
|
||||
}
|
||||
|
||||
function setIndexed(value) {
|
||||
|
|
@ -101,7 +96,7 @@ function setAxisIndex(value) {
|
|||
}
|
||||
|
||||
// extend API (api.widgets)
|
||||
const widgets = Object.assign(api.widgets, {
|
||||
export const widgets = {
|
||||
load: Widget.loadFromCatalog,
|
||||
new: newWidget,
|
||||
map,
|
||||
|
|
@ -120,6 +115,4 @@ const widgets = Object.assign(api.widgets, {
|
|||
each(fn) { WIDGETS.slice().forEach(widget => fn(widget)) },
|
||||
for(fn) { widgets.each(fn) },
|
||||
forid(id) { return WIDGETS.filter(w => w.id === id)[0] }
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
22
src/kiri/dev/cam/Any.Generic.Grbl.json
Normal file
22
src/kiri/dev/cam/Any.Generic.Grbl.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 400
|
||||
}
|
||||
}
|
||||
24
src/kiri/dev/cam/Any.Generic.LinuxCNC.json
Normal file
24
src/kiri/dev/cam/Any.Generic.LinuxCNC.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext": "ngc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"M03 S20000 ; spindle on"
|
||||
],
|
||||
"post":[
|
||||
"M05 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 400
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Any.Generic.TinyG.json
Normal file
22
src/kiri/dev/cam/Any.Generic.TinyG.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 400
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Carbide3D.Nomad.883Pro.json
Normal file
22
src/kiri/dev/cam/Carbide3D.Nomad.883Pro.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 200,
|
||||
"bed_depth": 200
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Carbide3D.Shapeoko.3.json
Normal file
22
src/kiri/dev/cam/Carbide3D.Shapeoko.3.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 400
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Carbide3D.Shapeoko.XL.json
Normal file
22
src/kiri/dev/cam/Carbide3D.Shapeoko.XL.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 830,
|
||||
"bed_depth": 400
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Carbide3D.Shapeoko.XXL.json
Normal file
22
src/kiri/dev/cam/Carbide3D.Shapeoko.XXL.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 830,
|
||||
"bed_depth": 830
|
||||
}
|
||||
}
|
||||
24
src/kiri/dev/cam/Genmitsu.3018.json
Normal file
24
src/kiri/dev/cam/Genmitsu.3018.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle": [
|
||||
"M3 S{speed}"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 300,
|
||||
"bed_depth": 180,
|
||||
"spindle_max": 1000
|
||||
}
|
||||
}
|
||||
24
src/kiri/dev/cam/Genmitsu.PROVerXL.4030.json
Normal file
24
src/kiri/dev/cam/Genmitsu.PROVerXL.4030.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle": [
|
||||
"M3 S{speed}"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 300,
|
||||
"spindle_max": 1000
|
||||
}
|
||||
}
|
||||
24
src/kiri/dev/cam/Inventables.Carvey.Any.json
Normal file
24
src/kiri/dev/cam/Inventables.Carvey.Any.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"origin_center": false,
|
||||
"spindle_max": 12000,
|
||||
"bed_width": 290,
|
||||
"bed_depth": 200
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Inventables.XCarve.1000mm.json
Normal file
22
src/kiri/dev/cam/Inventables.XCarve.1000mm.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 1000,
|
||||
"bed_depth": 1000
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Inventables.XCarve.500mm.json
Normal file
22
src/kiri/dev/cam/Inventables.XCarve.500mm.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 500,
|
||||
"bed_depth": 500
|
||||
}
|
||||
}
|
||||
32
src/kiri/dev/cam/Langmuir.MR-1.json
Normal file
32
src/kiri/dev/cam/Langmuir.MR-1.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"mode": "CAM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 500,
|
||||
"bedDepth": 500,
|
||||
"maxHeight": 150,
|
||||
"originCenter": false,
|
||||
"spindleMax": 8000,
|
||||
"gcodePre": [
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"M03 S20000 ; spindle on"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M05 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"gcodeDwell": [
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"gcodeSpindle": [],
|
||||
"gcodeChange": [],
|
||||
"gcodeFExt": "nc",
|
||||
"gcodeSpace": true,
|
||||
"gcodeStrip": true,
|
||||
"new": false,
|
||||
"deviceName": "Langmuir MR-1",
|
||||
"imageURL": "",
|
||||
"useLaser": false,
|
||||
"profiles": []
|
||||
}
|
||||
179
src/kiri/dev/cam/Makera.Carvera.json
Normal file
179
src/kiri/dev/cam/Makera.Carvera.json
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
{
|
||||
"mode": "CAM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 360,
|
||||
"bedDepth": 240,
|
||||
"originCenter": false,
|
||||
"spindleMax": 20000,
|
||||
"gcodePre": [
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G0 F2000 ; default rapid move speed",
|
||||
"G1 F1000 ; default cutting speed"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M5 ; spindle off",
|
||||
"G0 F4000 ; default rapid move speed",
|
||||
"G1 F1000 ; default cutting speed",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"gcodeDwell": [
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"gcodeSpindle": [
|
||||
"M3 S{spindle}"
|
||||
],
|
||||
"gcodeChange": [
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"gcodeFExt": "nc",
|
||||
"gcodeSpace": true,
|
||||
"gcodeStrip": false,
|
||||
"new": false,
|
||||
"deviceName": "My Makera Carvera",
|
||||
"maxHeight": 150,
|
||||
"useLaser": true,
|
||||
"imageURL": "",
|
||||
"bedBelt": false,
|
||||
"bedRound": false,
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "default",
|
||||
"camLevelTool": 1000,
|
||||
"camLevelSpindle": 1000,
|
||||
"camLevelOver": 0,
|
||||
"camLevelSpeed": 1000,
|
||||
"camLevelDown": 0,
|
||||
"camRoughTool": 1666284436865,
|
||||
"camRoughSpindle": 20000,
|
||||
"camRoughDown": 3,
|
||||
"camRoughOver": 0.25,
|
||||
"camRoughSpeed": 1000,
|
||||
"camRoughPlunge": 250,
|
||||
"camRoughStock": 0,
|
||||
"camRoughVoid": false,
|
||||
"camRoughFlat": false,
|
||||
"camRoughTop": false,
|
||||
"camRoughIn": false,
|
||||
"camRoughOn": true,
|
||||
"camOutlineTool": 1665437735549,
|
||||
"camOutlineSpindle": 0,
|
||||
"camOutlineDown": 1,
|
||||
"camOutlineOver": 0.4,
|
||||
"camOutlineSpeed": 2000,
|
||||
"camOutlinePlunge": 500,
|
||||
"camOutlineWide": false,
|
||||
"camOutlineDogbone": false,
|
||||
"camOutlineOmitThru": false,
|
||||
"camOutlineOut": false,
|
||||
"camOutlineIn": false,
|
||||
"camOutlineOn": true,
|
||||
"camContourTool": 1666284436865,
|
||||
"camContourSpindle": 20000,
|
||||
"camContourOver": 0.15,
|
||||
"camContourSpeed": 1500,
|
||||
"camContourAngle": 85,
|
||||
"camContourCurves": true,
|
||||
"camContourIn": false,
|
||||
"camContourXOn": true,
|
||||
"camContourYOn": true,
|
||||
"camTraceTool": 1002,
|
||||
"camTraceSpindle": 1000,
|
||||
"camTraceType": "clear",
|
||||
"camTraceOver": 0.5,
|
||||
"camTraceDown": 1,
|
||||
"camTraceSpeed": 750,
|
||||
"camTracePlunge": 200,
|
||||
"camTraceLines": false,
|
||||
"camDrillTool": 1000,
|
||||
"camDrillSpindle": 1000,
|
||||
"camDrillDownSpeed": 250,
|
||||
"camDrillDown": 2,
|
||||
"camDrillDwell": 250,
|
||||
"camDrillLift": 2,
|
||||
"camDrillingOn": false,
|
||||
"camRegisterSpeed": 1000,
|
||||
"camFlipAxis": "X",
|
||||
"camFlipOther": "",
|
||||
"camTabsWidth": 20,
|
||||
"camTabsHeight": 5,
|
||||
"camTabsDepth": 10,
|
||||
"camTabsMidline": false,
|
||||
"camDepthFirst": true,
|
||||
"camEaseDown": false,
|
||||
"camOriginTop": true,
|
||||
"camZAnchor": "middle",
|
||||
"camZOffset": 0,
|
||||
"camZBottom": 0,
|
||||
"camZClearance": 1,
|
||||
"camZThru": 0,
|
||||
"camFastFeed": 3000,
|
||||
"camFastFeedZ": 500,
|
||||
"camTolerance": 0,
|
||||
"camStockX": 0,
|
||||
"camStockY": 0,
|
||||
"camStockZ": 0,
|
||||
"camStockOffset": true,
|
||||
"camStockClipTo": false,
|
||||
"camStockOn": true,
|
||||
"camConventional": false,
|
||||
"camOriginCenter": false,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"camExpertFast": false,
|
||||
"ops": [],
|
||||
"op2": [
|
||||
{
|
||||
"type": "flip",
|
||||
"axis": "X",
|
||||
"invert": true,
|
||||
"disabled": false
|
||||
}
|
||||
],
|
||||
"camTrueShadow": false,
|
||||
"camDrillMark": true,
|
||||
"camPocketSpindle": 10000,
|
||||
"camPocketTool": 1001,
|
||||
"camPocketOver": 0.25,
|
||||
"camPocketDown": 5,
|
||||
"camPocketSpeed": 2000,
|
||||
"camPocketPlunge": 500,
|
||||
"camPocketExpand": 0,
|
||||
"camContourBottom": false,
|
||||
"camTraceBottom": false,
|
||||
"cmaPocketOutline": false,
|
||||
"camRegisterThru": 5,
|
||||
"camFlatness": 0.001,
|
||||
"camContourBridge": 10,
|
||||
"camForceZMax": false,
|
||||
"camPocketSmooth": 1,
|
||||
"camPocketContour": true,
|
||||
"cmaPocketRefine": 20,
|
||||
"camPocketEngrave": false,
|
||||
"camLaserEnable": [
|
||||
"M321"
|
||||
],
|
||||
"camLaserDisable": "M322",
|
||||
"camLaserOn": [
|
||||
"M3"
|
||||
],
|
||||
"camLaserOff": [
|
||||
"M5"
|
||||
],
|
||||
"camLaserSpeed": 100,
|
||||
"camLaserPower": 1,
|
||||
"camLaserAdaptive": true,
|
||||
"camLaserAdaptMod": true,
|
||||
"camLaserFlatten": false,
|
||||
"camLaserFlatZ": 0,
|
||||
"camLaserPowerMin": 1,
|
||||
"camLaserPowerMax": 0.1,
|
||||
"camLaserZMin": 0,
|
||||
"camLaserZMax": 0,
|
||||
"camOutlineTop": false,
|
||||
"X": "X"
|
||||
}
|
||||
]
|
||||
}
|
||||
30
src/kiri/dev/cam/PrintNC.GrblHAL.json
Normal file
30
src/kiri/dev/cam/PrintNC.GrblHAL.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M9 ; coolant off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle":[
|
||||
"M3 S{speed}"
|
||||
],
|
||||
"settings": {
|
||||
"origin_center":false,
|
||||
"bed_width": 950,
|
||||
"bed_depth": 600,
|
||||
"build_height": 180,
|
||||
"spindle_max": 24000
|
||||
}
|
||||
}
|
||||
30
src/kiri/dev/cam/RatRig.StrongHold.ONE.750x750mm.json
Normal file
30
src/kiri/dev/cam/RatRig.StrongHold.ONE.750x750mm.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G94 ; set unit to mm/minute",
|
||||
"G0 F3000 ; default rapid move speed",
|
||||
"; M3 S15000 ; Uncomment if you want to turn the spindle on by default"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle":[
|
||||
"M3 S{speed}"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 744,
|
||||
"bed_depth": 750,
|
||||
"build_height": 90
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Roland.MDX-50.json
Normal file
22
src/kiri/dev/cam/Roland.MDX-50.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "rml",
|
||||
"token-space": "",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"PA;PA;VS4;!VZ4;!PZ0,80;!MC1;"
|
||||
],
|
||||
"post":[
|
||||
"PA;PA;!PZ0,2420;PU0,6096;!MC0;"
|
||||
],
|
||||
"dwell":[
|
||||
"W{time};"
|
||||
],
|
||||
"spindle": [
|
||||
"!RC{speed};"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 400,
|
||||
"bed_depth": 305,
|
||||
"spindle_max": 10000
|
||||
}
|
||||
}
|
||||
45
src/kiri/dev/cam/ShopBot.Basic.json
Normal file
45
src/kiri/dev/cam/ShopBot.Basic.json
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"mode": "CAM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 2400,
|
||||
"bedDepth": 1200,
|
||||
"maxHeight": 150,
|
||||
"originCenter": false,
|
||||
"spindleMax": 0,
|
||||
"gcodePre": [
|
||||
"'UNITS:MM",
|
||||
"'",
|
||||
"CN, 90 'Set program to absolute coordinate mode",
|
||||
"&Tool =1 'Tool number to change to",
|
||||
"C9 'Change tool",
|
||||
"TR,4000 'Set spindle RPM",
|
||||
"C6 'Spindle on",
|
||||
"PAUSE 2",
|
||||
"'"
|
||||
],
|
||||
"gcodePost": [
|
||||
"'Turning router OFF",
|
||||
"C7",
|
||||
"END",
|
||||
"'",
|
||||
"UNIT_ERROR:",
|
||||
"CN, 91 'Run file explaining unit error",
|
||||
"END"
|
||||
],
|
||||
"gcodeDwell": [
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"gcodeSpindle": [],
|
||||
"gcodeChange": [
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"gcodeFExt": ".sbp",
|
||||
"gcodeSpace": true,
|
||||
"gcodeStrip": true,
|
||||
"new": false,
|
||||
"deviceName": "ShopBot.Basic",
|
||||
"imageURL": "",
|
||||
"useLaser": false,
|
||||
"profiles": []
|
||||
}
|
||||
30
src/kiri/dev/cam/Sienci.AltMill.json
Normal file
30
src/kiri/dev/cam/Sienci.AltMill.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G0 F15000 ; default rapid move speed",
|
||||
"G1 F4000 ; default cutting speed"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M9 ; coolant off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle":[
|
||||
"M3 S{speed}"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 1260,
|
||||
"bed_depth": 1248,
|
||||
"build_height": 170
|
||||
}
|
||||
}
|
||||
27
src/kiri/dev/cam/Sienci.LongMill.MK2.json
Normal file
27
src/kiri/dev/cam/Sienci.LongMill.MK2.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G0 F5500 ; default rapid move speed",
|
||||
"G1 F2000 ; default cutting speed"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M9 ; coolant off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 810,
|
||||
"bed_depth": 855,
|
||||
"build_height": 120
|
||||
}
|
||||
}
|
||||
30
src/kiri/dev/cam/Sienci.LongMill.json
Normal file
30
src/kiri/dev/cam/Sienci.LongMill.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G0 F4000 ; default rapid move speed",
|
||||
"G1 F1500 ; default cutting speed"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M9 ; coolant off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"image_url": "/decal/longmill.png",
|
||||
"image_scale": 200,
|
||||
"image_anchor": 8,
|
||||
"bed_width": 770,
|
||||
"bed_depth": 820,
|
||||
"build_height": 110
|
||||
}
|
||||
}
|
||||
27
src/kiri/dev/cam/Sienci.Mill.One.json
Normal file
27
src/kiri/dev/cam/Sienci.Mill.One.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)",
|
||||
"G0 F1800 ; default rapid move speed",
|
||||
"G1 F800 ; default cutting speed"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; spindle off",
|
||||
"M9 ; coolant off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 235,
|
||||
"bed_depth": 185,
|
||||
"build_height": 100
|
||||
}
|
||||
}
|
||||
27
src/kiri/dev/cam/Snapmaker.Original.json
Normal file
27
src/kiri/dev/cam/Snapmaker.Original.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"file-ext": "gcode",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M5 ; complete moves, stop spindle",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"spindle":[
|
||||
"M3 P{spindle} ; uniquely uses percentage not RPM"
|
||||
],
|
||||
"settings": {
|
||||
"origin_center": false,
|
||||
"bed_width": 90,
|
||||
"bed_depth": 90,
|
||||
"build_height": 50,
|
||||
"spindle_max": 100
|
||||
}
|
||||
}
|
||||
22
src/kiri/dev/cam/Techno.Davinci.CNC.json
Normal file
22
src/kiri/dev/cam/Techno.Davinci.CNC.json
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"file-ext": "ncd",
|
||||
"token-space": " ",
|
||||
"strip-comments": true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"bed_width": 250,
|
||||
"bed_depth": 300
|
||||
}
|
||||
}
|
||||
32
src/kiri/dev/cam/Tormach.24R.json
Normal file
32
src/kiri/dev/cam/Tormach.24R.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"file-ext": "nc",
|
||||
"token-space": " ",
|
||||
"strip-comments": false,
|
||||
"pre":[
|
||||
"G20 ; set units to inches (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M05 ; spindle off",
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M05 ; spindle off",
|
||||
"M6 T{tool} ; change tool to '{tool_name}'",
|
||||
"G37; get tool offset with ETS"
|
||||
],
|
||||
"spindle": [
|
||||
"M3 S{speed} ; spindle on at {spindle} rpm"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings": {
|
||||
"origin_center":false,
|
||||
"bed_width": 678.18,
|
||||
"bed_depth": 1524,
|
||||
"build_height":150,
|
||||
"spindle_max": 24000
|
||||
},
|
||||
"deviceName": "Tormach 24R with ETS"
|
||||
}
|
||||
24
src/kiri/dev/cam/V1Engineering.Lowrider3.json
Normal file
24
src/kiri/dev/cam/V1Engineering.Lowrider3.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext":"nc",
|
||||
"token-space":" ",
|
||||
"strip-comments":true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings":{
|
||||
"origin_center":false,
|
||||
"bed_width":1220,
|
||||
"bed_depth":2400,
|
||||
"build_height":80
|
||||
}
|
||||
}
|
||||
24
src/kiri/dev/cam/V1Engineering.MPCNC.json
Normal file
24
src/kiri/dev/cam/V1Engineering.MPCNC.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"file-ext":"nc",
|
||||
"token-space":" ",
|
||||
"strip-comments":true,
|
||||
"pre":[
|
||||
"G21 ; set units to MM (required)",
|
||||
"G90 ; absolute position mode (required)"
|
||||
],
|
||||
"post":[
|
||||
"M30 ; program end"
|
||||
],
|
||||
"tool-change":[
|
||||
"M6 T{tool} ; change tool to '{tool_name}'"
|
||||
],
|
||||
"dwell":[
|
||||
"G4 P{time} ; dwell for {time}ms"
|
||||
],
|
||||
"settings":{
|
||||
"origin_center":false,
|
||||
"bed_width":450,
|
||||
"bed_depth":330,
|
||||
"build_height":81
|
||||
}
|
||||
}
|
||||
21
src/kiri/dev/drag/Any.Generic.DragKnife.json
Normal file
21
src/kiri/dev/drag/Any.Generic.DragKnife.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"file-ext": "gcode",
|
||||
"token-space": " ",
|
||||
"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,
|
||||
"bed_depth": 300
|
||||
}
|
||||
}
|
||||
46
src/kiri/dev/fdm/Any.Generic.Klipper.json
Normal file
46
src/kiri/dev/fdm/Any.Generic.Klipper.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 ; home axes",
|
||||
"G92 X0 Y0 Z0 E0 ; reset all axes positions",
|
||||
"G1 X0 Y0 Z0.25 F180 ; move xy to 0,0 and z 0.25mm over bed",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 E15 F200 ; purge 15mm from extruder",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 F225 ; set feed speed"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G1 Z{z_max} F1200 ; drop bed",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
},{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 30,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": false
|
||||
}
|
||||
}
|
||||
46
src/kiri/dev/fdm/Any.Generic.Marlin.json
Normal file
46
src/kiri/dev/fdm/Any.Generic.Marlin.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 ; home axes",
|
||||
"G92 X0 Y0 Z0 E0 ; reset all axes positions",
|
||||
"G1 X0 Y0 Z0.25 F180 ; move xy to 0,0 and z 0.25mm over bed",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 E15 F200 ; purge 15mm from extruder",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 F225 ; set feed speed"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G1 Z{z_max} F1200 ; drop bed",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
},{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 30,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": false
|
||||
}
|
||||
}
|
||||
55
src/kiri/dev/fdm/Anycubic.Chiron.json
Normal file
55
src/kiri/dev/fdm/Anycubic.Chiron.json
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"pre":[
|
||||
"M107 ; turn off fan",
|
||||
"M140 S{bed_temp} T{tool}",
|
||||
"M105 ; update temperature",
|
||||
"M190 S{bed_temp} T{tool}",
|
||||
"M104 S{temp} T{tool}",
|
||||
"M105 ; update temperature",
|
||||
"M109 S{temp} T{tool}",
|
||||
"G21 ; set metric values",
|
||||
"G91 ; relative positioning",
|
||||
"G1 F1000 Z5 ; lift 5mm before homing",
|
||||
"G90 ; set absolute positioning",
|
||||
"M82 ; set extruder to absolute mode",
|
||||
"G28 X0 Y0 ; home X & Y",
|
||||
"G28 Z0 ; home Z",
|
||||
"G1 Z15 F1000 ; move the platform down 15mm",
|
||||
"G1 F4000 ; set default feed rate",
|
||||
"G92 E0 ; zero extruder",
|
||||
";G5 ; uncomment to enable resume after power failure",
|
||||
"M117 Printing..."
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off fan",
|
||||
"M104 S0 T{tool} ; turn off extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G91 ; relative positioning",
|
||||
"G1 E-2 F300 ; retract filament",
|
||||
"G1 Z0.5 E-5 ; retract filament, move z up",
|
||||
"G90 ; absolute positioning",
|
||||
"G1 X0 Y400 ; move to best position for part removal",
|
||||
"M82 ; absolute extrusion mode",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_circle": false,
|
||||
"bed_width": 400,
|
||||
"bed_depth": 400,
|
||||
"build_height": 450
|
||||
}
|
||||
}
|
||||
184
src/kiri/dev/fdm/Anycubic.Kobra.2.json
Normal file
184
src/kiri/dev/fdm/Anycubic.Kobra.2.json
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
{
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 200,
|
||||
"bedDepth": 200,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"maxHeight": 250,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [],
|
||||
"gcodePre": [
|
||||
"M201 X2500 Y2500 Z800 E2500 ; sets maximum accelerations, mm/sec^2",
|
||||
"M203 X250 Y250 Z8 E80 ; sets maximum feedrates, mm / sec",
|
||||
"M204 P2500 R2500 T2500 ; sets acceleration (P, T) and retract acceleration (R), mm/sec^2",
|
||||
"M205 X8.00 Y8.00 Z0.40 E8.00 ; sets the jerk limits, mm/sec",
|
||||
"M205 S0 T0 ; sets the minimum extruding and travel feed rate, mm/sec",
|
||||
"M107 ; fan off",
|
||||
"M190 S{bed_temp} ; set bed temperature and wait for it to be reached",
|
||||
"M104 S{temp} ; set temperature",
|
||||
"M109 S{temp} ; set temperature and wait for it to be reached",
|
||||
"G21 ; set units to millimeters",
|
||||
"G90 ; use absolute coordinates",
|
||||
"M82 ; use absolute distances for extrusion",
|
||||
"G92 E0",
|
||||
"G28 ; home all axes\\nG1 Z5 F5000 ; lift nozzle\\n",
|
||||
"G1 Z0.24 ; lift nozzle a bit ",
|
||||
"G92 E0 ; zero the extruded length ",
|
||||
"G1 X5 Y0 F3000",
|
||||
"G1 X50 Y0 E60 F500 ; Extrude 25mm of filament in a 5cm line. ",
|
||||
"G92 E0 ; zero the extruded length again ",
|
||||
"G1 E-4.5 F4800 ; Retract a little ",
|
||||
"G92 E0",
|
||||
"G1 X120 F4000 ; Quickly wipe away from the filament line`"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M104 S0 ; Extruder off ",
|
||||
"M140 S0 ; Heatbed off ",
|
||||
"M107 ; Fan off ",
|
||||
"G91 ; relative positioning ",
|
||||
"G1 E-2 F3000 ",
|
||||
"G1 Z+0.3 F3000 ; lift print head ",
|
||||
"G28 X0 F3000",
|
||||
"M84 ; disable stepper motors",
|
||||
"M117 Cooling down...",
|
||||
"M104 S0 ; turn off extruder",
|
||||
"M107 ; Fan off",
|
||||
"M84 ; disable motors",
|
||||
"G91 ; relative positioning",
|
||||
"G1 E-1 F300 ; retract the filament a bit before lifting the nozzle, to release some of the pressure",
|
||||
"G1 Z+0.5 E-5 ;X-20 Y-20 F240 ; move Z up a bit and retract filament even more",
|
||||
"G28 X0 ; move X to min endstops, so the head is out of the way",
|
||||
"G90 ; Absolute positionning",
|
||||
"G1 Y200 F3000 ; Present print",
|
||||
"M84 ; steppers off",
|
||||
"M300 P300 S4000",
|
||||
"M117 Finished."
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"deviceName": "Anycubic Kobra 2",
|
||||
"fwRetract": false,
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "6c99ea036da",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
},
|
||||
"new": false,
|
||||
"imageURL": "",
|
||||
"filamentSource": "direct",
|
||||
"deviceZMax": 0,
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "default",
|
||||
"sliceHeight": 0.25,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceLineWidth": 0,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.25,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceFillType": "hex",
|
||||
"sliceSupportDensity": 0.1,
|
||||
"sliceSupportOffset": 1,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 5,
|
||||
"sliceSupportArea": 0.1,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportGrow": 0,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstSliceHeight": 0.25,
|
||||
"firstLayerRate": 30,
|
||||
"firstLayerFillRate": 35,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerNozzleTemp": 0,
|
||||
"firstLayerBedTemp": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputDraftShield": false,
|
||||
"outputTemp": 200,
|
||||
"outputBedTemp": 60,
|
||||
"outputFeedrate": 50,
|
||||
"outputFinishrate": 50,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.25,
|
||||
"outputFillMult": 1.25,
|
||||
"outputSparseMult": 1.25,
|
||||
"outputFanLayer": 1,
|
||||
"outputFanSpeed": 255,
|
||||
"outputRetractDist": 1.5,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 20,
|
||||
"outputBrimCount": 2,
|
||||
"outputBrimOffset": 2,
|
||||
"outputShortPoly": 100,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputAvoidGaps": true,
|
||||
"outputAlternating": false,
|
||||
"outputLayerRetract": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceMinHeight": 0,
|
||||
"sliceAdaptive": false,
|
||||
"zHopDistance": 0.2,
|
||||
"arcTolerance": 0,
|
||||
"antiBacklash": 1,
|
||||
"ranges": []
|
||||
}
|
||||
]
|
||||
}
|
||||
79
src/kiri/dev/fdm/Anycubic.Kobra.json
Normal file
79
src/kiri/dev/fdm/Anycubic.Kobra.json
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
{
|
||||
"noclone": false,
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 222,
|
||||
"bedDepth": 222,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"resolutionX": 1600,
|
||||
"resolutionY": 900,
|
||||
"maxHeight": 222,
|
||||
"originCenter": false,
|
||||
"extrudeAbs": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [],
|
||||
"gcodePre": [
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S{temp} T0 ; set extruder temperature",
|
||||
"M140 S{bed_temp} T0 ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G28 ; home axes",
|
||||
"G1 F3000 ; set default move speed",
|
||||
"G1 Z1 F6000 ; pause above the bed",
|
||||
"M190 S{bed_temp} T0 ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T0 ; wait for extruder to reach target temp",
|
||||
"G92 E0 ; set extruder position to 0"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T0 ; turn off extruder",
|
||||
"M140 S0 T0 ; turn off bed",
|
||||
"G91 ; relative movement",
|
||||
"G1 Z10 F1200 ; drop bed 10mm",
|
||||
"G90 ; absolute positioning",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"gcodeExt": [],
|
||||
"gcodeInt": [],
|
||||
"gcodeProc": "",
|
||||
"gcodePause": [],
|
||||
"gcodeDwell": [],
|
||||
"gcodeSpindle": [],
|
||||
"gcodeChange": [],
|
||||
"gcodeFExt": "gcode",
|
||||
"gcodeSpace": true,
|
||||
"gcodeStrip": false,
|
||||
"gcodeLaserOn": [],
|
||||
"gcodeLaserOff": [],
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"deviceName": "Anycubic Kobra",
|
||||
"fwRetract": false,
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "6c99ea036da",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
56
src/kiri/dev/fdm/Anycubic.Predator.json
Normal file
56
src/kiri/dev/fdm/Anycubic.Predator.json
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"pre":[
|
||||
"M140 S{bed_temp} T{tool}",
|
||||
"M105 ; update temperature",
|
||||
"M190 S{bed_temp} T{tool}",
|
||||
"M104 S{temp} T{tool}",
|
||||
"M105 ; update temperature",
|
||||
"M109 S{temp} T{tool}",
|
||||
"M82 ; set extruder to absolute mode",
|
||||
"G21 ; set metric values",
|
||||
"G90 ; set absolute positioning",
|
||||
"M82 ; set extruder to absolute mode",
|
||||
"M107 ; turn off fan",
|
||||
"G28 ; home",
|
||||
"G1 Z15 F1000 ; move the platform down 15mm",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G1 F200 E3 ; extrude 3mm of feed stock",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G1 F4000 ; set default feed rate",
|
||||
"G92 E0 ; zero extruder",
|
||||
";G5 ; uncomment to enable resume after power failure",
|
||||
"M117 Printing..."
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off fan",
|
||||
"M104 S0 T{tool} ; turn off extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G91 ; relative positioning",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G1 E-2 F300 ; retract filament",
|
||||
"G1 Z0.5 E-5 ; retract filament, move z up",
|
||||
"G28 ; home all axes",
|
||||
"G90 ; absolute positioning",
|
||||
"M82 ; absolute extrusion mode",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": true,
|
||||
"extrude_abs": true,
|
||||
"bed_circle": true,
|
||||
"bed_width": 370,
|
||||
"bed_depth": 370,
|
||||
"build_height": 455
|
||||
}
|
||||
}
|
||||
51
src/kiri/dev/fdm/Anycubic.i3.Mega.json
Normal file
51
src/kiri/dev/fdm/Anycubic.i3.Mega.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"pre":[
|
||||
"M105 ; update temperature",
|
||||
"M104 S{temp} T{tool}",
|
||||
"M140 S{bed_temp} T{tool}",
|
||||
"M109 S{temp} T{tool}",
|
||||
"M190 S{bed_temp} T{tool}",
|
||||
"M105 ; update temperature",
|
||||
"G21 ; set metric values",
|
||||
"G90 ; set absolute positioning",
|
||||
"M82 ; set extruder to absolute mode",
|
||||
"M107 ; turn off fan",
|
||||
"G28 X0 Y0 ; move X/Y to min",
|
||||
"G28 Z0 ; move Z to min",
|
||||
"G1 Z15.0 F100 ; move the platform down 15mm",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G1 F200 E3 ; extrude 3mm of feed stock",
|
||||
"G92 E0 ; zero extruder",
|
||||
"G1 F100 ; set default feed rate",
|
||||
"G0 Y20 ; wipe move to Y20",
|
||||
"G92 E0 ; zero extruder",
|
||||
";G5 ; uncomment to enable resume after power failure",
|
||||
"M117 Printing..."
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off fan",
|
||||
"M104 S0 T{tool} ; turn off extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G1 Z{z_max} F1200 ; drop bed",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 210,
|
||||
"bed_depth": 210,
|
||||
"build_height": 205
|
||||
}
|
||||
}
|
||||
27
src/kiri/dev/fdm/Atom.v2.json
Normal file
27
src/kiri/dev/fdm/Atom.v2.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} ; set extruder temperature",
|
||||
"M140 S{bed_temp} ; set bed temperature",
|
||||
"G28 ; Home",
|
||||
"G1 F5000 Z50 ; lift nozzle",
|
||||
"G0 X0 Y-100 Z50 ; parking",
|
||||
"G0 Z20 ; parking",
|
||||
"G92 E0 ; zero the extruded length",
|
||||
"G1 F200 E3 ; extrude 3mm of feed stock"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 ; turn off right extruder",
|
||||
"M140 S0 ; turn off bed"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": true,
|
||||
"bed_width": 210,
|
||||
"bed_depth": 210,
|
||||
"bed_circle": true,
|
||||
"build_height": 320
|
||||
}
|
||||
}
|
||||
816
src/kiri/dev/fdm/Bambu.A1.json
Normal file
816
src/kiri/dev/fdm/Bambu.A1.json
Normal file
|
|
@ -0,0 +1,816 @@
|
|||
{
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 256,
|
||||
"bedDepth": 256,
|
||||
"bedRound": false,
|
||||
"maxHeight": 256,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 P1 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M73 P{progress}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
"; ===== CHANGE_LAYER ==============================",
|
||||
"; layer num/total_layer_count: {layer}/{layers}",
|
||||
"M622.1 S1 ; for prev firware, default turned on",
|
||||
"M1002 judge_flag timelapse_record_flag",
|
||||
"M622 J1",
|
||||
"M971 S11 C10 O0 ; timelapse without wipe tower",
|
||||
"M623",
|
||||
"M73 L{layer}",
|
||||
"M991 S0 P{layer-1} ; notify layer change",
|
||||
";; IF { layer == 0 }",
|
||||
"M204 S500 ; reduce first layer acceleration",
|
||||
";; ELSE",
|
||||
"M204 S5000 ; faster acceleration",
|
||||
";; END"
|
||||
],
|
||||
"gcodePre": [
|
||||
"; total layer number: {layers}",
|
||||
"; model label id: {model_labels}",
|
||||
";; PREAMBLE",
|
||||
";; DEFINE BAMBU-AMS 0,1,2,3",
|
||||
"; ===== HEADER ====================================",
|
||||
"M73 P0 R24 ; Initial progress and time remaining",
|
||||
"M201 X12000 Y12000 Z1500 E5000 ; Set max acceleration",
|
||||
"M203 X500 Y500 Z30 E30 ; Set max feed rates",
|
||||
"M204 P12000 R5000 T12000 ; Set acceleration",
|
||||
"M205 X9.00 Y9.00 Z3.00 E2.50 ; Set advanced settings",
|
||||
"M106 S0 ; Set part fan speed to 0",
|
||||
"M106 P2 S0 ; Turn off aux fan",
|
||||
";===== Machine: A1 ================================",
|
||||
"G392 S0 ; Disable clog detection",
|
||||
"M9833.2 ; Custom command (unknown function)",
|
||||
";===== Start Heating ==============================",
|
||||
"M1002 gcode_claim_action : 2",
|
||||
"M1002 set_filament_type:PLA ; Set filament type to PLA",
|
||||
"M104 S140 ; Set nozzle temperature",
|
||||
"M140 S65 ; Set bed temperature",
|
||||
";===== Startup Sound ==============================",
|
||||
"M17 ; Enable steppers",
|
||||
"M400 S1 ; Wait for movements to complete",
|
||||
"M1006 S1 ; Start printer sound",
|
||||
"M1006 A0 B10 L100 C37 D10 M60 E37 F10 N60",
|
||||
"M1006 A0 B10 L100 C41 D10 M60 E41 F10 N60",
|
||||
"M1006 A0 B10 L100 C44 D10 M60 E44 F10 N60",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N60",
|
||||
"M1006 A43 B10 L100 C46 D10 M70 E39 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N80",
|
||||
"M1006 A0 B10 L100 C43 D10 M60 E39 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N80",
|
||||
"M1006 A0 B10 L100 C41 D10 M80 E41 F10 N80",
|
||||
"M1006 A0 B10 L100 C44 D10 M80 E44 F10 N80",
|
||||
"M1006 A0 B10 L100 C49 D10 M80 E49 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M80 E0 F10 N80",
|
||||
"M1006 A44 B10 L100 C48 D10 M60 E39 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N80",
|
||||
"M1006 A0 B10 L100 C44 D10 M80 E39 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N80",
|
||||
"M1006 A43 B10 L100 C46 D10 M60 E39 F10 N80",
|
||||
"M1006 W ; Play audio",
|
||||
"M18 ; Disable steppers",
|
||||
";===== Avoid End Stop =============================",
|
||||
"G91 ; Set relative positioning",
|
||||
"G380 S2 Z40 F1200 ; Move Z up to 40mm",
|
||||
"G380 S3 Z-15 F1200 ; Move Z down to -15mm",
|
||||
"G90 ; Set absolute positioning",
|
||||
";===== Reset Machine Status =======================",
|
||||
"M204 S6000 ; Set acceleration to 6000 mm/s^2",
|
||||
"M630 S0 P0 ; Custom command (unknown function)",
|
||||
"G91 ; Set relative positioning",
|
||||
"M17 Z0.3 ; Lower Z motor current",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M17 X0.65 Y1.2 Z0.6 ; Reset motor currents",
|
||||
"M960 S5 P1 ; Turn on logo lamp",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M220 S100 ; Reset feedrate",
|
||||
"M221 S100 ; Reset flowrate",
|
||||
"M73.2 R1.0 ; Reset estimated time remaining",
|
||||
";===== Enable Noise Reduction =====================",
|
||||
"M982.2 S1 ; Turn on noise reduction",
|
||||
";===== Home XY & Prepare Print ====================",
|
||||
"M1002 gcode_claim_action : 13",
|
||||
"G28 X ; Home X-axis",
|
||||
"G91 ; Set relative positioning",
|
||||
"G1 Z5 F1200 ; Move Z up by 5mm",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G0 X128 F30000 ; Move X to 128mm",
|
||||
"G0 Y254 F3000 ; Move Y to 254mm",
|
||||
"G91 ; Set relative positioning",
|
||||
"G1 Z-5 F1200 ; Move Z down by 5mm",
|
||||
"M109 S25 H140 ; Set tool preheat temperature",
|
||||
"M17 E0.3 ; Set extruder motor current",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"G1 E10 F1200 ; Extrude 10mm",
|
||||
"G1 E-0.5 F30 ; Retract 0.5mm",
|
||||
"M17 D ; Restore motor current",
|
||||
";===== Home Z with Low Precision ==================",
|
||||
"G28 Z P0 T140 ; Home Z with low precision",
|
||||
"M104 S220 ; Set nozzle temperature",
|
||||
";===== Build Plate Detection ======================",
|
||||
"M1002 judge_flag build_plate_detect_flag",
|
||||
"M622 S1",
|
||||
" G39.4 ; Custom build plate detection command",
|
||||
" G90 ; Set absolute positioning",
|
||||
" G1 Z5 F1200 ; Move Z up by 5mm",
|
||||
"M623",
|
||||
";===== Prepare Print Temperature & Material =======",
|
||||
"M1002 gcode_claim_action : 24",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M211 X0 Y0 Z0 ; Turn off soft endstops",
|
||||
"M975 S1 ; Enable tool vibration suppression",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 X-28.5 F30000 ; Move X-axis",
|
||||
"G1 X-48.2 F3000 ; Move further on X",
|
||||
"M620 M ; Enable material remap",
|
||||
"M620 S0A ; Switch material if AMS exists",
|
||||
" M1002 gcode_claim_action : 4",
|
||||
" M400 ; Wait for heating",
|
||||
" M1002 set_filament_type:UNKNOWN ; Set filament type as unknown",
|
||||
" M109 S220 ; Set and wait hotend temperature",
|
||||
" M104 S250 ; Set nozzle purge temp",
|
||||
" M400 ; Wait for heating",
|
||||
" T0 ; Select Tool 0",
|
||||
" G1 X-48.2 F3000 ; Move X again",
|
||||
" M400 ; Wait for completion",
|
||||
" M620.1 E F523.843 T240 ; Extrude for purge sequence",
|
||||
" M109 S250 ; Wait for nozzle flush temp",
|
||||
" M106 P1 S0 ; Turn off nozzle cooling fan",
|
||||
" G92 E0 ; Reset extruder position",
|
||||
" G1 E50 F200 ; Extrude 50mm to clear nozzle",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M1002 set_filament_type:PLA ; Confirm filament type",
|
||||
"M621 S0A ; Confirm material switch",
|
||||
"M109 S240 H300 ; Set nozzle temp",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E50 F200 ; Extrude 50mm slowly to prevent clog",
|
||||
"M400 ; Wait for completion",
|
||||
"M106 P1 S178 ; Set nozzle cooling fan speed",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E5 F200 ; Extrude 5mm slowly",
|
||||
"M104 S220 ; Lower nozzle temperature",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E-0.5 F300 ; Retract filament slightly",
|
||||
";===== Wipe and Shake Nozzle ======================",
|
||||
"G1 X-28.5 F30000 ; Move X-axis",
|
||||
"M73 P1 R23 ; Update print progress",
|
||||
"G1 X-48.2 F3000 ; Move back on X-axis",
|
||||
"M73 P2 R23 ; Update print progress",
|
||||
"G1 X-28.5 F30000 ; Wipe nozzle",
|
||||
"G1 X-48.2 F3000 ; Move back on X",
|
||||
"G1 X-28.5 F30000 ; Wipe nozzle",
|
||||
"G1 X-48.2 F3000 ; Move back on X",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M106 P1 S0 ; Turn off nozzle cooling fan",
|
||||
";===== Auto Extrude Calibration Start =============",
|
||||
"M975 S1 ; Enable extruder calibration",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"T1000 ; Select tool 1000",
|
||||
"G1 X-48.2 Y0 Z10 F10000 ; Move to calibration start position",
|
||||
"M400 ; Wait for all moves to complete",
|
||||
"M1002 set_filament_type:UNKNOWN ; Set filament type to unknown",
|
||||
"M412 S1 ; Enable filament runout detection",
|
||||
"M400 P10 ; Wait for 10ms",
|
||||
"M620.3 W1 ; Enable filament tangle detection",
|
||||
"M400 S2 ; Wait for 2ms",
|
||||
"M1002 set_filament_type:PLA ; Set filament type to PLA",
|
||||
"M1002 judge_flag extrude_cali_flag ; Check extruder calibration flag",
|
||||
"M622 J1",
|
||||
" M1002 gcode_claim_action : 8",
|
||||
" M109 S220 ; Set hotend temperature",
|
||||
" G1 E10 F377.08 ; Extrude 10mm at 377.08 mm/min",
|
||||
" M983 F6.28466 A0.3 H0.4 ; Perform dynamic extrusion compensation",
|
||||
" M106 P1 S255 ; Set nozzle cooling fan to max speed",
|
||||
" M400 S5 ; Wait for 5 seconds",
|
||||
" G1 X-28.5 F18000 ; Move X for wipe",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" G1 X-28.5 F18000 ; Wipe motion",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" M73 P3 R23 ; Update progress",
|
||||
" G1 X-28.5 F12000 ; Wipe and shake",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M106 P1 S0 ; Turn off nozzle cooling fan",
|
||||
" M1002 judge_last_extrude_cali_success",
|
||||
" M622 J0",
|
||||
" M983 F6.28466 A0.3 H0.4 ; Perform dynamic extrusion compensation",
|
||||
" M106 P1 S255 ; Set nozzle cooling fan to max speed",
|
||||
" M400 S5 ; Wait for 5 seconds",
|
||||
" G1 X-28.5 F18000 ; Move X for wipe",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" G1 X-28.5 F18000 ; Wipe motion",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" G1 X-28.5 F12000 ; Wipe and shake",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M106 P1 S0 ; Turn off nozzle cooling fan",
|
||||
" M623 ; End of calibration routine",
|
||||
" M73 P4 R23 ; Update progress",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M984 A0.1 E1 S1 F6.28466 H0.4 ; Apply extruder calibration parameters",
|
||||
" M106 P1 S178 ; Set nozzle cooling fan to moderate speed",
|
||||
" M400 S7 ; Wait for 7 seconds",
|
||||
" G1 X-28.5 F18000 ; Move X for wipe",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" G1 X-28.5 F18000 ; Wipe motion",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" G1 X-28.5 F12000 ; Wipe and shake",
|
||||
" G1 X-48.2 F3000 ; Move X back",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M106 P1 S0 ; Turn off nozzle cooling fan",
|
||||
"M623 ; End of extruder calibration process",
|
||||
"M104 S170 ; Prepare to wipe nozzle",
|
||||
"M106 S255 ; Turn on fan",
|
||||
";===== Mech Mode Fast Check Start =================",
|
||||
"M1002 gcode_claim_action : 3",
|
||||
"G1 X128 Y128 F20000 ; Move to check position",
|
||||
"G1 Z5 F1200 ; Raise Z-axis",
|
||||
"M400 P200 ; Wait for movements to complete",
|
||||
"M970.3 Q1 A5 K0 O3 ; Execute fast check routine",
|
||||
"M974 Q1 S2 P0 ; Confirm fast check step",
|
||||
"M970.2 Q1 K1 W58 Z0.1 ; Additional fast check",
|
||||
"M974 S2 ; Confirm step",
|
||||
"G1 X128 Y128 F20000 ; Repeat move to check position",
|
||||
"G1 Z5 F1200 ; Raise Z-axis",
|
||||
"M400 P200 ; Wait for movements to complete",
|
||||
"M970.3 Q0 A10 K0 O1 ; Execute another fast check routine",
|
||||
"M974 Q0 S2 P0 ; Confirm step",
|
||||
"M970.2 Q0 K1 W78 Z0.1 ; Another additional check",
|
||||
"M974 S2 ; Confirm step",
|
||||
"M975 S1 ; Confirm vibration suppression",
|
||||
"G1 F30000 ; Set movement speed",
|
||||
"G1 X0 Y5 ; Move to next step",
|
||||
"G28 X ; Re-home XY",
|
||||
"G1 Z4 F1200 ; Lower Z-axis",
|
||||
";===== Wipe Nozzle ================================",
|
||||
"M1002 gcode_claim_action : 14",
|
||||
"M975 S1 ; Enable wipe mode",
|
||||
"M106 S255 ; Turn on fan (G28 turns off fan)",
|
||||
"M211 S ; Push soft endstop status",
|
||||
"M211 X0 Y0 Z0 ; Turn off Z-axis endstop",
|
||||
";===== Remove Waste by Touching Start =============",
|
||||
"M104 S170 ; Set nozzle temp",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"G1 E-1 F500 ; Retract filament",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"M109 S170 ; Set nozzle temperature",
|
||||
"G0 X108 Y-0.5 F30000 ; Move to wipe position",
|
||||
"G380 S3 Z-5 F1200 ; Lower nozzle to wipe",
|
||||
"; Repeat wipe sequence",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X110 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"M73 P22 R18",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X112 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X114 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X116 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X118 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X120 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X122 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X124 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X126 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X128 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X130 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X132 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X134 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X136 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X138 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X140 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X142 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X144 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X146 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z2 F1200",
|
||||
"G1 X148 F10000",
|
||||
"G380 S3 Z-5 F1200",
|
||||
"G1 Z5 F30000 ; Raise Z",
|
||||
";===== Remove Waste by Touching End ===============",
|
||||
"G1 Z10 F1200 ; Lift nozzle",
|
||||
"G0 X118 Y261 F30000 ; Move to safe position",
|
||||
"G1 Z5 F1200 ; Lower Z",
|
||||
"M109 S170 ; Set nozzle temperature",
|
||||
"G28 Z P0 T300 ; Home Z with low precision",
|
||||
"G29.2 S0 ; Turn off ABL",
|
||||
"M104 S140 ; Prepare for auto bed leveling",
|
||||
"G0 Z5 F20000 ; Lift Z",
|
||||
"G0 X128 Y261 F20000 ; Move to exposed steel surface",
|
||||
"G0 Z-1.01 F1200 ; Lower nozzle to stop position",
|
||||
"G91 ; Set relative positioning",
|
||||
"G2 I1 J0 X2 Y0 F2000.1 ; Execute wipe motion",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 Z10 F1200 ; Raise Z",
|
||||
";===== Brush Material Wipe Nozzle =================",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 Y250 F30000 ; Move to brush position",
|
||||
"G1 X55 ; Move X",
|
||||
"G1 Z1.300 F1200 ; Lower nozzle",
|
||||
"G1 Y262.5 F6000 ; Wipe motion",
|
||||
"G91 ; Set relative positioning",
|
||||
"G1 X-35 F30000 ; Move along brush",
|
||||
"G1 Y-0.5",
|
||||
"G1 X45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X-45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X-45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X45",
|
||||
"G1 Z5.000 F1200 ; Lift nozzle",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 X30 Y250.000 F30000 ; Move to brush position",
|
||||
"G1 Z1.300 F1200 ; Lower nozzle",
|
||||
"G1 Y262.5 F6000 ; Wipe motion",
|
||||
"G91 ; Set relative positioning",
|
||||
"G1 X35 F30000 ; Move along brush",
|
||||
"G1 Y-0.5",
|
||||
"G1 X-45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X-45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X45",
|
||||
"G1 Y-0.5",
|
||||
"G1 X-45",
|
||||
"G1 Z10.000 F1200 ; Lift nozzle",
|
||||
";===== Brush Material Wipe Nozzle End ============",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 Y250 F30000 ; Move to safe position",
|
||||
"G1 X138",
|
||||
"G1 Y261",
|
||||
"G0 Z-1.01 F1200 ; Stop nozzle",
|
||||
"G91 ; Set relative positioning",
|
||||
"G2 I1 J0 X2 Y0 F2000.1",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"M73 P23 R18",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"G2 I1 J0 X2",
|
||||
"G2 I-0.75 J0 X-1.5",
|
||||
"M109 S140 ; Set nozzle temperature",
|
||||
"M106 S255 ; Turn on fan (G28 turns off fan)",
|
||||
"M211 R ; Restore soft endstop status",
|
||||
";===== Bed Leveling ===============================",
|
||||
"M1002 judge_flag g29_before_print_flag ; Check bed leveling flag",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 Z5 F1200 ; Lift nozzle",
|
||||
"G1 X0 Y0 F30000 ; Move to home position",
|
||||
"G29.2 S1 ; Turn on ABL (auto bed level)",
|
||||
"M190 S65 ; Set and wait bed temp",
|
||||
"M109 S140 ; Set and wait nozzle temp",
|
||||
"M106 S0 ; Turn off fan (reduce noise)",
|
||||
"M622 J1",
|
||||
" M1002 gcode_claim_action : 1",
|
||||
" G29 A1 X115.2 Y115.2 I25.6 J25.6 ; Perform bed leveling",
|
||||
" M400 ; Wait for all movements to complete",
|
||||
" M500 ; Save calibration data",
|
||||
"M623 ; End bed leveling",
|
||||
";===== Home After Wipe Mouth ======================",
|
||||
"M1002 judge_flag g29_before_print_flag ; Check if bed leveling was performed",
|
||||
"M622 J0 ; Signal start of sequence",
|
||||
" M1002 gcode_claim_action : 13 ; Claim home action",
|
||||
" G28 ; Home all axes",
|
||||
"M623 ; End sequence",
|
||||
";===== Home After Wipe Mouth End ==================",
|
||||
"G1 X108.000 Y-0.500 F30000 ; Move to start position",
|
||||
"G1 Z0.300 F1200 ; Lower Z for calibration",
|
||||
"M400 ; Wait for moves to complete",
|
||||
"G2814 Z0.32 ; Set Z offset",
|
||||
"M104 S220 ; Set nozzle temperature to 220°C for printing",
|
||||
";===== Nozzle Load Line ===========================",
|
||||
";G90 ; Set absolute positioning",
|
||||
";M83 ; Set extruder to relative mode",
|
||||
";G1 Z5 F1200 ; Raise Z before priming",
|
||||
";G1 X88 Y-0.5 F20000 ; Move to priming position",
|
||||
";G1 Z0.3 F1200 ; Lower nozzle for priming",
|
||||
";M109 S220 ; Wait for nozzle temperature to reach 220°C",
|
||||
";G1 E2 F300 ; Extrude filament",
|
||||
";G1 X168 E4.989 F6000 ; Extrude along the line",
|
||||
";G1 Z1 F1200 ; Lift Z after priming",
|
||||
";===== Extrude Calibration Test ====================",
|
||||
"M400 ; Wait for all commands to complete",
|
||||
"M900 S ; Start calibration",
|
||||
"M900 C ; Start calibration cycle",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"M109 S220 ; Set and wait nozzle temp",
|
||||
"G0 X128 E8 F904.991 ; Extrude calibration test pattern",
|
||||
"G0 X133 E.3742 F1508.32",
|
||||
"G0 X138 E.3742 F6033.27",
|
||||
"G0 X143 E.3742 F1508.32",
|
||||
"G0 X148 E.3742 F6033.27",
|
||||
"G0 X153 E.3742 F1508.32",
|
||||
"G91 ; Set relative positioning",
|
||||
"G1 X1 Z-0.300 ; Lower nozzle slightly",
|
||||
"G1 X4 ",
|
||||
"G1 Z1 F1200 ; Raise back up",
|
||||
"G90 ; Return to absolute positioning",
|
||||
"M400 ; Wait for completion",
|
||||
"M900 R ; Reset calibration",
|
||||
"M1002 judge_flag extrude_cali_flag ; Check calibration status",
|
||||
"M622 J1 ; Signal start of sequence",
|
||||
" G90 ; Set absolute positioning",
|
||||
" G1 X108.000 Y1.000 F30000 ; Move to calibration position",
|
||||
" G91 ; Set relative positioning",
|
||||
" G1 Z-0.700 F1200 ; Lower nozzle slightly",
|
||||
" G90 ; Return to absolute positioning",
|
||||
" M83 ; Set extruder to relative mode",
|
||||
" G0 X128 E10 F904.991 ; Run extrusion test",
|
||||
" G0 X133 E.3742 F1508.32",
|
||||
" G0 X138 E.3742 F6033.27",
|
||||
" G0 X143 E.3742 F1508.32",
|
||||
" G0 X148 E.3742 F6033.27",
|
||||
" G0 X153 E.3742 F1508.32",
|
||||
" G91 ; Set relative positioning",
|
||||
" G1 X1 Z-0.300 ; Lower slightly",
|
||||
" G1 X4",
|
||||
" G1 Z1 F1200 ; Raise back up",
|
||||
" G90 ; Return to absolute positioning",
|
||||
" M400 ; Wait for completion",
|
||||
"M623 ; End sequence",
|
||||
"G1 Z0.2 ; Lower nozzle slightly",
|
||||
"M1002 gcode_claim_action : 0 ; Claim action",
|
||||
"M400 ; Wait for actions to complete",
|
||||
";===== Final Print Prep ===========================",
|
||||
"G29.1 Z-0.02 ; Adjust Z height for PEI plate",
|
||||
"M960 S1 P0 ; Turn off laser",
|
||||
"M960 S2 P0 ; Turn off laser",
|
||||
"M106 S0 ; Turn off fan",
|
||||
"M106 P2 S0 ; Turn off auxiliary fan",
|
||||
"M106 P3 S0 ; Turn off chamber fan",
|
||||
"M975 S1 ; Enable mechanical suppression mode",
|
||||
"G90 ; Set absolute positioning",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"T1000 ; Tool selection",
|
||||
"M211 X0 Y0 Z0 ; Disable soft endstops",
|
||||
"M1007 S1 ; Enable mass estimation",
|
||||
"G29.4 ; Start additional leveling routine",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G21 ; Set units to millimeters",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"M106 P3 S200 ; Set chamber fan speed",
|
||||
"M981 S1 P20000 ; Open spaghetti detector"
|
||||
],
|
||||
"gcodePost": [
|
||||
"; ===== FOOTER ====================================",
|
||||
"M204 S6000 ; Set acceleration to 6000 mm/s^2",
|
||||
"M1003 S0 ; Disable power loss recovery",
|
||||
"M106 S0 ; Turn off part cooling fan",
|
||||
"M106 P2 S0 ; Turn off auxiliary cooling fan",
|
||||
"M981 S0 P20000 ; Close spaghetti detector",
|
||||
"M106 P3 S0 ; Turn off chamber fan",
|
||||
"G392 S0 ; Turn off nozzle clog detection",
|
||||
"M400 ; Wait for buffer to clear",
|
||||
"G92 E0 ; Zero the extruder",
|
||||
"G1 E-0.8 F1800 ; Retract filament by 0.8mm",
|
||||
"G1 Z26.1 F900 ; Raise Z-axis slightly",
|
||||
"G1 X0 Y128 F18000 ; Move to safe position",
|
||||
"G1 X-13.0 F3000 ; Move to another safe position",
|
||||
";===== Timelapse Sequence ========================",
|
||||
"M1002 judge_flag timelapse_record_flag",
|
||||
"M622 J1",
|
||||
" M400 P100",
|
||||
" M971 S11 C11 O0",
|
||||
" M991 S0 P-1 ; End timelapse at safe pos",
|
||||
"M623 ; End conditional block",
|
||||
";===== End of Print ==============================",
|
||||
"M140 S0 ; Turn off heated bed",
|
||||
"M106 S0 ; Turn off all cooling fans",
|
||||
"M106 P2 S0 ; Turn off auxiliary cooling fan",
|
||||
"M106 P3 S0 ; Turn off chamber cooling fan",
|
||||
";===== Pull Back Filament ========================",
|
||||
"M620 S255 ; Retract filament to AMS",
|
||||
"G1 X267 F15000 ; Move to retract position",
|
||||
"T255 ; Select tool 255 (AMS retract)",
|
||||
"G1 X-28.5 F18000",
|
||||
"G1 X-48.2 F3000",
|
||||
"G1 X-28.5 F18000",
|
||||
"G1 X-48.2 F3000",
|
||||
"M621 S255 ; Complete filament unload",
|
||||
"M104 S0 ; Turn off hotend",
|
||||
"M400 ; Wait for all motion to complete",
|
||||
"M17 S ; Enable steppers",
|
||||
"M17 Z0.4 ; Reduce Z stepper motor current",
|
||||
"G1 Z125.6 F600 ; Move Z-axis up",
|
||||
"G1 Z123.6",
|
||||
"M400 P100",
|
||||
"M17 R ; Restore Z motor current",
|
||||
"G90 ; Set absolute positioning",
|
||||
"G1 X-48 Y180 F3600 ; Move to parking position",
|
||||
"M220 S100 ; Reset feedrate to 100%",
|
||||
"M201.2 K1.0 ; Reset acceleration magnitude",
|
||||
"M73.2 R1.0 ; Reset remaining time estimation",
|
||||
"M1002 set_gcode_claim_speed_level : 0",
|
||||
";===== Printer Finish Sound ======================",
|
||||
"M17",
|
||||
"M400 S1",
|
||||
"M1006 S1",
|
||||
"M1006 A0 B20 L100 C37 D20 M40 E42 F20 N60",
|
||||
"M1006 A0 B10 L100 C44 D10 M60 E44 F10 N60",
|
||||
"M1006 A0 B10 L100 C46 D10 M80 E46 F10 N80",
|
||||
"M1006 A44 B20 L100 C39 D20 M60 E48 F20 N60",
|
||||
"M1006 A0 B10 L100 C44 D10 M60 E44 F10 N60",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N60",
|
||||
"M1006 A0 B10 L100 C39 D10 M60 E39 F10 N60",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N60",
|
||||
"M1006 A0 B10 L100 C44 D10 M60 E44 F10 N60",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N60",
|
||||
"M1006 A0 B10 L100 C39 D10 M60 E39 F10 N60",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N60",
|
||||
"M1006 A0 B10 L100 C48 D10 M60 E44 F10 N80",
|
||||
"M1006 A0 B10 L100 C0 D10 M60 E0 F10 N80",
|
||||
"M1006 A44 B20 L100 C49 D20 M80 E41 F20 N80",
|
||||
"M1006 A0 B20 L100 C0 D20 M60 E0 F20 N80",
|
||||
"M1006 A0 B20 L100 C37 D20 M30 E37 F20 N60",
|
||||
"M1006 W",
|
||||
"M400 ; Wait for completion",
|
||||
"M18 X Y Z ; Disable motors",
|
||||
"M73 P100 R0 ; Set progress to 100%"
|
||||
],
|
||||
"gcodeChange": [
|
||||
"; BEGIN tool change from {last_tool} to {tool}",
|
||||
"M620 S{tool}A ; prepare tool change",
|
||||
"M204 S9000 ; Set acceleration to 9000 mm/s^2",
|
||||
"M620.11 S0 ; Reset filament retraction state",
|
||||
"M400 ; wait for moves to complete",
|
||||
"M620.1 E F187 T240 ; set purge rate 187 temp 240",
|
||||
"T{tool} ; initiate tool change",
|
||||
"M620.1 E F374 T240 ; set purge rate 374 temp 240",
|
||||
"M620.11 S0 ; Reset filament retraction state",
|
||||
"G92 E0 ; reset extruder position",
|
||||
"M400 ; wait for moves to complete",
|
||||
" ; -- PURGE --",
|
||||
"M109 S240 ; Set nozzle temperature to 240°C",
|
||||
"G1 E23.7 F187 ; Extrude 23.7mm of filament at flowrate 187",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F187 ; Continue extrusion at flowrate 187",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E-2 F1800 ; Retract filament by 2mm",
|
||||
"G1 E2 F300 ; Recover retraction slowly",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M109 S{temp} ; Set nozzle temperature back to print temp",
|
||||
" ; -- SHAKE --",
|
||||
"M106 P1 S255 ; Turn on nozzle cooling fan to full speed",
|
||||
"M400 S3 ; Wait for all movements to complete",
|
||||
"G1 X70 F5000 ; Move to X70",
|
||||
"G1 X90 F3000 ; Move to X90",
|
||||
"G1 Y255 F4000 ; Move to Y255",
|
||||
"G1 X105 F5000 ; Move to X105",
|
||||
"G1 Y265 ; Move to Y265",
|
||||
"G1 X70 F10000 ; Rapid move to X70",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X70 F10000 ; Rapid move back to X70",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X70 F10000 ; Shake filament residue",
|
||||
"G1 X80 F15000",
|
||||
"G1 X60",
|
||||
"G1 X80",
|
||||
"G1 X60",
|
||||
"G1 X80 ; Shake to put down garbage",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X165 F15000 ; Wipe and shake",
|
||||
"G1 Y256 ; Move Y aside to prevent collision",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M204 S10000 ; Set acceleration to 10000 mm/s^2",
|
||||
"M621 S{tool}A ; complete tool change",
|
||||
"; END tool change"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"new": false,
|
||||
"deviceName": "Bambu A1",
|
||||
"bedBelt": false,
|
||||
"fwRetract": false,
|
||||
"filamentSource": "direct",
|
||||
"extras": {
|
||||
"bbl": {
|
||||
"luke": {
|
||||
"host": "10.20.20.75",
|
||||
"code": "20709223",
|
||||
"serial": "01P09C482401767",
|
||||
"modified": true
|
||||
},
|
||||
"leia": {
|
||||
"host": "10.20.20.76",
|
||||
"code": "35129782",
|
||||
"serial": "01P09C461603301",
|
||||
"modified": true
|
||||
},
|
||||
"vader": {
|
||||
"host": "10.20.20.77",
|
||||
"code": "17711811",
|
||||
"serial": "01P00A413100516",
|
||||
"modified": true
|
||||
},
|
||||
"Scrappy": {
|
||||
"host": "10.10.2.5",
|
||||
"serial": "01S00A292500224",
|
||||
"code": "38373335",
|
||||
"modified": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"imageURL": "",
|
||||
"deviceZMax": 0,
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "Bambu PLA",
|
||||
"sliceHeight": 0.2,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "grid",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.5,
|
||||
"sliceSupportOffset": 0.4,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 5,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 60,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 0,
|
||||
"sliceBottomLayers": 2,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBeltLead": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputTemp": 220,
|
||||
"outputBedTemp": 65,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 120,
|
||||
"outputFinishrate": 90,
|
||||
"outputSeekrate": 200,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.2,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputRetractDist": 2,
|
||||
"outputRetractSpeed": 80,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 0,
|
||||
"outputShortPoly": 100,
|
||||
"outputMinSpeed": 5,
|
||||
"outputCoastDist": 0,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportEnable": false,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerFillRate": 80,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerNozzleTemp": 210,
|
||||
"firstLayerBedTemp": 60,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputBrimCount": 0,
|
||||
"outputBrimOffset": 2,
|
||||
"outputPurgeTower": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0,
|
||||
"ranges": [],
|
||||
"sliceLineWidth": 0,
|
||||
"sliceFillRepeat": 2,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBeltBump": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportOutline": true,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceDetectThin": "off",
|
||||
"outputAlternating": false,
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputFanLayer": 1,
|
||||
"outputNozzle": 0,
|
||||
"sliceAngle": 45,
|
||||
"sliceZInterleave": false
|
||||
}
|
||||
]
|
||||
}
|
||||
502
src/kiri/dev/fdm/Bambu.P1S.json
Normal file
502
src/kiri/dev/fdm/Bambu.P1S.json
Normal file
|
|
@ -0,0 +1,502 @@
|
|||
{
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 256,
|
||||
"bedDepth": 256,
|
||||
"bedRound": false,
|
||||
"maxHeight": 256,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M73 P{progress}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
"; CHANGE_LAYER",
|
||||
"; layer num/total_layer_count: {layer}/{layers}",
|
||||
"M622.1 S1 ; for prev firware, default turned on",
|
||||
"M1002 judge_flag timelapse_record_flag",
|
||||
"M622 J1",
|
||||
"M971 S11 C10 O0 ; timelapse without wipe tower",
|
||||
"M623",
|
||||
"M73 L{layer}",
|
||||
"M991 S0 P{layer-1} ; notify layer change",
|
||||
";; IF { layer == 0 }",
|
||||
"M204 S500",
|
||||
";; ELSE",
|
||||
"M204 S5000",
|
||||
";; END"
|
||||
],
|
||||
"gcodePre": [
|
||||
"; total layer number: {layers}",
|
||||
"; model label id: {model_labels}",
|
||||
";; PREAMBLE",
|
||||
";; DEFINE BAMBU-AMS 0,1,2,3",
|
||||
"; ===== HEADER ====================================",
|
||||
"M73 P0 R14 ; Initial progress and time remaining",
|
||||
"M201 X20000 Y20000 Z500 E5000 ; Set max acceleration",
|
||||
"M203 X500 Y500 Z20 E30 ; Set max feedrates",
|
||||
"M204 P20000 R5000 T20000 ; Set acceleration",
|
||||
"M205 X9.00 Y9.00 Z3.00 E2.50 ; Set advanced settings",
|
||||
"M106 S0 ; Set part fan speed to 0",
|
||||
"M106 P2 S0 ; Turn off aux fan",
|
||||
";===== machine: P1S ===============================",
|
||||
"M104 S75 ; Set extruder temp to turn on HB fan, prevent filament oozing",
|
||||
"M710 A1 S255 ; Turn on MC fan by default (P1S)",
|
||||
";===== Reset machine status =======================",
|
||||
"M290 X40 Y40 Z2.6666666 ; Set baby stepping offsets",
|
||||
"G91 ; Set to relative positioning",
|
||||
"M17 Z0.4 ; Lower Z-motor current",
|
||||
"G380 S2 Z30 F300 ; Lower hotbed (G380 like G38)",
|
||||
"G380 S2 Z-25 F300 ; Continue to lower bed",
|
||||
"G1 Z5 F300 ; Raise bed by 5mm",
|
||||
"G90 ; Set to absolute positioning",
|
||||
"M17 X1.2 Y1.2 Z0.75 ; Reset motor current to default",
|
||||
"M960 S5 P1 ; Turn on logo lamp",
|
||||
"M220 S100 ; Reset feedrate to 100%",
|
||||
"M221 S100 ; Reset flowrate to 100%",
|
||||
"M73.2 R1.0 ; Reset remaining time magnitude",
|
||||
"M1002 set_gcode_claim_speed_level : 5 ; Set G-code claim speed level",
|
||||
"M221 X0 Y0 Z0 ; Turn off soft endstop to prevent logic issues",
|
||||
"G29.1 Z0 ; Clear Z-trim value",
|
||||
"M204 S10000 ; Initialize acceleration to 10 m/s^2",
|
||||
";===== Heatbed preheat ============================",
|
||||
"M1002 gcode_claim_action : 2 ; Claim action for preheating",
|
||||
"M140 S{bed_temp} ; Set bed temperature to 65°C",
|
||||
"M190 S{bed_temp} ; Wait for bed temperature to reach 65°C",
|
||||
";===== Turn on fans to prevent PLA jamming ========",
|
||||
"M106 P3 S180 ; set chamber fan speed to prevent PLA jamming",
|
||||
"M106 P2 S100 ; Turn on aux fan to cool toolhead",
|
||||
";===== Prepare print temperature and material =====",
|
||||
"M104 S{temp} ; Set extruder temp to 220°C",
|
||||
"G91 ; Set to relative positioning",
|
||||
"G0 Z10 F1200 ; Raise Z by 10mm",
|
||||
"G90 ; Set to absolute positioning",
|
||||
"G28 X ; Home X axis",
|
||||
"M975 S1 ; Turn on feature (guess: vibration suppression)",
|
||||
"M73 P31 R9 ; Update progress and time remaining",
|
||||
"G1 X60 F12000 ; Fast move to X60",
|
||||
"G1 Y245 ; Move to Y245",
|
||||
"G1 Y265 F3000 ; Move to Y265 slowly",
|
||||
"M620 M ; Custom command (guess: material management)",
|
||||
"M620 S{tool}A ; Switch material if AMS present",
|
||||
"M109 S{temp} ; Wait for extruder to reach 220°C",
|
||||
"G1 X120 F12000 ; Fast move to X120",
|
||||
"G1 X20 Y50 F12000 ; Fast move to X20 Y50",
|
||||
"G1 Y-3 ; Move down Y-axis by 3",
|
||||
"T{tool} ; Select starting tool",
|
||||
"G1 X54 F12000 ; Fast move to X54",
|
||||
"G1 Y265 ; Move to Y265",
|
||||
"M400 ; Wait for all moves to finish",
|
||||
"M621 S{tool}A ; Custom command",
|
||||
"M620.1 E F523.843 T240 ; Extrude command with custom parameters",
|
||||
"M412 S1 ; Turn on filament runout detection",
|
||||
"M109 S250 ; Set nozzle to common flush temp",
|
||||
"M106 P1 S0 ; Turn off nozzle fan",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E50 F200 ; Extrude 50mm of filament",
|
||||
"M400 ; Wait for moves to finish",
|
||||
"M104 S{temp} ; Set nozzle temperature to 220°C",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E50 F200 ; Extrude 50mm of filament",
|
||||
"M400 ; Wait for moves to finish",
|
||||
"M106 P1 S255 ; Turn on nozzle fan to full speed",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E5 F300 ; Extrude 5mm of filament",
|
||||
"M109 S200 ; Drop nozzle temperature to 200°C to shrink filament",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"M73 P33 R9 ; Update progress and time remaining",
|
||||
"G1 E-0.5 F300 ; Retract filament by 0.5mm",
|
||||
"M73 P35 R9 ; Update progress and time remaining",
|
||||
"G1 X70 F9000 ; Fast move to X70",
|
||||
"G1 X76 F15000 ; Fast move to X76",
|
||||
"G1 X65 F15000 ; Fast move to X65",
|
||||
"G1 X76 F15000 ; Repeat movements to shake and clean nozzle",
|
||||
"G1 X65 F15000 ; Shake to put down garbage",
|
||||
"G1 X80 F6000 ; Move to X80",
|
||||
"G1 X95 F15000 ; Fast move to X95",
|
||||
"G1 X80 F15000 ; Return to X80",
|
||||
"G1 X165 F15000 ; Wipe and shake",
|
||||
"M400 ; Wait for all moves to finish",
|
||||
"M106 P1 S0 ; Turn off nozzle fan",
|
||||
";===== Wipe nozzle ===============================",
|
||||
"M1002 gcode_claim_action : 14 ; Claim action for nozzle wipe",
|
||||
"M975 S1 ; Turn on feature (guess: vibration suppression)",
|
||||
"M106 S255 ; Turn on part fan to full speed",
|
||||
"G1 X65 Y230 F18000 ; Fast move to start of wipe",
|
||||
"G1 Y264 F6000 ; Wipe along Y-axis",
|
||||
"M109 S200 ; Set nozzle temperature to 200°C",
|
||||
"G1 X100 F18000 ; Wipe first pass",
|
||||
"G0 X135 Y253 F20000 ; Move to exposed steel surface edge",
|
||||
"G28 Z P0 T300 ; Home Z with low precision, permit 300°C temperature",
|
||||
"G29.2 S0 ; Turn off ABL (auto bed leveling)",
|
||||
"G0 Z5 F20000 ; Raise Z by 5mm",
|
||||
"G1 X60 Y265 ; Move to X60 Y265",
|
||||
"G92 E0 ; Reset extruder position",
|
||||
"G1 E-0.5 F300 ; Retract more",
|
||||
"G1 X100 F5000 ; Second wipe pass",
|
||||
"G1 X70 F15000 ; Repeat movements for further wiping",
|
||||
"G1 X100 F5000",
|
||||
"G1 X70 F15000",
|
||||
"G1 X100 F5000",
|
||||
"G1 X70 F15000",
|
||||
"G1 X90 F5000",
|
||||
"G0 X128 Y261 Z-1.5 F20000 ; Move to exposed steel surface, stop nozzle",
|
||||
"M104 S140 ; Set temp down to heatbed acceptable",
|
||||
"M106 S255 ; Turn on part fan (G28 turned off fan)",
|
||||
"M221 S ; Push soft endstop status",
|
||||
"M221 Z0 ; Turn off Z axis endstop",
|
||||
"G0 Z0.5 F20000 ; Raise Z by 0.5mm",
|
||||
"G0 X125 Y259.5 Z-1.01 ; Move to wiping position",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y262.5",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y260.0",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y262.0",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y260.5",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y261.5",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 Z0.5 F20000",
|
||||
"G0 X125 Y261.0",
|
||||
"G0 Z-1.01",
|
||||
"G0 X131 F211",
|
||||
"G0 X124",
|
||||
"G0 X128",
|
||||
"G2 I0.5 J0 F300 ; Arc movements for final cleaning",
|
||||
"M73 P36 R8 ; Update progress and time remaining",
|
||||
"G2 I0.5 J0 F300",
|
||||
"G2 I0.5 J0 F300",
|
||||
"G2 I0.5 J0 F300",
|
||||
"M109 S140 ; Wait for nozzle temp to reach heatbed acceptable temp",
|
||||
"G2 I0.5 J0 F3000 ; More arc movements",
|
||||
"G2 I0.5 J0 F3000",
|
||||
"G2 I0.5 J0 F3000",
|
||||
"G2 I0.5 J0 F3000",
|
||||
"M221 R ; Pop softend status",
|
||||
"G1 Z10 F1200 ; Raise Z by 10mm",
|
||||
"M400 ; Wait for all moves to finish",
|
||||
"G1 Z10 ; Raise Z by 10mm",
|
||||
"G1 F30000 ; Set fast feedrate",
|
||||
"G1 X230 Y15 ; Move to X230 Y15",
|
||||
"G29.2 S1 ; Turn on ABL",
|
||||
"M106 S0 ; Turn off part fan, too noisy",
|
||||
";===== Bed leveling ===============================",
|
||||
"M1002 judge_flag g29_before_print_flag ; Judge flag before leveling",
|
||||
"M622 J1",
|
||||
" M1002 gcode_claim_action : 1 ; Claim action for bed leveling",
|
||||
" G29 A X115.2 Y115.2 I25.6 J25.6 ; Perform bed leveling",
|
||||
" M400 ; Wait for all moves to finish",
|
||||
" M500 ; Save calibration data",
|
||||
"M623",
|
||||
";===== Home after wipe mouth ======================",
|
||||
"M1002 judge_flag g29_before_print_flag ; Judge flag before homing",
|
||||
"M622 J0",
|
||||
" M1002 gcode_claim_action : 13 ; Claim action for homing",
|
||||
" G28 ; Home all axes",
|
||||
"M623",
|
||||
";===== Home after wipe mouth end ==================",
|
||||
"M975 S1 ; Turn on vibration suppression",
|
||||
";===== Turn on fans to prevent PLA jamming ========",
|
||||
"M106 P3 S180 ; set chamber fan speed to Prevent PLA jamming",
|
||||
"M106 P2 S100 ; Turn on aux fan to cool toolhead",
|
||||
"M104 S{temp} ; Set extruder temp to 220°C earlier, reduce wait time",
|
||||
";===== Mech mode fast check =======================",
|
||||
"G1 X128 Y128 Z10 F20000 ; Move to center for check",
|
||||
"M400 P200 ; Wait and perform check",
|
||||
"M970.3 Q1 A7 B30 C80 H15 K0 ; Custom command (mechanical check)",
|
||||
"M974 Q1 S2 P0 ; Custom command",
|
||||
"G1 X128 Y128 Z10 F20000 ; Move again to center for check",
|
||||
"M400 P200 ; Wait and perform another check",
|
||||
"M970.3 Q0 A7 B30 C90 Q0 H15 K0 ; Custom command",
|
||||
"M974 Q0 S2 P0 ; Custom command",
|
||||
"M975 S1 ; Turn on feature (vibration suppression)",
|
||||
"G1 F30000 ; Set fast feedrate",
|
||||
"M73 P37 R8 ; Update progress and time remaining",
|
||||
"G1 X230 Y15 ; Move to X230 Y15",
|
||||
"G28 X ; Re-home X and Y",
|
||||
";===== Nozzle load line ===========================",
|
||||
"M975 S1 ; Turn on vibration suppression",
|
||||
"G90 ; Set to absolute positioning",
|
||||
"M83 ; Set extruder to relative mode",
|
||||
"T1000 ; Custom command",
|
||||
"G1 X18.0 Y1.0 Z0.8 F18000 ; Move to start position",
|
||||
"M109 S{temp} ; Set extruder temp to 220°C",
|
||||
"G1 Z0.2 ; Lower Z to 0.2mm",
|
||||
"G0 E2 F300 ; Extrude 2mm of filament",
|
||||
"G0 X240 E25 F5539.96 ; Move to X240 while extruding",
|
||||
"G0 Y15 E1.166 F1384.99 ; Move along Y while extruding",
|
||||
"G0 X239.5 ; Move to X239.5",
|
||||
"G0 E0.2 ; Extrude 0.2mm of filament",
|
||||
"G0 Y1.5 E1.166 ; Move along Y while extruding",
|
||||
"G0 X18 E25 F5539.96 ; Return to start position while extruding",
|
||||
"M400 ; Wait for all moves to finish",
|
||||
";===== Final Preparations =========================",
|
||||
";G29.1 Z-0.04 ; Adjust Z-offset for textured PEI plate",
|
||||
"M1002 gcode_claim_action : 0 ; Claim action",
|
||||
"M106 S0 ; Turn off part fan",
|
||||
"M106 P2 S0 ; Turn off aux fan",
|
||||
"M106 P3 S0 ; Turn off chamber fan",
|
||||
"M975 S1 ; Turn on mechanical mode suppression",
|
||||
"G90 ; Set to absolute positioning",
|
||||
"G21 ; Set units to millimeters",
|
||||
"M83 ; Use relative distances for extrusion",
|
||||
"M106 P3 S200 ; Set chamber fan speed to 200 (prevents PLA jamming)",
|
||||
"M981 S1 P20000 ; Open spaghetti detector"
|
||||
],
|
||||
"gcodePost": [
|
||||
"; ===== FOOTER =====================================",
|
||||
"M106 S0 ; Turn off part cooling fan",
|
||||
"M106 P2 S0 ; Turn off auxiliary cooling fan",
|
||||
"M981 S0 P20000 ; Close spaghetti detector",
|
||||
"M106 P3 S0 ; Turn off chamber fan",
|
||||
"M400 ; Wait for buffer to clear",
|
||||
"G92 E0 ; Zero the extruder",
|
||||
"G1 E-0.8 F1800 ; Retract filament by 0.8mm",
|
||||
"G91 ; relative moves",
|
||||
"G1 Z5 F900 ; drop bed 5mm",
|
||||
"G90 ; absolute moves",
|
||||
"G1 X65 Y245 F12000 ; Move to safe position X65 Y245",
|
||||
"G1 Y265 F3000 ; Move to Y265 slowly",
|
||||
"G1 X65 Y245 F12000 ; Move back to X65 Y245",
|
||||
"G1 Y265 F3000 ; Move to Y265 slowly again",
|
||||
"M140 S0 ; Turn off heated bed",
|
||||
"M106 S0 ; Turn off part cooling fan",
|
||||
"M106 P2 S0 ; Turn off auxiliary cooling fan",
|
||||
"M106 P3 S0 ; Turn off chamber cooling fan",
|
||||
"G1 X100 F12000 ; Wipe nozzle",
|
||||
"M620 S255 ; Pull back filament to AMS",
|
||||
"G1 X20 Y50 F12000 ; Move to X20 Y50",
|
||||
"G1 Y-3 ; Move down Y-axis by 3",
|
||||
"T255 ; Tool change command (educated guess)",
|
||||
"G1 X65 F12000 ; Move to X65",
|
||||
"G1 Y265 ; Move to Y265",
|
||||
"G1 X100 F12000 ; Wipe nozzle again",
|
||||
"M621 S255 ; Custom command (educated guess)",
|
||||
"M104 S0 ; Turn off hotend",
|
||||
"M622.1 S1 ; Enable feature (default for older firmware)",
|
||||
"M1002 judge_flag timelapse_record_flag ; Check if timelapse recording is needed",
|
||||
"M622 J1 ; Enable timelapse",
|
||||
" M400 ; Wait for all motions to complete",
|
||||
" M991 S0 P-1 ; End smooth timelapse at safe position",
|
||||
" M400 S3 ; Wait for last picture to be taken",
|
||||
"M623 ; End of \"timelapse_record_flag\"",
|
||||
"M400 ; Wait for all motions to complete",
|
||||
"M17 S ; Engage stepper motors",
|
||||
"M17 Z0.4 ; Lower Z motor current to reduce impact if obstruction exists",
|
||||
"G1 Z{z_max} F600 ; Drop bed",
|
||||
"M400 P100 ; Wait for 100ms",
|
||||
"M17 R ; Restore Z motor current",
|
||||
"M220 S100 ; Reset feedrate magnitude to 100%",
|
||||
"M201.2 K1.0 ; Reset acceleration magnitude",
|
||||
"M73.2 R1.0 ; Reset remaining time magnitude",
|
||||
"M1002 set_gcode_claim_speed_level : 0 ; Set G-code claim speed level to 0",
|
||||
"M17 X0.8 Y0.8 Z0.5 ; Lower motor current to 45% power",
|
||||
"M73 P100 R0 ; Set progress to 100% with 0 remaining time"
|
||||
],
|
||||
"gcodeChange": [
|
||||
"; BEGIN tool change from {last_tool} to {tool}",
|
||||
"M620 S{tool}A ; prepare tool change",
|
||||
"M204 S9000 ; Set acceleration to 9000 mm/s^2",
|
||||
"M620.11 S0 ; Reset filament retraction state",
|
||||
"M400 ; wait for moves to complete",
|
||||
"M620.1 E F187 T240 ; set purge rate 187 temp 240",
|
||||
"T{tool} ; initiate tool change",
|
||||
"M620.1 E F374 T240 ; set purge rate 374 temp 240",
|
||||
"M620.11 S0 ; Reset filament retraction state",
|
||||
"G92 E0 ; reset extruder position",
|
||||
"M400 ; wait for moves to complete",
|
||||
" ; -- PURGE --",
|
||||
"M109 S240 ; Set nozzle temperature to 240°C",
|
||||
"G1 E23.7 F187 ; Extrude 23.7mm of filament at flowrate 187",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F187 ; Continue extrusion at flowrate 187",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E0.914611 F50 ; Pulsatile extrusion",
|
||||
"G1 E10.518 F374 ; Continue extrusion at flowrate 374",
|
||||
"G1 E-2 F1800 ; Retract filament by 2mm",
|
||||
"G1 E2 F300 ; Recover retraction slowly",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M109 S{temp} ; Set nozzle temperature back to print temp",
|
||||
" ; -- SHAKE --",
|
||||
"M106 P1 S255 ; Turn on nozzle cooling fan to full speed",
|
||||
"M400 S3 ; Wait for all movements to complete",
|
||||
"G1 X70 F5000 ; Move to X70",
|
||||
"G1 X90 F3000 ; Move to X90",
|
||||
"G1 Y255 F4000 ; Move to Y255",
|
||||
"G1 X105 F5000 ; Move to X105",
|
||||
"G1 Y265 ; Move to Y265",
|
||||
"G1 X70 F10000 ; Rapid move to X70",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X70 F10000 ; Rapid move back to X70",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X70 F10000 ; Shake filament residue",
|
||||
"G1 X80 F15000",
|
||||
"G1 X60",
|
||||
"G1 X80",
|
||||
"G1 X60",
|
||||
"G1 X80 ; Shake to put down garbage",
|
||||
"G1 X100 F5000 ; Move to X100",
|
||||
"G1 X165 F15000 ; Wipe and shake",
|
||||
"G1 Y256 ; Move Y aside to prevent collision",
|
||||
"M400 ; Wait for all movements to complete",
|
||||
"M204 S10000 ; Set acceleration to 10000 mm/s^2",
|
||||
"M621 S{tool}A ; complete tool change",
|
||||
"; END tool change"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
},
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"new": false,
|
||||
"deviceName": "Bambu P1S",
|
||||
"bedBelt": false,
|
||||
"fwRetract": false,
|
||||
"filamentSource": "direct",
|
||||
"extras": {
|
||||
"bbl": {}
|
||||
},
|
||||
"imageURL": "",
|
||||
"deviceZMax": 0,
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "Bambu PLA",
|
||||
"sliceHeight": 0.2,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.2,
|
||||
"sliceSupportOffset": 0.4,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 5,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 60,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 0,
|
||||
"sliceBottomLayers": 2,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBeltLead": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputTemp": 210,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 110,
|
||||
"outputFinishrate": 90,
|
||||
"outputSeekrate": 200,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.2,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputRetractDist": 1,
|
||||
"outputRetractSpeed": 80,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 0,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 5,
|
||||
"outputCoastDist": 0,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportEnable": false,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerFillRate": 80,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerNozzleTemp": 220,
|
||||
"firstLayerBedTemp": 65,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputBrimCount": 0,
|
||||
"outputBrimOffset": 2,
|
||||
"outputPurgeTower": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0,
|
||||
"ranges": [],
|
||||
"sliceLineWidth": 0,
|
||||
"sliceFillRepeat": 2,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBeltBump": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportOutline": false,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceDetectThin": "off",
|
||||
"outputAlternating": false,
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputFanLayer": 1,
|
||||
"outputNozzle": 0,
|
||||
"sliceAngle": 45,
|
||||
"sliceZInterleave": false
|
||||
}
|
||||
]
|
||||
}
|
||||
51
src/kiri/dev/fdm/Creality.CR-10S-Pro.json
Normal file
51
src/kiri/dev/fdm/Creality.CR-10S-Pro.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"pre":[
|
||||
"M140 S{bed_temp} ; Set bed temp",
|
||||
"M105 ; Report Temps",
|
||||
"M190 S{bed_temp} ; Wait for bed to reach target",
|
||||
"M104 S{temp} ; Set hot end temp",
|
||||
"M105 ; Report Temps",
|
||||
"M109 S{temp} ; Wait for hot end to reach target",
|
||||
"M82 ; Absolute extrusion mode",
|
||||
"G28 ; Home",
|
||||
"G29 ; Auto bed Level",
|
||||
"G92 E0 ; Reset Extruder",
|
||||
"G1 Z2.0 F3000 ; Move Z Axis up",
|
||||
"G1 X10.1 Y20 Z0.28 F5000.0 ; Move to start position",
|
||||
"G1 X10.1 Y200.0 Z0.28 F1500.0 E15 ; Draw the first line",
|
||||
"G1 X10.4 Y200.0 Z0.28 F5000.0 ; Move to side a little",
|
||||
"G1 X10.4 Y20 Z0.28 F1500.0 E30 ; Draw the second line",
|
||||
"G92 E0 ; Reset Extruder",
|
||||
"G1 Z2.0 F3000 ; Move Z Axis up",
|
||||
"G92 E0 ; Reset Extruder"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; Turn off cooling fan",
|
||||
"G91 ; Relative positioning",
|
||||
"G1 E-2 F2700 ; Retract",
|
||||
"G1 Z10 ; Raise Z",
|
||||
"G90 ; Absolute positioning",
|
||||
"G1 X0 Y300 ; Eject print",
|
||||
"M104 S0 ; Turn-off hot end",
|
||||
"M140 S0 ; Turn-off bed",
|
||||
"M84 X Y E ; Disable steppers except Z"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 300,
|
||||
"build_height": 400
|
||||
}
|
||||
}
|
||||
50
src/kiri/dev/fdm/Creality.CR-10S.json
Normal file
50
src/kiri/dev/fdm/Creality.CR-10S.json
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"pre":[
|
||||
"M140 S{bed_temp} ; Set bed temp",
|
||||
"M105 ; Report Temps",
|
||||
"M190 S{bed_temp} ; Wait for bed to reach target",
|
||||
"M104 S{temp} ; Set hot end temp",
|
||||
"M105 ; Report Temps",
|
||||
"M109 S{temp} ; Wait for hot end to reach target",
|
||||
"M82 ; Absolute extrusion mode",
|
||||
"G28 ; Home",
|
||||
"G92 E0 ; Reset Extruder",
|
||||
"G1 Z2.0 F3000 ; Move Z Axis up",
|
||||
"G1 X10.1 Y20 Z0.28 F5000.0 ; Move to start position",
|
||||
"G1 X10.1 Y200.0 Z0.28 F1500.0 E15 ; Draw the first line",
|
||||
"G1 X10.4 Y200.0 Z0.28 F5000.0 ; Move to side a little",
|
||||
"G1 X10.4 Y20 Z0.28 F1500.0 E30 ; Draw the second line",
|
||||
"G92 E0 ; Reset Extruder",
|
||||
"G1 Z2.0 F3000 ; Move Z Axis up",
|
||||
"G92 E0 ; Reset Extruder"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; Turn off cooling fan",
|
||||
"G91 ; Relative positioning",
|
||||
"G1 E-2 F2700 ; Retract",
|
||||
"G1 Z10 ; Raise Z",
|
||||
"G90 ; Absolute positioning",
|
||||
"G1 X0 Y300 ; Eject print",
|
||||
"M104 S0 ; Turn-off hot end",
|
||||
"M140 S0 ; Turn-off bed",
|
||||
"M84 X Y E ; Disable steppers except Z"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 300,
|
||||
"build_height": 400
|
||||
}
|
||||
}
|
||||
172
src/kiri/dev/fdm/Creality.CR-30.json
Normal file
172
src/kiri/dev/fdm/Creality.CR-30.json
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
{
|
||||
"pre":[
|
||||
"G28 ; home axes",
|
||||
"G1 Y50 F1000 ; lift y axis off belt for heating",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M140 S{bed_temp} ; set bed temp",
|
||||
"M104 S{temp} ; set hot end temp",
|
||||
"M105 ; report temps",
|
||||
"M190 S{bed_temp} ; wait for bed",
|
||||
"M105 ; report temps",
|
||||
"M109 S{temp} ; wait for hot end",
|
||||
"M82 ; absolute extrusion mode",
|
||||
"G90 ; absolute positioning mode",
|
||||
"G21 ; use metric values",
|
||||
"G92 E0 Z0 ; zero E/Z axes",
|
||||
"G1 Y0.15 ; move head to belt",
|
||||
"G1 X200 E35 F800 ; extruder purge line",
|
||||
"G1 Z0.3 ; shift belt away 0.3mm",
|
||||
"G1 X0 E70 ; extruder purge line",
|
||||
"G92 Z0 E0 ; reset bed + extruder position",
|
||||
"M117 CR-30 Printing..."
|
||||
],
|
||||
"post":[
|
||||
"M107 ; disable cooling fan",
|
||||
"M106 P0 S0 ; disable cooling fan",
|
||||
"M104 S0 ; shut down hot end",
|
||||
"M140 S0 ; shut down bed",
|
||||
"G92 E1 ; set filament position",
|
||||
"G1 E-1 F300 ; retract filament",
|
||||
"G28 X ; home X axis",
|
||||
"G1 Y50 F1000 ; lift y axis",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}",
|
||||
"progress": "M117 {progress}% layer {layer} / {layers}",
|
||||
"layer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
]
|
||||
},
|
||||
"settings":{
|
||||
"image_url": "/decal/3dprintmill.png",
|
||||
"image_anchor": 0,
|
||||
"image_scale": 1,
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_belt": true,
|
||||
"bed_width": 220,
|
||||
"bed_depth": 350,
|
||||
"build_height": 170
|
||||
},
|
||||
"profiles":[{
|
||||
"processName": "CR30 PLA",
|
||||
"sliceHeight": 0.20,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillOverlap": 0.3,
|
||||
"sliceFillSparse": 0.2,
|
||||
"sliceFillType": "linear",
|
||||
"sliceFillRepeat": 3,
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.4,
|
||||
"sliceSupportGap": 0,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 1,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 5,
|
||||
"sliceSolidLayers": 3,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerPrintMult": 1.0,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBeltLead": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputLoops": 0,
|
||||
"outputTemp": 210,
|
||||
"outputFanMax": 255,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 30,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.15,
|
||||
"outputFillMult": 1.15,
|
||||
"outputSparseMult": 1.15,
|
||||
"outputFanLayer": 0,
|
||||
"outputRetractDist": 6,
|
||||
"outputRetractSpeed": 70,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 0,
|
||||
"outputShortPoly": 50.0,
|
||||
"outputMinSpeed": 5.0,
|
||||
"outputCoastDist": 0.3,
|
||||
"outputWipeDistance": 0,
|
||||
"outputLayerRetract": false,
|
||||
"detectThinWalls": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0
|
||||
},{
|
||||
"processName": "CR30 PETG",
|
||||
"sliceHeight": 0.20,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillOverlap": 0.3,
|
||||
"sliceFillSparse": 0.2,
|
||||
"sliceFillType": "linear",
|
||||
"sliceFillRepeat": 3,
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.4,
|
||||
"sliceSupportGap": 0,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 1,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 5,
|
||||
"sliceSolidLayers": 3,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerPrintMult": 1.0,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBeltLead": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputLoops": 0,
|
||||
"outputTemp": 240,
|
||||
"outputFanMax": 0,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 0,
|
||||
"outputFeedrate": 30,
|
||||
"outputFinishrate": 30,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.15,
|
||||
"outputFillMult": 1.15,
|
||||
"outputSparseMult": 1.15,
|
||||
"outputFanLayer": 0,
|
||||
"outputRetractDist": 6,
|
||||
"outputRetractSpeed": 70,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 0,
|
||||
"outputShortPoly": 50.0,
|
||||
"outputMinSpeed": 5.0,
|
||||
"outputCoastDist": 0.3,
|
||||
"outputWipeDistance": 0,
|
||||
"outputLayerRetract": false,
|
||||
"detectThinWalls": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0
|
||||
}]
|
||||
}
|
||||
153
src/kiri/dev/fdm/Creality.Ender.3.json
Normal file
153
src/kiri/dev/fdm/Creality.Ender.3.json
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
{
|
||||
"deviceName": "Creality Ender 3",
|
||||
"new": false,
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedWidth": 220,
|
||||
"bedDepth": 220,
|
||||
"maxHeight": 300,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"extrudeAbs": true,
|
||||
"spindleMax": 0,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M73 P{progress}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; LAYER {layer} of {layers}",
|
||||
"M117 Layer {layer} of {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
"M104 S160 ; set extruder temp",
|
||||
"M140 S{bed_temp} ; set bed temp",
|
||||
"M190 S{bed_temp} ; wait for bed temp",
|
||||
"G28 W ; home all without mesh bed level",
|
||||
"G80 ; mesh bed leveling",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G1 F1000 ; set feedrate",
|
||||
"G1 Y-3.0 Z0.5 ; park outside print area",
|
||||
"M104 S{temp} ; set extruder actual required temp",
|
||||
"M109 S{temp} ; wait for extruder actual required temp",
|
||||
"G1 X60.0 E9.0 ; purge line",
|
||||
"G1 X100.0 E12.5 ; purge line",
|
||||
"M117 Printing"
|
||||
],
|
||||
"gcodePost": [
|
||||
"G0 E-1 F900 ; retract slightly",
|
||||
"M104 S0 ; turn off nozzle heat",
|
||||
"M140 S0 ; turn off bed heat",
|
||||
"M107 ; turn off fan",
|
||||
"G0 F3000 ; set feedrate",
|
||||
"G0 Y210 Z210 ; serve up print",
|
||||
"G4 ; wait",
|
||||
"M84 ; disable steppers",
|
||||
"M117 Print Done"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeDwell": [],
|
||||
"gcodeSpindle": [],
|
||||
"gcodeChange": [],
|
||||
"gcodeFExt": "gcode",
|
||||
"gcodeSpace": true,
|
||||
"gcodeStrip": false,
|
||||
"gcodeLaserOn": [],
|
||||
"gcodeLaserOff": [],
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "Ender 3 PLA",
|
||||
"sliceHeight": 0.2,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "center",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.4,
|
||||
"sliceSupportGap": 0,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 1,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 5,
|
||||
"sliceSolidLayers": 2,
|
||||
"sliceBottomLayers": 2,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBeltLead": 200,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputTemp": 205,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 80,
|
||||
"outputFinishrate": 30,
|
||||
"outputSeekrate": 150,
|
||||
"outputShellMult": 1.35,
|
||||
"outputFillMult": 1.3,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputRetractDist": 4,
|
||||
"outputRetractSpeed": 60,
|
||||
"outputRetractWipe": 2,
|
||||
"outputRetractDwell": 0,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 1,
|
||||
"outputCoastDist": 0.05,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 0.1,
|
||||
"antiBacklash": 0,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportEnable": false,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerFillRate": 35,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerNozzleTemp": 0,
|
||||
"firstLayerBedTemp": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputBrimCount": 0,
|
||||
"outputBrimOffset": 2,
|
||||
"outputPurgeTower": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0,
|
||||
"ranges": [],
|
||||
"outputLoops": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBeltBump": 0,
|
||||
"outputBeltFirst": false,
|
||||
"sliceFillRepeat": 4,
|
||||
"sliceLineWidth": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportOutline": true,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceDetectThin": "off"
|
||||
}
|
||||
]
|
||||
}
|
||||
38
src/kiri/dev/fdm/Creality.Ender.5.json
Normal file
38
src/kiri/dev/fdm/Creality.Ender.5.json
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"pre":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M82 ; set absolute positioning for extruder",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G28 ; home axes",
|
||||
"G92 E0 ; reset extruder position",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G28 XY ; home XY",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 220,
|
||||
"bed_depth": 220,
|
||||
"build_height": 300
|
||||
}
|
||||
}
|
||||
38
src/kiri/dev/fdm/Creality.Ender.6.json
Normal file
38
src/kiri/dev/fdm/Creality.Ender.6.json
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"pre":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M82 ; set absolute positioning for extruder",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G28 ; home axes",
|
||||
"G92 E0 ; reset extruder position",
|
||||
"G0 Z2 ; park Z at 2mm over bed for heating",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G28 XY ; home XY",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 250,
|
||||
"bed_depth": 250,
|
||||
"build_height": 400
|
||||
}
|
||||
}
|
||||
51
src/kiri/dev/fdm/Creality.K1.json
Normal file
51
src/kiri/dev/fdm/Creality.K1.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 220,
|
||||
"bedDepth": 220,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"gcodeTime": 1,
|
||||
"maxHeight": 250,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeFeature": [],
|
||||
"gcodeTrack": [],
|
||||
"gcodeLayer": [],
|
||||
"gcodePre": [
|
||||
"M140 S0",
|
||||
"M104 S0 ",
|
||||
"START_PRINT EXTRUDER_TEMP=220.000000 BED_TEMP=45.000000",
|
||||
"G92 E0",
|
||||
"G1 F2400 E-0.5"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M106 S0",
|
||||
"M106 P2 S0",
|
||||
"M106 P1 S0",
|
||||
"END_PRINT",
|
||||
"M82 ;absolute extrusion mode",
|
||||
"M104 S0"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"new": false,
|
||||
"deviceName": "Creality K1",
|
||||
"fwRetract": false,
|
||||
"filamentSource": "direct",
|
||||
"profiles": [],
|
||||
"extras": {}
|
||||
}
|
||||
152
src/kiri/dev/fdm/Creality.Sermoon.D1.json
Normal file
152
src/kiri/dev/fdm/Creality.Sermoon.D1.json
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
{
|
||||
"pre":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M82 ; set absolute positioning for extruder",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G28 ; home axes",
|
||||
"G92 E0 ; reset extruder position",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G28 XY ; home XY",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"extruders":[
|
||||
{
|
||||
"nozzle": 0.4,
|
||||
"filament": 1.75,
|
||||
"offset_x": 0,
|
||||
"offset_y": 0
|
||||
}
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 280,
|
||||
"bed_depth": 260,
|
||||
"build_height": 310
|
||||
},
|
||||
"profiles":[{
|
||||
"processName": "Sermoon PLA",
|
||||
"sliceHeight": 0.25,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.2,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceSolidLayers": 3,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 0,
|
||||
"firstLayerBedTemp": 0,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 35,
|
||||
"firstLayerPrintMult": 1.10,
|
||||
"firstLayerLineMult": 1.0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 210,
|
||||
"outputFanMax": 255,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 55,
|
||||
"outputFinishrate": 50,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.3,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputBrimCount": 2,
|
||||
"outputBrimOffset": 2,
|
||||
"outputRetractDist": 1,
|
||||
"outputRetractSpeed": 50,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50.0,
|
||||
"outputMinSpeed": 10.0,
|
||||
"outputCoastDist": 0,
|
||||
"outputLayerRetract": false,
|
||||
"detectThinWalls": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0
|
||||
},{
|
||||
"processName": "Sermoon PETG",
|
||||
"sliceHeight": 0.25,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.35,
|
||||
"sliceFillSparse": 0.2,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 0.25,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceSolidLayers": 3,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 0,
|
||||
"firstLayerBedTemp": 0,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 35,
|
||||
"firstLayerPrintMult": 1.10,
|
||||
"firstLayerLineMult": 1.0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 230,
|
||||
"outputFanMax": 255,
|
||||
"outputBedTemp": 85,
|
||||
"outputFanSpeed": 255,
|
||||
"outputFeedrate": 55,
|
||||
"outputFinishrate": 50,
|
||||
"outputSeekrate": 100,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.3,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputBrimCount": 2,
|
||||
"outputBrimOffset": 2,
|
||||
"outputRetractDist": 1.5,
|
||||
"outputRetractSpeed": 50,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50.0,
|
||||
"outputMinSpeed": 10.0,
|
||||
"outputCoastDist": 0,
|
||||
"outputLayerRetract": false,
|
||||
"detectThinWalls": false,
|
||||
"zHopDistance": 0,
|
||||
"antiBacklash": 0
|
||||
}]}
|
||||
37
src/kiri/dev/fdm/Cubicon.Single+.json
Normal file
37
src/kiri/dev/fdm/Cubicon.Single+.json
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"M190 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"M109 S{temp} T{tool} ; set extruder temperature",
|
||||
"M901 S35 ; set chamber temperature to 35 (standard)",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M82 ; set absolute positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 ; home axes",
|
||||
"G29 ; level bed",
|
||||
"G92 E0 ; reset all axes positions",
|
||||
"G1 X0 Y0 Z0.25 F180 ; move xy to 0,0 and z 0.25mm over bed",
|
||||
"G92 E0 ; zero the extruder",
|
||||
"G1 E15 F200 ; purge 15mm from extruder",
|
||||
"G92 E0 ; zero the extruded"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 ; turn off bed",
|
||||
"M904 ; park extruder",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"file-ext": "hvs",
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 240,
|
||||
"bed_depth": 190,
|
||||
"build_height": 200
|
||||
}
|
||||
}
|
||||
32
src/kiri/dev/fdm/Cubicon.Style.json
Normal file
32
src/kiri/dev/fdm/Cubicon.Style.json
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"pre":[
|
||||
"T{tool} ; select extruder #0",
|
||||
"M104 S{temp} ; set nozzle temp",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"M109 S{temp} ; wait for nozzle to heat",
|
||||
"S210 T{tool} ; wait for heating?",
|
||||
"M82 ; absolute extrusion mode",
|
||||
"G28 ; home",
|
||||
"G1 Z15 F6000 ; lower platform 15mm",
|
||||
"G92 E0 ; zero out extruder position",
|
||||
"G1 F200 E3 ; prime the extruder 3mm"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 ; turn off bed",
|
||||
"M904 ; park extruder",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"file-ext": "hvs",
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 150,
|
||||
"bed_depth": 150,
|
||||
"build_height": 150
|
||||
}
|
||||
}
|
||||
166
src/kiri/dev/fdm/Dagoma.Disco.Ult.V2.json
Normal file
166
src/kiri/dev/fdm/Dagoma.Disco.Ult.V2.json
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
{
|
||||
"mode": "FDM",
|
||||
"internal": 0,
|
||||
"bedHeight": 2.5,
|
||||
"bedWidth": 205,
|
||||
"bedDepth": 205,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"gcodeTime": 1,
|
||||
"maxHeight": 205,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [],
|
||||
"gcodeFeature": [],
|
||||
"gcodeTrack": [],
|
||||
"gcodeLayer": [],
|
||||
"gcodePre": [
|
||||
"G90",
|
||||
"M106 S255",
|
||||
"G28 X Y",
|
||||
"G1 X50",
|
||||
"M109 R90",
|
||||
"G28",
|
||||
"M104 S{temp}",
|
||||
"G29",
|
||||
"M107",
|
||||
"G1 X100 Y20 F3000",
|
||||
"G1 Z0.5",
|
||||
"M109 S{temp}",
|
||||
"M82",
|
||||
"G92 E0",
|
||||
"G1 F200 E10",
|
||||
"G92 E0",
|
||||
"G1 Z3",
|
||||
"G1 F6000"
|
||||
],
|
||||
"gcodePost": [
|
||||
"M106 S255",
|
||||
"M140 S0",
|
||||
"G91",
|
||||
"G1 E-1 F300",
|
||||
"G1 Z+3 F3000",
|
||||
"G90",
|
||||
"G28 X Y",
|
||||
"M107",
|
||||
"M84"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"new": false,
|
||||
"deviceName": "Dagoma Disco Ult V2",
|
||||
"imageURL": "",
|
||||
"fwRetract": false,
|
||||
"filamentSource": "direct",
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "dagoma draft",
|
||||
"sliceHeight": 0.2,
|
||||
"sliceShells": 3,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceLineWidth": 0,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceFillType": "hex",
|
||||
"sliceSupportDensity": 0.15,
|
||||
"sliceSupportOffset": 0,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 2,
|
||||
"sliceSupportArea": 0.1,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportGrow": 0,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 60,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": false,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstSliceHeight": 0.05,
|
||||
"firstLayerRate": 17,
|
||||
"firstLayerFillRate": 17,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerNozzleTemp": 205,
|
||||
"firstLayerBedTemp": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputDraftShield": false,
|
||||
"outputTemp": 220,
|
||||
"outputBedTemp": 0,
|
||||
"outputFeedrate": 60,
|
||||
"outputFinishrate": 60,
|
||||
"outputSeekrate": 120,
|
||||
"outputShellMult": 1,
|
||||
"outputFillMult": 1,
|
||||
"outputSparseMult": 1,
|
||||
"outputFanSpeed": 255,
|
||||
"outputRetractDist": 3.5,
|
||||
"outputRetractSpeed": 50,
|
||||
"outputRetractWipe": 0,
|
||||
"outputRetractDwell": 20,
|
||||
"outputBrimCount": 2,
|
||||
"outputBrimOffset": 2,
|
||||
"outputShortPoly": 100,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputAvoidGaps": true,
|
||||
"outputAlternating": false,
|
||||
"outputLayerRetract": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceMinHeight": 0.2,
|
||||
"sliceAdaptive": false,
|
||||
"zHopDistance": 0.2,
|
||||
"arcTolerance": 0,
|
||||
"antiBacklash": 1,
|
||||
"ranges": [],
|
||||
"outputFanLayer": 1,
|
||||
"sliceAngle": 45,
|
||||
"outputNozzle": 0
|
||||
}
|
||||
],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "ee5dd1884e2d",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
31
src/kiri/dev/fdm/DeltaMaker.2T.json
Normal file
31
src/kiri/dev/fdm/DeltaMaker.2T.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"G21 ; Make sure we're in metric mode",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G28 ; home axes",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 F200 E3.5 ; set feed speed, prime nozzle",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 Z30 ; position near the bed before first position"
|
||||
],
|
||||
"post":[
|
||||
"G28 ; home axes",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"nozzle_size": 0.5,
|
||||
"origin_center": true,
|
||||
"bed_width": 240,
|
||||
"bed_depth": 240,
|
||||
"bed_circle": true,
|
||||
"build_height": 480
|
||||
}
|
||||
}
|
||||
31
src/kiri/dev/fdm/DeltaMaker.Original.json
Normal file
31
src/kiri/dev/fdm/DeltaMaker.Original.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"G21 ; Make sure we're in metric mode",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G28 ; home axes",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 F200 E3.5 ; set feed speed, prime nozzle",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 Z30 ; position near the bed before first position"
|
||||
],
|
||||
"post":[
|
||||
"G28 ; home axes",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"nozzle_size": 0.35,
|
||||
"origin_center": true,
|
||||
"bed_width": 240,
|
||||
"bed_depth": 240,
|
||||
"bed_circle": true,
|
||||
"build_height": 260
|
||||
}
|
||||
}
|
||||
40
src/kiri/dev/fdm/FLSUN.QQ-S.json
Normal file
40
src/kiri/dev/fdm/FLSUN.QQ-S.json
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T0 ; set extruder temperature",
|
||||
"M140 S{bed_temp} T0 ; set bed temperature",
|
||||
"M190 S{bed_temp} T0 ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T0 ; wait for extruder to reach target temp",
|
||||
"M105 ; report temperatures",
|
||||
"M82 ; absolute extrusion mode",
|
||||
"G21 ; metric values",
|
||||
"G90 ; absolute positioning",
|
||||
"M82 ; set extruder to absolute mode",
|
||||
"M107 ; start with the fan off",
|
||||
"G28 ; Home all axes (max endstops)",
|
||||
"G1 Z15.0 F9000 ; move the platform down 15mm",
|
||||
"G92 E0 ; zero the extruded length",
|
||||
"G1 F200 E3 ; extrude 3mm of feed stock",
|
||||
"G92 E0 ; zero the extruded length again",
|
||||
"G1 F9000 ; set default move speed",
|
||||
"M117 Printing...",
|
||||
"G92 E0"
|
||||
],
|
||||
"post":[
|
||||
"G28 ; home axes",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"M107 ; fan off",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"nozzle_size": 0.4,
|
||||
"origin_center": true,
|
||||
"bed_width": 260,
|
||||
"bed_depth": 260,
|
||||
"bed_circle": true,
|
||||
"build_height": 320
|
||||
}
|
||||
}
|
||||
29
src/kiri/dev/fdm/Flashforge.Finder.json
Normal file
29
src/kiri/dev/fdm/Flashforge.Finder.json
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"pre":[
|
||||
"M118 X15.00 Y15.00 Z10.00 T{tool}",
|
||||
"M104 S{temp} T{tool}",
|
||||
"M107",
|
||||
"G90",
|
||||
"M132 X Y Z A B",
|
||||
"M907 X100 Y100 Z40 A80 B20",
|
||||
"; pre-extrude",
|
||||
"G1 X-75 Y-75 Z0.35 F400",
|
||||
"G1 Y75 E30 F1800"
|
||||
],
|
||||
"post":[
|
||||
"M107",
|
||||
"M104 S0 T{tool}",
|
||||
"G162 Z",
|
||||
"M18"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": true,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 140,
|
||||
"bed_depth": 140,
|
||||
"build_height": 140
|
||||
}
|
||||
}
|
||||
43
src/kiri/dev/fdm/Flashforge.Guider.II.json
Normal file
43
src/kiri/dev/fdm/Flashforge.Guider.II.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"pre":[
|
||||
"; set bed and nozzle temps",
|
||||
"M104 S{temp} T{tool}",
|
||||
"M140 S{bed_temp}",
|
||||
"; absolute positioning and home",
|
||||
"G90",
|
||||
"G28",
|
||||
"; wait for nozzle and bed to reach target temps",
|
||||
"M190 S{bed_temp}",
|
||||
"M109 S{temp} T{tool}",
|
||||
"M7 T{tool}",
|
||||
"M6 T{tool}",
|
||||
"; select nozzle 0",
|
||||
"M108 T{tool}",
|
||||
"G92 E0",
|
||||
"G1 E0 F300",
|
||||
"; purge nozzle",
|
||||
"G1 X150 Y75 Z15 E-2 F500",
|
||||
"G1 Y125 Z0.5 F600",
|
||||
"G1 Y50 E40 F600"
|
||||
],
|
||||
"post":[
|
||||
"; stop fan, cool nozzle and bed",
|
||||
"M107",
|
||||
"M104 S0 T{tool}",
|
||||
"M140 S0",
|
||||
"; slow descent of bed",
|
||||
"G0 F300",
|
||||
"; end print",
|
||||
"M18"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": true,
|
||||
"extrude_abs": true,
|
||||
"bed_width": 280,
|
||||
"bed_depth": 250,
|
||||
"build_height": 300
|
||||
}
|
||||
}
|
||||
39
src/kiri/dev/fdm/FolgerTech.FT5.json
Normal file
39
src/kiri/dev/fdm/FolgerTech.FT5.json
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"pre":[
|
||||
"M117 Heating",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 ; home axes",
|
||||
"G92 X0 Y0 Z0 E0 ; reset all axes positions",
|
||||
"G1 X0 Y5 Z3 ; move XY to 0,5 and Z 3mm over bed",
|
||||
"M190 S{bed_temp} T{tool} ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G0 Z0.25 ; position 0.25mm over bed",
|
||||
"M117 Purge Nozzle ; announce purge",
|
||||
"G1 X100 E30 F600 ; purge 30mm from extruder"
|
||||
],
|
||||
"post":[
|
||||
"M117 Done ; announce done",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G91 ; relative movement",
|
||||
"G1 Z10 F1200 ; drop bed 10mm",
|
||||
"G90 ; absolute positioning",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}",
|
||||
"progress": "M117 {progress}% layer {layer} / {layers}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 300,
|
||||
"build_height": 300
|
||||
}
|
||||
}
|
||||
43
src/kiri/dev/fdm/GridBot.One.json
Normal file
43
src/kiri/dev/fdm/GridBot.One.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"pre":[
|
||||
"M117 Heating ; announce heating",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S{temp} T0 ; set extruder temperature",
|
||||
"M140 S{bed_temp} T0 ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G28 ; home axes",
|
||||
"G1 F3000 ; set default move speed",
|
||||
"M190 S{bed_temp} T0 ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T0 ; wait for extruder to reach target temp",
|
||||
"M117 Purge ; announce purge",
|
||||
"G92 E0 ; set extruder position to 0",
|
||||
"G1 E20 F250 ; purge 20mm from extruder",
|
||||
"G1 X0 Y0 Z0 E1 F3000 ; move to origin / wipe",
|
||||
"M117 Start Print ; announce start of print"
|
||||
],
|
||||
"post":[
|
||||
"M117 Done ; announce done",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T0 ; turn off extruder",
|
||||
"M140 S0 T0 ; turn off bed",
|
||||
"G91 ; relative movement",
|
||||
"G1 Z10 F1200 ; drop bed 10mm",
|
||||
"G90 ; absolute positioning",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}",
|
||||
"progress": "M117 {progress}% layer {layer} / {layers}"
|
||||
},
|
||||
"settings":{
|
||||
"image_url": "/decal/gridbot.png",
|
||||
"image_anchor": 0,
|
||||
"image_scale": 1,
|
||||
"origin_center": false,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 300,
|
||||
"build_height": 300
|
||||
}
|
||||
}
|
||||
43
src/kiri/dev/fdm/GridBot.Two.json
Normal file
43
src/kiri/dev/fdm/GridBot.Two.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"pre":[
|
||||
"M117 Heating ; announce heating",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S{temp} T0 ; set extruder temperature",
|
||||
"M140 S{bed_temp} T0 ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"G28 ; home axes",
|
||||
"G1 F3000 ; set default move speed",
|
||||
"M190 S{bed_temp} T0 ; wait for bed to reach target temp",
|
||||
"M109 S{temp} T0 ; wait for extruder to reach target temp",
|
||||
"M117 Purge ; announce purge",
|
||||
"G92 E0 ; set extruder position to 0",
|
||||
"G1 E20 F250 ; purge 20mm from extruder",
|
||||
"G1 X0 Y0 Z0 E1 F3000 ; move to origin / wipe",
|
||||
"M117 Start Print ; announce start of print"
|
||||
],
|
||||
"post":[
|
||||
"M117 Done ; announce done",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T0 ; turn off extruder",
|
||||
"M140 S0 T0 ; turn off bed",
|
||||
"G91 ; relative movement",
|
||||
"G1 Z10 F1200 ; drop bed 10mm",
|
||||
"G90 ; absolute positioning",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}",
|
||||
"progress": "M117 {progress}% layer {layer} / {layers}"
|
||||
},
|
||||
"settings":{
|
||||
"image_url": "/decal/gridbot.png",
|
||||
"image_anchor": 0,
|
||||
"image_scale": 1,
|
||||
"origin_center": false,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 300,
|
||||
"build_height": 300
|
||||
}
|
||||
}
|
||||
368
src/kiri/dev/fdm/IMADE3D.JellyBOX.1.N0.4.json
Normal file
368
src/kiri/dev/fdm/IMADE3D.JellyBOX.1.N0.4.json
Normal file
|
|
@ -0,0 +1,368 @@
|
|||
{
|
||||
"deviceName": "IMADE3D JellyBOX 1 N0.4",
|
||||
"bedWidth": 177,
|
||||
"bedDepth": 155,
|
||||
"maxHeight": 140,
|
||||
"mode": "FDM",
|
||||
"new": false,
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
";============================",
|
||||
"; Jellybox Start Script Begin ",
|
||||
";============================",
|
||||
"; for slicer: Kiri:Moto",
|
||||
"; modified 2024-02-01. by LG",
|
||||
";",
|
||||
"G21 ;metric values",
|
||||
"G90 ;absolute positioning",
|
||||
"M107 ;start with the fan off",
|
||||
";",
|
||||
"; === Homing and bed leveling (if necessary)",
|
||||
";",
|
||||
"G28 ;home all axes",
|
||||
"G29 O ;auto bed leveling procedure only if leveling NOT active",
|
||||
";M500 ;optionally save the mesh",
|
||||
"G28 X ;home x to get as far from the plate as possible",
|
||||
"M420 S1 ;(re) enable bed leveling if turned off by the G28",
|
||||
"G0 Y0 F5000 ;position Y in front",
|
||||
"G0 Z5 F3000 ;position Z",
|
||||
"M190 S{bed_temp} T{tool} ;wait for the bed to reach desired temperature",
|
||||
"M109 S{temp} T{tool} ;wait for the extruder to reach desired temperature",
|
||||
"; ",
|
||||
"; === Purge 30mm of the filament",
|
||||
";",
|
||||
"G90 ;absolute positioning",
|
||||
"M400 ;make sure all is finished",
|
||||
"G92 E0 ;to reset extruder position to 0 after finished previous print",
|
||||
"G1 E30 F200 ;extrude 30mm of feed stock",
|
||||
"G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";",
|
||||
";===================================",
|
||||
"; Jellybox Printer Start Script End",
|
||||
";==================================="
|
||||
],
|
||||
"gcodePost": [
|
||||
";---------------------------------",
|
||||
";;; Jellybox End Script Begin ;;;",
|
||||
";_________________________________",
|
||||
"; end gcode last modified 2022-01-13",
|
||||
"M117 Finishing Up ;write Finishing Up",
|
||||
"M107 ;turn the fan off",
|
||||
"M104 S0 ;extruder heater off",
|
||||
"M140 S0 ;bed heater off (if you have it)",
|
||||
"G91 ;relative positioning (includes extruder)",
|
||||
"G1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure",
|
||||
"G1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more",
|
||||
"G1 E-25 F2000 ;retract even more",
|
||||
"G90 ;absolute positioning (includes extruder)",
|
||||
"G28 X ;home X so the head is out of the way",
|
||||
"G1 Y140 ;move Y forward, so the print is more accessible",
|
||||
"M84 ;steppers off",
|
||||
"M117 Print finished ;write Print finished",
|
||||
";---------------------------------------",
|
||||
";;; Jellybox End Script End ;;;",
|
||||
";_______________________________________"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "JB1 PLA - N0.4 L0.3 T210",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 215,
|
||||
"firstLayerBedTemp": 60,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 210,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 130,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 1.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB1 FLEX - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 238,
|
||||
"firstLayerBedTemp": 55,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerFillRate": 10,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 55,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 15,
|
||||
"outputFinishrate": 10,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.2,
|
||||
"outputSparseMult": 1.4,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 0.5,
|
||||
"outputRetractSpeed": 20,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 1,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 15,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 10,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB1 PETG - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 235,
|
||||
"firstLayerBedTemp": 70,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
}
|
||||
],
|
||||
"filamentSource": "direct",
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "9c94bc185556",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
368
src/kiri/dev/fdm/IMADE3D.JellyBOX.2.N0.4.json
Normal file
368
src/kiri/dev/fdm/IMADE3D.JellyBOX.2.N0.4.json
Normal file
|
|
@ -0,0 +1,368 @@
|
|||
{
|
||||
"deviceName": "IMADE3D JellyBOX 2 N0.4",
|
||||
"bedWidth": 177,
|
||||
"bedDepth": 155,
|
||||
"maxHeight": 140,
|
||||
"mode": "FDM",
|
||||
"new": false,
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
";============================",
|
||||
"; Jellybox Start Script Begin ",
|
||||
";============================",
|
||||
"; for slicer: Kiri:Moto",
|
||||
"; modified 2024-02-01. by LG",
|
||||
";",
|
||||
"G21 ;metric values",
|
||||
"G90 ;absolute positioning",
|
||||
"M107 ;start with the fan off",
|
||||
";",
|
||||
"; === Homing and bed leveling (if necessary)",
|
||||
";",
|
||||
"G28 ;home all axes",
|
||||
"G29 O ;auto bed leveling procedure only if leveling NOT active",
|
||||
";M500 ;optionally save the mesh",
|
||||
"G28 X ;home x to get as far from the plate as possible",
|
||||
"M420 S1 ;(re) enable bed leveling if turned off by the G28",
|
||||
"G0 Y0 F5000 ;position Y in front",
|
||||
"G0 Z5 F3000 ;position Z",
|
||||
"M190 S{bed_temp} T{tool} ;wait for the bed to reach desired temperature",
|
||||
"M109 S{temp} T{tool} ;wait for the extruder to reach desired temperature",
|
||||
"; ",
|
||||
"; === Purge 30mm of the filament",
|
||||
";",
|
||||
"G90 ;absolute positioning",
|
||||
"M400 ;make sure all is finished",
|
||||
"G92 E0 ;to reset extruder position to 0 after finished previous print",
|
||||
"G1 E30 F200 ;extrude 30mm of feed stock",
|
||||
"G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";",
|
||||
";===================================",
|
||||
"; Jellybox Printer Start Script End",
|
||||
";==================================="
|
||||
],
|
||||
"gcodePost": [
|
||||
";---------------------------------",
|
||||
";;; Jellybox End Script Begin ;;;",
|
||||
";_________________________________",
|
||||
"; end gcode last modified 2022-01-13",
|
||||
"M117 Finishing Up ;write Finishing Up",
|
||||
"M107 ;turn the fan off",
|
||||
"M104 S0 ;extruder heater off",
|
||||
"M140 S0 ;bed heater off (if you have it)",
|
||||
"G91 ;relative positioning (includes extruder)",
|
||||
"G1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure",
|
||||
"G1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more",
|
||||
"G1 E-25 F2000 ;retract even more",
|
||||
"G90 ;absolute positioning (includes extruder)",
|
||||
"G28 X ;home X so the head is out of the way",
|
||||
"G1 Y140 ;move Y forward, so the print is more accessible",
|
||||
"M84 ;steppers off",
|
||||
"M117 Print finished ;write Print finished",
|
||||
";---------------------------------------",
|
||||
";;; Jellybox End Script End ;;;",
|
||||
";_______________________________________"
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "JB2 PLA - N0.4 L0.3 T210",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 215,
|
||||
"firstLayerBedTemp": 60,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 210,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 130,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 1.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB2 PETG - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 235,
|
||||
"firstLayerBedTemp": 70,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB2 FLEX - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 238,
|
||||
"firstLayerBedTemp": 55,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerFillRate": 10,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 55,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 15,
|
||||
"outputFinishrate": 10,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.2,
|
||||
"outputSparseMult": 1.4,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 0.5,
|
||||
"outputRetractSpeed": 20,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 1,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 15,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 10,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
}
|
||||
],
|
||||
"filamentSource": "direct",
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "e888752465a2",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
369
src/kiri/dev/fdm/IMADE3D.JellyBOX.3.N0.4.json
Normal file
369
src/kiri/dev/fdm/IMADE3D.JellyBOX.3.N0.4.json
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"deviceName": "IMADE3D JellyBOX 3 N0.4",
|
||||
"bedWidth": 180,
|
||||
"bedDepth": 165,
|
||||
"maxHeight": 140,
|
||||
"mode": "FDM",
|
||||
"new": false,
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
";============================",
|
||||
"; Jellybox Start Script Begin ",
|
||||
";============================",
|
||||
"; for slicer: Kiri:Moto",
|
||||
"; modified 2024-02-01. by LG",
|
||||
";",
|
||||
"G21 ;metric values",
|
||||
"G90 ;absolute positioning",
|
||||
"M107 ;start with the fan off",
|
||||
";",
|
||||
"; === Homing and bed leveling (if necessary)",
|
||||
";",
|
||||
"G28 ;home all axes",
|
||||
"G29 O ;auto bed leveling procedure only if leveling NOT active",
|
||||
";M500 ;optionally save the mesh",
|
||||
"G28 X ;home x to get as far from the plate as possible",
|
||||
"M420 S1 ;(re) enable bed leveling if turned off by the G28",
|
||||
"G0 Y0 F5000 ;position Y in front",
|
||||
"G0 Z5 F3000 ;position Z",
|
||||
"M190 S{bed_temp} T{tool} ;wait for the bed to reach desired temperature",
|
||||
"M109 S{temp} T{tool} ;wait for the extruder to reach desired temperature",
|
||||
"; ",
|
||||
"; === Purge 30mm of the filament",
|
||||
";",
|
||||
"G90 ;absolute positioning",
|
||||
"M400 ;make sure all is finished",
|
||||
"G92 E0 ;to reset extruder position to 0 after finished previous print",
|
||||
"G1 E30 F200 ;extrude 30mm of feed stock",
|
||||
"G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";",
|
||||
";===================================",
|
||||
"; Jellybox Printer Start Script End",
|
||||
";==================================="
|
||||
],
|
||||
"gcodePost": [
|
||||
";============================",
|
||||
"; Jellybox End Script Begin ",
|
||||
";============================",
|
||||
"; modified 2024-02-01",
|
||||
"M117 Finishing Up ;write Finishing Up",
|
||||
"M107 ;turn the fan off",
|
||||
"M104 S0 ;extruder heater off",
|
||||
"M140 S0 ;bed heater off (if you have it)",
|
||||
"G91 ;relative positioning (includes extruder)",
|
||||
"G1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure",
|
||||
"G1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more",
|
||||
"G1 E-25 F2000 ;retract even more",
|
||||
"G90 ;absolute positioning (includes extruder)",
|
||||
"G28 X ;home X so the head is out of the way",
|
||||
"G1 Y140 ;move Y forward, so the print is more accessible",
|
||||
"G92 E0 ;reset the extruder position Z to 0",
|
||||
"M84 ;steppers off",
|
||||
"M117 Print finished ;write Print finished",
|
||||
";=========================",
|
||||
"; Jellybox End Script End ",
|
||||
";========================="
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "JB3 PLA - N0.4 L0.3 T210",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 215,
|
||||
"firstLayerBedTemp": 60,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 210,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 130,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 1.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB3 PETG - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 235,
|
||||
"firstLayerBedTemp": 70,
|
||||
"firstLayerRate": 20,
|
||||
"firstLayerFillRate": 25,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 45,
|
||||
"outputFinishrate": 20,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.2,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB3 TPU - N0.4 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 238,
|
||||
"firstLayerBedTemp": 55,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerFillRate": 10,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 55,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 15,
|
||||
"outputFinishrate": 10,
|
||||
"outputSeekrate": 80,
|
||||
"outputShellMult": 1.2,
|
||||
"outputFillMult": 1.2,
|
||||
"outputSparseMult": 1.4,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 0.5,
|
||||
"outputRetractSpeed": 20,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 1,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.45,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 15,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.2,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 10,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
}
|
||||
],
|
||||
"filamentSource": "direct",
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "e292e5c84d0d",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
369
src/kiri/dev/fdm/IMADE3D.JellyBOX.4.N0.4.json
Normal file
369
src/kiri/dev/fdm/IMADE3D.JellyBOX.4.N0.4.json
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"deviceName": "IMADE3D JellyBOX 4 N0.4",
|
||||
"bedWidth": 180,
|
||||
"bedDepth": 165,
|
||||
"maxHeight": 150,
|
||||
"mode": "FDM",
|
||||
"new": false,
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
";============================",
|
||||
"; Jellybox Start Script Begin ",
|
||||
";============================",
|
||||
"; for slicer: Kiri:Moto",
|
||||
"; modified 2024-02-01. by LG",
|
||||
";",
|
||||
"G21 ;metric values",
|
||||
"G90 ;absolute positioning",
|
||||
"M107 ;start with the fan off",
|
||||
";",
|
||||
"; === Homing and bed leveling (if necessary)",
|
||||
";",
|
||||
"G28 ;home all axes",
|
||||
"G29 O ;auto bed leveling procedure only if leveling NOT active",
|
||||
";M500 ;optionally save the mesh",
|
||||
"G28 X ;home x to get as far from the plate as possible",
|
||||
"M420 S1 ;(re) enable bed leveling if turned off by the G28",
|
||||
"G0 Y0 F5000 ;position Y in front",
|
||||
"G0 Z5 F3000 ;position Z",
|
||||
"M190 S{bed_temp} T{tool} ;wait for the bed to reach desired temperature",
|
||||
"M109 S{temp} T{tool} ;wait for the extruder to reach desired temperature",
|
||||
"; ",
|
||||
"; === Purge 30mm of the filament",
|
||||
";",
|
||||
"G90 ;absolute positioning",
|
||||
"M400 ;make sure all is finished",
|
||||
"G92 E0 ;to reset extruder position to 0 after finished previous print",
|
||||
"G1 E30 F200 ;extrude 30mm of feed stock",
|
||||
"G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";",
|
||||
";===================================",
|
||||
"; Jellybox Printer Start Script End",
|
||||
";==================================="
|
||||
],
|
||||
"gcodePost": [
|
||||
";============================",
|
||||
"; Jellybox End Script Begin ",
|
||||
";============================",
|
||||
"; modified 2024-02-01",
|
||||
"M117 Finishing Up ;write Finishing Up",
|
||||
"M107 ;turn the fan off",
|
||||
"M104 S0 ;extruder heater off",
|
||||
"M140 S0 ;bed heater off (if you have it)",
|
||||
"G91 ;relative positioning (includes extruder)",
|
||||
"G1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure",
|
||||
"G1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more",
|
||||
"G1 E-25 F2000 ;retract even more",
|
||||
"G90 ;absolute positioning (includes extruder)",
|
||||
"G28 X ;home X so the head is out of the way",
|
||||
"G1 Y140 ;move Y forward, so the print is more accessible",
|
||||
"G92 E0 ;reset the extruder position Z to 0",
|
||||
"M84 ;steppers off",
|
||||
"M117 Print finished ;write Print finished",
|
||||
";=========================",
|
||||
"; Jellybox End Script End ",
|
||||
";========================="
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.4,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "JB4 PLA - N0.4 L0.3 T215",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 215,
|
||||
"firstLayerBedTemp": 60,
|
||||
"firstLayerRate": 40,
|
||||
"firstLayerFillRate": 30,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 215,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 200,
|
||||
"outputFeedrate": 70,
|
||||
"outputFinishrate": 35,
|
||||
"outputSeekrate": 120,
|
||||
"outputShellMult": 1.15,
|
||||
"outputFillMult": 1.15,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 1.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.3,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.4,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": false,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB4 PETG - N0.4 L0.3 T240",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 235,
|
||||
"firstLayerBedTemp": 70,
|
||||
"firstLayerRate": 40,
|
||||
"firstLayerFillRate": 50,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 240,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 70,
|
||||
"outputFinishrate": 35,
|
||||
"outputSeekrate": 100,
|
||||
"outputShellMult": 1.05,
|
||||
"outputFillMult": 1.05,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 0.3,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.4,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB4 TPU - N0.4 L0.3 T230",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 230,
|
||||
"firstLayerBedTemp": 55,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerFillRate": 10,
|
||||
"firstLayerPrintMult": 1.2,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 230,
|
||||
"outputBedTemp": 55,
|
||||
"outputFanSpeed": 75,
|
||||
"outputFeedrate": 23,
|
||||
"outputFinishrate": 15,
|
||||
"outputSeekrate": 100,
|
||||
"outputShellMult": 1.15,
|
||||
"outputFillMult": 1.15,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 0.5,
|
||||
"outputRetractSpeed": 20,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": true,
|
||||
"zHopDistance": 1,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.4,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 15,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 10,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
}
|
||||
],
|
||||
"filamentSource": "direct",
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "57c7e3bd6e44",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
374
src/kiri/dev/fdm/IMADE3D.JellyBOX.4.N0.6.json
Normal file
374
src/kiri/dev/fdm/IMADE3D.JellyBOX.4.N0.6.json
Normal file
|
|
@ -0,0 +1,374 @@
|
|||
{
|
||||
"deviceName": "IMADE3D JellyBOX 4 N0.6",
|
||||
"bedWidth": 180,
|
||||
"bedDepth": 165,
|
||||
"maxHeight": 150,
|
||||
"mode": "FDM",
|
||||
"new": false,
|
||||
"internal": 0,
|
||||
"imageURL": "",
|
||||
"bedHeight": 2.5,
|
||||
"bedRound": false,
|
||||
"bedBelt": false,
|
||||
"deviceZMax": 0,
|
||||
"originCenter": false,
|
||||
"gcodeFan": [
|
||||
"M106 S{fan_speed}"
|
||||
],
|
||||
"gcodeTrack": [
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodeLayer": [
|
||||
";; --- layer {layer} {height} @ {z} ---",
|
||||
"M117 {progress}% layer {layer} / {layers}"
|
||||
],
|
||||
"gcodePre": [
|
||||
";============================",
|
||||
"; Jellybox Start Script Begin ",
|
||||
";============================",
|
||||
"; for slicer: Kiri:Moto",
|
||||
"; modified 2024-02-01. by LG",
|
||||
";",
|
||||
"G21 ;metric values",
|
||||
"G90 ;absolute positioning",
|
||||
"M107 ;start with the fan off",
|
||||
";",
|
||||
"; === Homing and bed leveling (if necessary)",
|
||||
";",
|
||||
"G28 ;home all axes",
|
||||
"G29 O ;auto bed leveling procedure only if leveling NOT active",
|
||||
";M500 ;optionally save the mesh",
|
||||
"G28 X ;home x to get as far from the plate as possible",
|
||||
"M420 S1 ;(re) enable bed leveling if turned off by the G28",
|
||||
"G0 Y0 F5000 ;position Y in front",
|
||||
"G0 Z5 F3000 ;position Z",
|
||||
"M190 S{bed_temp} T{tool} ;wait for the bed to reach desired temperature",
|
||||
"M109 S{temp} T{tool} ;wait for the extruder to reach desired temperature",
|
||||
"; ",
|
||||
"; === Purge 30mm of the filament",
|
||||
";",
|
||||
"G90 ;absolute positioning",
|
||||
"M400 ;make sure all is finished",
|
||||
"G92 E0 ;to reset extruder position to 0 after finished previous print",
|
||||
"G1 E30 F200 ;extrude 30mm of feed stock",
|
||||
"G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";",
|
||||
"; === Print front line",
|
||||
";",
|
||||
";G0 Z0.2 ; move Z 0.3mm above bed",
|
||||
";G1 X160 E30 F1000 ; intro line ",
|
||||
";G92 E0 ;reset the extruder position Z is 0 again.",
|
||||
";===================================",
|
||||
"; Jellybox Printer Start Script End",
|
||||
";==================================="
|
||||
],
|
||||
"gcodePost": [
|
||||
";============================",
|
||||
"; Jellybox End Script Begin ",
|
||||
";============================",
|
||||
"; modified 2024-02-01",
|
||||
"M117 Finishing Up ;write Finishing Up",
|
||||
"M107 ;turn the fan off",
|
||||
"M104 S0 ;extruder heater off",
|
||||
"M140 S0 ;bed heater off (if you have it)",
|
||||
"G91 ;relative positioning (includes extruder)",
|
||||
"G1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure",
|
||||
"G1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more",
|
||||
"G1 E-25 F2000 ;retract even more",
|
||||
"G90 ;absolute positioning (includes extruder)",
|
||||
"G28 X ;home X so the head is out of the way",
|
||||
"G1 Y140 ;move Y forward, so the print is more accessible",
|
||||
"G92 E0 ;reset the extruder position Z to 0",
|
||||
"M84 ;steppers off",
|
||||
"M117 Print finished ;write Print finished",
|
||||
";=========================",
|
||||
"; Jellybox End Script End ",
|
||||
";========================="
|
||||
],
|
||||
"gcodeProc": "",
|
||||
"gcodeFExt": "gcode",
|
||||
"extruders": [
|
||||
{
|
||||
"extFilament": 1.75,
|
||||
"extNozzle": 0.6,
|
||||
"extOffsetX": 0,
|
||||
"extOffsetY": 0
|
||||
}
|
||||
],
|
||||
"fwRetract": false,
|
||||
"profiles": [
|
||||
{
|
||||
"processName": "JB4 PLA - N0.6 L0.3 T220",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0.1,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 3,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 220,
|
||||
"firstLayerBedTemp": 65,
|
||||
"firstLayerRate": 40,
|
||||
"firstLayerFillRate": 50,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 220,
|
||||
"outputBedTemp": 60,
|
||||
"outputFanSpeed": 200,
|
||||
"outputFeedrate": 60,
|
||||
"outputFinishrate": 30,
|
||||
"outputSeekrate": 100,
|
||||
"outputShellMult": 1.1,
|
||||
"outputFillMult": 1.1,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2.4,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 0.3,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.6,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB4 PETG - N0.6 L0.3 T245",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0.1,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 2,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 245,
|
||||
"firstLayerBedTemp": 75,
|
||||
"firstLayerRate": 30,
|
||||
"firstLayerFillRate": 35,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 245,
|
||||
"outputBedTemp": 70,
|
||||
"outputFanSpeed": 128,
|
||||
"outputFeedrate": 100,
|
||||
"outputFinishrate": 50,
|
||||
"outputSeekrate": 120,
|
||||
"outputShellMult": 1.1,
|
||||
"outputFillMult": 1.1,
|
||||
"outputSparseMult": 1.2,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 0.3,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.6,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
},
|
||||
{
|
||||
"processName": "JB4 TPU - N0.6 L0.3 T235",
|
||||
"sliceHeight": 0.3,
|
||||
"sliceShells": 2,
|
||||
"sliceShellOrder": "in-out",
|
||||
"sliceLayerStart": "last",
|
||||
"sliceFillAngle": 45,
|
||||
"sliceFillWidth": 1,
|
||||
"sliceFillOverlap": 0.25,
|
||||
"sliceFillSparse": 0.1,
|
||||
"sliceFillType": "hex",
|
||||
"sliceAdaptive": false,
|
||||
"sliceMinHeight": 0.1,
|
||||
"sliceSupportDensity": 0.25,
|
||||
"sliceSupportOffset": 0.6,
|
||||
"sliceSupportGap": 1,
|
||||
"sliceSupportSize": 6,
|
||||
"sliceSupportArea": 3,
|
||||
"sliceSupportExtra": 0,
|
||||
"sliceSupportAngle": 50,
|
||||
"sliceSupportNozzle": 0,
|
||||
"sliceSolidMinArea": 1,
|
||||
"sliceBottomLayers": 2,
|
||||
"sliceTopLayers": 3,
|
||||
"firstLayerNozzleTemp": 235,
|
||||
"firstLayerBedTemp": 55,
|
||||
"firstLayerRate": 10,
|
||||
"firstLayerFillRate": 15,
|
||||
"firstLayerPrintMult": 1,
|
||||
"firstLayerLineMult": 1,
|
||||
"firstLayerFanSpeed": 0,
|
||||
"outputRaft": false,
|
||||
"outputRaftSpacing": 0.2,
|
||||
"outputTemp": 235,
|
||||
"outputBedTemp": 40,
|
||||
"outputFanSpeed": 64,
|
||||
"outputFeedrate": 15,
|
||||
"outputFinishrate": 10,
|
||||
"outputSeekrate": 40,
|
||||
"outputShellMult": 1.3,
|
||||
"outputFillMult": 1.1,
|
||||
"outputSparseMult": 1.3,
|
||||
"outputBrimCount": 5,
|
||||
"outputBrimOffset": 5,
|
||||
"outputRetractDist": 2.8,
|
||||
"outputRetractSpeed": 40,
|
||||
"outputRetractWipe": 0.8,
|
||||
"outputRetractDwell": 10,
|
||||
"outputShortPoly": 50,
|
||||
"outputMinSpeed": 10,
|
||||
"outputCoastDist": 0.4,
|
||||
"outputLayerRetract": false,
|
||||
"zHopDistance": 1,
|
||||
"antiBacklash": 0,
|
||||
"sliceLineWidth": 0.6,
|
||||
"sliceFillRepeat": 1,
|
||||
"sliceFillRate": 0,
|
||||
"sliceSupportSpan": 5,
|
||||
"sliceSupportEnable": false,
|
||||
"sliceSupportOutline": true,
|
||||
"firstSliceHeight": 0.3,
|
||||
"firstLayerYOffset": 0,
|
||||
"firstLayerBrim": 0,
|
||||
"firstLayerBrimIn": 0,
|
||||
"firstLayerBrimTrig": 0,
|
||||
"firstLayerBrimGap": 0,
|
||||
"firstLayerBeltLead": 3,
|
||||
"firstLayerBeltBump": 0,
|
||||
"firstLayerFlatten": 0,
|
||||
"outputPurgeTower": 0,
|
||||
"outputBeltFirst": false,
|
||||
"outputLoops": 0,
|
||||
"outputInvertX": false,
|
||||
"outputInvertY": false,
|
||||
"arcTolerance": 0.15,
|
||||
"ranges": [],
|
||||
"outputDraftShield": false,
|
||||
"outputAvoidGaps": true,
|
||||
"sliceFillGrow": 0,
|
||||
"sliceSolidRate": 0,
|
||||
"sliceDetectThin": "off",
|
||||
"sliceLayerStartX": 0,
|
||||
"sliceLayerStartY": 0,
|
||||
"sliceSupportGrow": 0,
|
||||
"outputAlternating": false
|
||||
}
|
||||
],
|
||||
"filamentSource": "direct",
|
||||
"gcodeTime": 1,
|
||||
"gcodeFeature": [],
|
||||
"extras": {
|
||||
"palette": {
|
||||
"printer": "3c0a256d3a4a",
|
||||
"ping": null,
|
||||
"feed": null,
|
||||
"push": null,
|
||||
"offset": null,
|
||||
"heat": null,
|
||||
"cool": null,
|
||||
"press": null
|
||||
}
|
||||
}
|
||||
}
|
||||
35
src/kiri/dev/fdm/Leapfrog.CreatrHS.json
Normal file
35
src/kiri/dev/fdm/Leapfrog.CreatrHS.json
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"pre":[
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"G28 Z0 ; home Z axis",
|
||||
"G92 X0 Y0 Z0 E0 ; reset all axes positions",
|
||||
"G1 Z0.25 F180 ; move z to 0.25mm over bed",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 E15 F300 ; purge 15mm from extruder",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 F225 ; set feed speed"
|
||||
],
|
||||
"post":[
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G1 Z{z_max} F1200 ; drop bed",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"bed_width": 270,
|
||||
"bed_depth": 280,
|
||||
"build_height": 180
|
||||
}
|
||||
}
|
||||
37
src/kiri/dev/fdm/MakerGear.M2.json
Normal file
37
src/kiri/dev/fdm/MakerGear.M2.json
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"pre":[
|
||||
"M108 S255 ; set extruder speed",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature",
|
||||
"M140 S{bed_temp} T{tool} ; set bed temperature",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"G28 XY ; home XY axes",
|
||||
"G28 Z ; home Z axis",
|
||||
"G92 X0 Y0 Z0 E0 ; reset all axes positions",
|
||||
"G1 Z0.25 F180 ; move z to 0.25mm over bed",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"M109 S{temp} T{tool} ; wait for extruder to reach target temp",
|
||||
"G1 E15 F300 ; purge 15mm from extruder",
|
||||
"G92 E0 ; zero the extruded",
|
||||
"G1 F225 ; set feed speed"
|
||||
],
|
||||
"post":[
|
||||
"M108 S0 ; set extruder speed",
|
||||
"M107 ; turn off filament cooling fan",
|
||||
"M104 S0 T{tool} ; turn off right extruder",
|
||||
"M140 S0 T{tool} ; turn off bed",
|
||||
"G1 Z200 F1200 ; drop bed",
|
||||
"G28 X0 Y0 ; home XY axes",
|
||||
"M84 ; disable stepper motors"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M106 S{fan_speed}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": false,
|
||||
"bed_width": 200,
|
||||
"bed_depth": 250,
|
||||
"build_height": 200
|
||||
}
|
||||
}
|
||||
44
src/kiri/dev/fdm/Makerbot.Replicator2.json
Normal file
44
src/kiri/dev/fdm/Makerbot.Replicator2.json
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
"pre":[
|
||||
"M73 P0 ; set progress to 0%",
|
||||
"G90 ; set absolute positioning mode",
|
||||
"M83 ; set relative positioning for extruder",
|
||||
"M104 S{temp} T{tool} ; set extruder temperature for T{tool} (tool 0)",
|
||||
"M127 ; close extruder valve (if it has one)",
|
||||
"G162 X Y F3000 ; move X,Y axis to maximum position at speed 3000 (top/right of table)",
|
||||
"G161 Z F1200 ; move Z axis to minimum position as speed 1200 (bottom)",
|
||||
"G92 Z-5 ; set Z axis value to -5 (no move)",
|
||||
"G1 Z0 ; move Z axis to 0 (lifting it 5mm off endstop)",
|
||||
"G161 Z F100 ; move Z axis to minimum position at speed 100",
|
||||
"M132 X Y Z A B ; load EEPROM home offsets for all axis",
|
||||
"G1 X{left} Y{bottom+10} Z30 F9000 ; move to wait position off table",
|
||||
"G130 X20 Y20 Z20 A20 B20 ; lower stepper Vrefs to give more juice to the extruder heater",
|
||||
"M133 T{tool} ; wait for extruder T{tool} temperature to stabilize",
|
||||
"G130 X127 Y127 Z40 A127 B127 ; default stepper Vrefs now that extruder is hot",
|
||||
"G92 A0 ; set extruder position value to 0 (no move)",
|
||||
"G1 Z0.4 ; move nozzle just above the bed height",
|
||||
"G1 E25 F300 ; purge extruder for 25mm at speed 300",
|
||||
"G1 X{left+10} Y{bottom+10} Z0.15 F1200 ; slow wipe",
|
||||
"G1 X{left+15} Y{bottom+15} Z0.5 F1200 ; lift",
|
||||
"G92 A0 ; set extruder position value to 0 (no move)",
|
||||
"M135 T{tool} ; set toolhead 0"
|
||||
],
|
||||
"post":[
|
||||
"M127 ; stop filament cooling fan",
|
||||
"M73 P100 ; set build progress to 100%",
|
||||
"G1 Z150 F1000 ; send Z axis to bottom (engaging end stop)",
|
||||
"G162 X Y F3000 ; move X,Y axis to maximum position at speed 3000 (top/right of table)",
|
||||
"M18 ; disable all stepper motors",
|
||||
"M72 P1 ; play song 1 (tada)"
|
||||
],
|
||||
"cmd":{
|
||||
"fan_power": "M126 S{fan_speed}",
|
||||
"progress": "M73 P{progress}"
|
||||
},
|
||||
"settings":{
|
||||
"origin_center": true,
|
||||
"bed_width": 300,
|
||||
"bed_depth": 175,
|
||||
"build_height": 150
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue