re-org code and functions with more to come

This commit is contained in:
Stewart Allen 2020-03-08 20:58:26 -04:00
commit 6ca517a71e
2 changed files with 313 additions and 286 deletions

View file

@ -16,7 +16,7 @@ self.kiri.license = exports.LICENSE;
} }
} }
var iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent), let iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent),
// --------------- // ---------------
MODES = { MODES = {
FDM: 1, // fused deposition modeling (also FFF) FDM: 1, // fused deposition modeling (also FFF)
@ -494,22 +494,19 @@ self.kiri.license = exports.LICENSE;
settingsDefault = settings, settingsDefault = settings,
autoDecimate = true, autoDecimate = true,
// --------------- // ---------------
SELF = self, MOTO = moto,
MOTO = moto, KIRI = self.kiri,
KIRI = SELF.kiri, BASE = self.base,
BASE = SELF.base, UTIL = BASE.util,
UTIL = BASE.util, DBUG = BASE.debug,
DBUG = BASE.debug, LANG = KIRI.lang.current,
LANG = KIRI.lang.current, WIN = self.window,
// --------------- DOC = self.document,
WIN = SELF.window, LOC = self.location,
DOC = SELF.document, HOST = LOC.host.split(':'),
LOC = SELF.location, LOCAL = HOST[0] === 'localhost' || HOST[0] === 'debug',
SETUP = parseOpt(LOC.search.substring(1)), SETUP = parseOpt(LOC.search.substring(1)),
HOST = LOC.host.split(':'), SECURE = isSecure(LOC.protocol),
LOCAL = HOST[0] === 'localhost' || HOST[0] === 'debug',
SECURE = isSecure(LOC.protocol),
// ---------------
SDB = MOTO.KV, SDB = MOTO.KV,
ODB = KIRI.odb = new MOTO.Storage(SETUP.d ? SETUP.d[0] : 'kiri'), ODB = KIRI.odb = new MOTO.Storage(SETUP.d ? SETUP.d[0] : 'kiri'),
SPACE = KIRI.space = MOTO.Space, SPACE = KIRI.space = MOTO.Space,
@ -518,7 +515,7 @@ self.kiri.license = exports.LICENSE;
STATS = new Stats(SDB), STATS = new Stats(SDB),
SEED = 'kiri-seed', SEED = 'kiri-seed',
// --------------- // ---------------
Widget = kiri.Widget, Widget = kiri.Widget,
newWidget = kiri.newWidget, newWidget = kiri.newWidget,
// --------------- // ---------------
UI = {}, UI = {},
@ -562,7 +559,18 @@ self.kiri.license = exports.LICENSE;
camTopZ = 0, camTopZ = 0,
topZ = 0, topZ = 0,
// origin = {x:0, y:0, z:0}, // origin = {x:0, y:0, z:0},
showFavorites = SDB['dev-favorites'] === 'true'; showFavorites = SDB['dev-favorites'] === 'true',
selectedTool = null,
editTools = null,
ROT = Math.PI/2,
ROT5 = ROT / 9,
ALL = [MODES.FDM, MODES.LASER, MODES.CAM],
CAM = [MODES.CAM],
FDM = [MODES.FDM],
FDM_CAM = [MODES.CAM,MODES.FDM],
FDM_LASER = [MODES.LASER,MODES.FDM],
CAM_LASER = [MODES.LASER,MODES.CAM],
LASER = [MODES.LASER];
// seed defaults. will get culled on save // seed defaults. will get culled on save
settings.sproc.FDM.default = clone(settings.process); settings.sproc.FDM.default = clone(settings.process);
@ -576,7 +584,25 @@ self.kiri.license = exports.LICENSE;
if (SETUP.rm) renderMode = parseInt(SETUP.rm[0]); if (SETUP.rm) renderMode = parseInt(SETUP.rm[0]);
if (SETUP.ln) KIRI.lang.set(SETUP.ln[0]); if (SETUP.ln) KIRI.lang.set(SETUP.ln[0]);
var alerts = [ [ `${LANG.version} ${KIRI.version}`, Date.now() ] ]; let alerts = [ [ `${LANG.version} ${KIRI.version}`, Date.now() ] ];
const platform = {
add: platformAdd,
delete: platformDelete,
layout: platformLayout,
load: platformLoad,
load_stl: platformLoadSTL,
deselect: platformDeselect,
select: platformSelect,
select_all: platformSelectAll,
selected_count: platformSelectedCount,
compute_max_z: platformComputeMaxZ,
update_origin: platformUpdateOrigin,
update_bounds: platformUpdateBounds,
update_stock: platformUpdateStock,
update_size: platformUpdateSize,
update_top_z: platformUpdateTopZ
};
KIRI.api = { KIRI.api = {
ui : UI, ui : UI,
@ -586,7 +612,7 @@ self.kiri.license = exports.LICENSE;
js2o : js2o, js2o : js2o,
ajax : ajax, ajax : ajax,
help : showHelp, help : showHelp,
load : loadWidget, load : platform.load,
alert: alert2, alert: alert2,
focus : takeFocus, focus : takeFocus,
stats : STATS, stats : STATS,
@ -602,7 +628,7 @@ self.kiri.license = exports.LICENSE;
showCatalog : showCatalog, showCatalog : showCatalog,
addWidget : platformAdd, addWidget : platformAdd,
selectAll : platformSelectAll, selectAll : platformSelectAll,
selectNone : widgetDeselect, selectNone : platform.deselect,
showProgress : setProgress, showProgress : setProgress,
clearWorker : KIRI.work.clear, clearWorker : KIRI.work.clear,
getSettings : getSettings, getSettings : getSettings,
@ -1472,7 +1498,7 @@ self.kiri.license = exports.LICENSE;
clearPrint(); clearPrint();
saveSettings(); saveSettings();
widgetDeselect(); platform.deselect();
var firstMesh = true, var firstMesh = true,
countdown = WIDGETS.length, countdown = WIDGETS.length,
@ -1533,7 +1559,7 @@ self.kiri.license = exports.LICENSE;
errored = true; errored = true;
setViewMode(VIEWS.ARRANGE); setViewMode(VIEWS.ARRANGE);
setOpacity(model_opacity); setOpacity(model_opacity);
widgetDeselect(); platform.deselect();
alert2(error); alert2(error);
} }
}, function(update, msg) { }, function(update, msg) {
@ -1563,6 +1589,10 @@ self.kiri.license = exports.LICENSE;
return (settings.device.nozzleSize / 2) * fillOffsetMult(); return (settings.device.nozzleSize / 2) * fillOffsetMult();
} }
/** ******************************************************************
* Selection Functions
******************************************************************* */
function meshUpdateInfo(mesh) { function meshUpdateInfo(mesh) {
if (!mesh) { if (!mesh) {
if (selectedMeshes.length === 0) { if (selectedMeshes.length === 0) {
@ -1592,7 +1622,7 @@ self.kiri.license = exports.LICENSE;
function moveSelection(x, y, z, abs) { function moveSelection(x, y, z, abs) {
forSelectedWidgets(function (w) { w.move(x, y, z, abs) }); forSelectedWidgets(function (w) { w.move(x, y, z, abs) });
updateCamStock(); platform.update_stock();
SPACE.update(); SPACE.update();
} }
@ -1613,26 +1643,18 @@ self.kiri.license = exports.LICENSE;
UI.scaleX.value = 1; UI.scaleX.value = 1;
UI.scaleY.value = 1; UI.scaleY.value = 1;
UI.scaleZ.value = 1; UI.scaleZ.value = 1;
platformComputeMaxZ(); platform.compute_max_z();
updateCamStock(true); platform.update_stock(true);
SPACE.update(); SPACE.update();
} }
function rotateSelection(x, y, z) { function rotateSelection(x, y, z) {
forSelectedWidgets(function (w) { w.rotate(x, y, z) }); forSelectedWidgets(function (w) { w.rotate(x, y, z) });
platformComputeMaxZ(); platform.compute_max_z();
updateCamStock(true); platform.update_stock(true);
SPACE.update(); SPACE.update();
} }
function updatePlatformBounds() {
var bounds = new THREE.Box3();
forAllWidgets(function(widget) {
bounds.union(widget.mesh.getBoundingBox());
});
return settings.bounds = bounds;
}
function boundsSelection() { function boundsSelection() {
var bounds = new THREE.Box3(); var bounds = new THREE.Box3();
forSelectedWidgets(function(widget) { forSelectedWidgets(function(widget) {
@ -1641,6 +1663,137 @@ self.kiri.license = exports.LICENSE;
return bounds; return bounds;
} }
/** ******************************************************************
* Platform Functions
******************************************************************* */
function platformUpdateOrigin() {
let dev = settings.device;
let proc = settings.process;
let x = 0;
let y = 0;
let z = 0;
if (MODE === MODES.CAM && proc.camOriginTop) {
z = camTopZ + 0.01;
if (!camStock) {
z += proc.camZTopOffset;
}
}
if (!proc.outputOriginCenter) {
if (camStock) {
x = (-camStock.scale.x / 2) + camStock.position.x;
y = (camStock.scale.y / 2) - camStock.position.y;
} else {
x = -dev.bedWidth / 2;
y = dev.bedDepth / 2;
}
} else if (camStock) {
x = camStock.position.x;
y = -camStock.position.y;
}
settings.origin = {x, y, z};
if (settings.controller.showOrigin) {
SPACE.platform.setOrigin(x,y,z);
} else {
SPACE.platform.setOrigin();
}
}
function platformUpdateTopZ() {
let camz = MODE === MODES.CAM && (settings.stock.z || settings.controller.alignTop);
let ztop = camz ? camTopZ - settings.process.camZTopOffset : 0;
forAllWidgets(function(widget) {
widget.setTopZ(ztop);
});
}
function platformUpdateSize() {
var dev = settings.device,
width, depth,
height = Math.round(Math.max(dev.bedHeight, dev.bedWidth/100, dev.bedDepth/100));
SPACE.platform.setRound(dev.bedRound);
SPACE.platform.setGZOff(height/2 - 0.1);
SPACE.platform.setSize(
width = parseInt(dev.bedWidth),
depth = parseInt(dev.bedDepth),
height
);
SPACE.platform.setHidden(width > 500 || depth > 500);
platform.update_origin();
}
function platformUpdateBounds() {
var bounds = new THREE.Box3();
forAllWidgets(function(widget) {
bounds.union(widget.mesh.getBoundingBox());
});
return settings.bounds = bounds;
}
function platformSelect(widget, shift) {
if (viewMode !== VIEWS.ARRANGE) return;
var mesh = widget.mesh,
sel = (selectedMeshes.indexOf(mesh) >= 0);
if (sel) {
if (shift) {
platform.deselect(widget)
} else if (selectedMeshes.length > 1) {
platform.deselect();
platform.select(widget, false);
}
} else {
// prevent selection in slice view
if (!mesh.material.visible) return;
if (!shift) platform.deselect();
selectedMeshes.push(mesh);
widget.setColor(widget_selected_color);
meshUpdateInfo(mesh);
}
UI.selection.style.display = platform.selected_count() ? 'inline' : 'none';
SPACE.update();
}
function platformSelectedCount() {
return viewMode === VIEWS.ARRANGE ? selectedMeshes.length : 0;
}
function platformDeselect(widget) {
if (viewMode !== VIEWS.ARRANGE) return;
if (!widget) {
forAllWidgets(function(widget) {
platform.deselect(widget);
});
return;
}
var mesh = widget.mesh,
si = selectedMeshes.indexOf(mesh),
sel = (si >= 0);
if (sel) selectedMeshes.splice(si,1);
widget.setColor(widget_deselected_color);
UI.selection.style.display = platform.selected_count() ? 'inline' : 'none';
SPACE.update();
meshUpdateInfo();
}
function platformLoad(url, onload) {
if (url.toLowerCase().indexOf(".stl") > 0) {
platform.load_stl(url, onload);
} else {
ajax(url, function(vertices) {
vertices = js2o(vertices).toFloat32();
platform.add(newWidget().loadVertices(vertices));
if (onload) onload(vertices);
});
}
}
function platformLoadSTL(url, onload) {
new MOTO.STL().load(url, function(vertices) {
platform.add(newWidget().loadVertices(vertices));
if (onload) onload(vertices);
})
}
function platformComputeMaxZ() { function platformComputeMaxZ() {
topZ = 0; topZ = 0;
forAllWidgets(function(widget) { forAllWidgets(function(widget) {
@ -1652,17 +1805,17 @@ self.kiri.license = exports.LICENSE;
function platformAdd(widget, shift, nolayout) { function platformAdd(widget, shift, nolayout) {
WIDGETS.push(widget); WIDGETS.push(widget);
SPACE.platform.add(widget.mesh); SPACE.platform.add(widget.mesh);
widgetSelect(widget, shift); platform.select(widget, shift);
platformComputeMaxZ(); platform.compute_max_z();
if (nolayout) return; if (nolayout) return;
if (layoutOnAdd) layoutPlatform(); if (layoutOnAdd) platform.layout();
} }
function platformDelete(widget) { function platformDelete(widget) {
if (Array.isArray(widget)) { if (Array.isArray(widget)) {
var mc = widget.slice(), i; var mc = widget.slice(), i;
for (i=0; i<mc.length; i++) { for (i=0; i<mc.length; i++) {
platformDelete(mc[i].widget); platform.delete(mc[i].widget);
} }
return; return;
} }
@ -1671,62 +1824,17 @@ self.kiri.license = exports.LICENSE;
SPACE.platform.remove(widget.mesh); SPACE.platform.remove(widget.mesh);
selectedMeshes.remove(widget.mesh); selectedMeshes.remove(widget.mesh);
updateSliderMax(); updateSliderMax();
platformComputeMaxZ(); platform.compute_max_z();
if (MODE !== MODES.FDM) layoutPlatform(); if (MODE !== MODES.FDM) platform.layout();
SPACE.update(); SPACE.update();
UI.selection.style.display = selectedWidgetCount() ? 'inline' : 'none'; UI.selection.style.display = platform.selected_count() ? 'inline' : 'none';
} }
function platformSelectAll() { function platformSelectAll() {
forAllWidgets(function(w) { widgetSelect(w, true) }) forAllWidgets(function(w) { platform.select(w, true) })
} }
function widgetSelect(widget, shift) { function platformLayout(event, space) {
if (viewMode !== VIEWS.ARRANGE) return;
var mesh = widget.mesh,
sel = (selectedMeshes.indexOf(mesh) >= 0);
if (sel) {
if (shift) {
widgetDeselect(widget)
} else if (selectedMeshes.length > 1) {
widgetDeselect();
widgetSelect(widget, false);
}
} else {
// prevent selection in slice view
if (!mesh.material.visible) return;
if (!shift) widgetDeselect();
selectedMeshes.push(mesh);
widget.setColor(widget_selected_color);
meshUpdateInfo(mesh);
}
UI.selection.style.display = selectedWidgetCount() ? 'inline' : 'none';
SPACE.update();
}
function selectedWidgetCount() {
return viewMode === VIEWS.ARRANGE ? selectedMeshes.length : 0;
}
function widgetDeselect(widget) {
if (viewMode !== VIEWS.ARRANGE) return;
if (!widget) {
forAllWidgets(function(widget) {
widgetDeselect(widget);
});
return;
}
var mesh = widget.mesh,
si = selectedMeshes.indexOf(mesh),
sel = (si >= 0);
if (sel) selectedMeshes.splice(si,1);
widget.setColor(widget_deselected_color);
UI.selection.style.display = selectedWidgetCount() ? 'inline' : 'none';
SPACE.update();
meshUpdateInfo();
}
function layoutPlatform(event, space) {
var auto = UI.autoLayout.checked, var auto = UI.autoLayout.checked,
layout = (viewMode === VIEWS.ARRANGE && auto), layout = (viewMode === VIEWS.ARRANGE && auto),
proc = settings.process, proc = settings.process,
@ -1795,37 +1903,99 @@ self.kiri.license = exports.LICENSE;
} }
if (MODE === MODES.CAM) { if (MODE === MODES.CAM) {
updateCamStock(); platform.update_stock();
} }
SPACE.update(); SPACE.update();
} }
function loadWidget(url, onload) { function platformUpdateStock(refresh) {
if (url.toLowerCase().indexOf(".stl") > 0) { let sd = settings.process;
loadSTL(url, onload); let offset = UI.camStockOffset.checked;
} else { let stockSet = sd.camStockX && sd.camStockY && sd.camStockZ;
ajax(url, function(vertices) { let scale = unitScale();
vertices = js2o(vertices).toFloat32(); camTopZ = topZ;
platformAdd(newWidget().loadVertices(vertices)); // create/inject cam stock if stock size other than default
if (onload) onload(vertices); if (MODE === MODES.CAM && stockSet && WIDGETS.length) {
}); UI.stock.style.display = offset ? 'inline' : 'none';
let csx = sd.camStockX * scale;
let csy = sd.camStockY * scale;
let csz = sd.camStockZ * scale;
let csox = 0;
let csoy = 0;
if (offset) {
let min = { x: Infinity, y: Infinity, z: 0 };
let max = { x: -Infinity, y: -Infinity, z: -Infinity };
forAllWidgets(function(widget) {
let wbnd = widget.getBoundingBox(refresh);
let wpos = widget.orient.pos;
min = {
x: Math.min(min.x, wpos.x + wbnd.min.x),
y: Math.min(min.y, wpos.y + wbnd.min.y),
z: 0
};
max = {
x: Math.max(max.x, wpos.x + wbnd.max.x),
y: Math.max(max.y, wpos.y + wbnd.max.y),
z: Math.max(max.z, wbnd.max.z)
};
});
csx += max.x - min.x;
csy += max.y - min.y;
csz += max.z - min.z;
csox = min.x + ((max.x - min.x) / 2);
csoy = min.y + ((max.y - min.y) / 2);
$('stock-width').innerText = (csx/scale).toFixed(2);
$('stock-depth').innerText = (csy/scale).toFixed(2);
$('stock-height').innerText = (csz/scale).toFixed(2);
}
if (!camStock) {
var geo = new THREE.BoxGeometry(1, 1, 1);
var mat = new THREE.MeshBasicMaterial({ color: 0x777777, opacity: 0.2, transparent: true, side:THREE.DoubleSide });
var cube = new THREE.Mesh(geo, mat);
SPACE.platform.add(cube);
camStock = cube;
}
settings.stock = {
x: csx,
y: csy,
z: csz
};
camStock.scale.x = csx;
camStock.scale.y = csy;
camStock.scale.z = csz;
camStock.position.x = csox;
camStock.position.y = csoy;
camStock.position.z = csz / 2;
camStock.material.visible = settings.mode === 'CAM';
camTopZ = csz;
platform.update_top_z();
SPACE.update();
} else if (camStock) {
settings.stock = { };
UI.stock.style.display = 'none';
SPACE.platform.remove(camStock);
SPACE.update();
camStock = null;
camTopZ = topZ;
platform.update_top_z();
} else if (settings.controller.alignTop) {
platform.update_top_z();
} }
platform.update_bounds();
platform.update_origin();
} }
function loadSTL(url, onload) { /** ******************************************************************
new MOTO.STL().load(url, function(vertices) { * Settings Functions
platformAdd(newWidget().loadVertices(vertices)); ******************************************************************* */
if (onload) onload(vertices);
})
}
function resetSettings(force) { function resetSettings(force) {
if (force || confirm('reset all values to system defaults?')) { if (force || confirm('reset all values to system defaults?')) {
settings = settingsDefault; settings = settingsDefault;
updateFields(); updateFields();
}; };
} }
/** /**
* fill in missing settings from default template to pick up new fields * fill in missing settings from default template to pick up new fields
@ -1934,91 +2104,6 @@ self.kiri.license = exports.LICENSE;
return settings; return settings;
} }
function updateWidgetsTopZ() {
let camz = MODE === MODES.CAM && (settings.stock.z || settings.controller.alignTop);
let ztop = camz ? camTopZ - settings.process.camZTopOffset : 0;
forAllWidgets(function(widget) {
widget.setTopZ(ztop);
});
}
function updateCamStock(refresh) {
let sd = settings.process;
let offset = UI.camStockOffset.checked;
let stockSet = sd.camStockX && sd.camStockY && sd.camStockZ;
let scale = unitScale();
camTopZ = topZ;
// create/inject cam stock if stock size other than default
if (MODE === MODES.CAM && stockSet && WIDGETS.length) {
UI.stock.style.display = offset ? 'inline' : 'none';
let csx = sd.camStockX * scale;
let csy = sd.camStockY * scale;
let csz = sd.camStockZ * scale;
let csox = 0;
let csoy = 0;
if (offset) {
let min = { x: Infinity, y: Infinity, z: 0 };
let max = { x: -Infinity, y: -Infinity, z: -Infinity };
forAllWidgets(function(widget) {
let wbnd = widget.getBoundingBox(refresh);
let wpos = widget.orient.pos;
min = {
x: Math.min(min.x, wpos.x + wbnd.min.x),
y: Math.min(min.y, wpos.y + wbnd.min.y),
z: 0
};
max = {
x: Math.max(max.x, wpos.x + wbnd.max.x),
y: Math.max(max.y, wpos.y + wbnd.max.y),
z: Math.max(max.z, wbnd.max.z)
};
});
csx += max.x - min.x;
csy += max.y - min.y;
csz += max.z - min.z;
csox = min.x + ((max.x - min.x) / 2);
csoy = min.y + ((max.y - min.y) / 2);
$('stock-width').innerText = (csx/scale).toFixed(2);
$('stock-depth').innerText = (csy/scale).toFixed(2);
$('stock-height').innerText = (csz/scale).toFixed(2);
}
if (!camStock) {
var geo = new THREE.BoxGeometry(1, 1, 1);
var mat = new THREE.MeshBasicMaterial({ color: 0x777777, opacity: 0.2, transparent: true, side:THREE.DoubleSide });
var cube = new THREE.Mesh(geo, mat);
SPACE.platform.add(cube);
camStock = cube;
}
settings.stock = {
x: csx,
y: csy,
z: csz
};
camStock.scale.x = csx;
camStock.scale.y = csy;
camStock.scale.z = csz;
camStock.position.x = csox;
camStock.position.y = csoy;
camStock.position.z = csz / 2;
camStock.material.visible = settings.mode === 'CAM';
camTopZ = csz;
updateWidgetsTopZ();
SPACE.update();
} else if (camStock) {
settings.stock = { };
UI.stock.style.display = 'none';
SPACE.platform.remove(camStock);
SPACE.update();
camStock = null;
camTopZ = topZ;
updateWidgetsTopZ();
} else if (settings.controller.alignTop) {
updateWidgetsTopZ();
}
updatePlatformBounds();
updateOrigin();
}
function updateFields() { function updateFields() {
updateFieldsFromSettings(settings.device); updateFieldsFromSettings(settings.device);
updateFieldsFromSettings(settings.process); updateFieldsFromSettings(settings.process);
@ -2032,7 +2117,7 @@ self.kiri.license = exports.LICENSE;
updateSettingsFromFields(settings.layers); updateSettingsFromFields(settings.layers);
updateSettingsFromFields(settings.controller); updateSettingsFromFields(settings.controller);
saveSettings(); saveSettings();
updateCamStock(); platform.update_stock();
} }
function saveSettings() { function saveSettings() {
@ -2087,10 +2172,10 @@ self.kiri.license = exports.LICENSE;
isgcode = lower.indexOf(".gcode") > 0 || lower.indexOf(".nc") > 0; isgcode = lower.indexOf(".gcode") > 0 || lower.indexOf(".nc") > 0;
reader.file = files[i]; reader.file = files[i];
reader.onloadend = function (e) { reader.onloadend = function (e) {
if (israw) platformAdd( if (israw) platform.add(
newWidget().loadVertices(JSON.parse(e.target.result).toFloat32()) newWidget().loadVertices(JSON.parse(e.target.result).toFloat32())
); );
if (isstl) platformAdd( if (isstl) platform.add(
newWidget() newWidget()
.loadVertices(new MOTO.STL().parse(e.target.result)) .loadVertices(new MOTO.STL().parse(e.target.result))
.saveToCatalog(e.target.file.name) .saveToCatalog(e.target.file.name)
@ -2123,53 +2208,6 @@ self.kiri.license = exports.LICENSE;
restoreWorkspace(null, true); restoreWorkspace(null, true);
} }
function updateOrigin() {
let dev = settings.device;
let proc = settings.process;
let x = 0;
let y = 0;
let z = 0;
if (MODE === MODES.CAM && proc.camOriginTop) {
z = camTopZ + 0.01;
if (!camStock) {
z += proc.camZTopOffset;
}
}
if (!proc.outputOriginCenter) {
if (camStock) {
x = (-camStock.scale.x / 2) + camStock.position.x;
y = (camStock.scale.y / 2) - camStock.position.y;
} else {
x = -dev.bedWidth / 2;
y = dev.bedDepth / 2;
}
} else if (camStock) {
x = camStock.position.x;
y = -camStock.position.y;
}
settings.origin = {x, y, z};
if (settings.controller.showOrigin) {
SPACE.platform.setOrigin(x,y,z);
} else {
SPACE.platform.setOrigin();
}
}
function updatePlatformSize() {
var dev = settings.device,
width, depth,
height = Math.round(Math.max(dev.bedHeight, dev.bedWidth/100, dev.bedDepth/100));
SPACE.platform.setRound(dev.bedRound);
SPACE.platform.setGZOff(height/2 - 0.1);
SPACE.platform.setSize(
width = parseInt(dev.bedWidth),
depth = parseInt(dev.bedDepth),
height
);
SPACE.platform.setHidden(width > 500 || depth > 500);
updateOrigin();
}
function restoreWorkspace(ondone, skipwidgets) { function restoreWorkspace(ondone, skipwidgets) {
var loaded = 0, var loaded = 0,
toload = ls2o('ws-widgets',[]), toload = ls2o('ws-widgets',[]),
@ -2198,8 +2236,8 @@ self.kiri.license = exports.LICENSE;
} }
updateFields(); updateFields();
updatePlatformSize(); platform.update_size();
updateCamStock(); platform.update_stock();
SPACE.view.reset(); SPACE.view.reset();
@ -2209,20 +2247,20 @@ self.kiri.license = exports.LICENSE;
if (skipwidgets) return; if (skipwidgets) return;
forAllWidgets(function(widget) { forAllWidgets(function(widget) {
platformDelete(widget); platform.delete(widget);
}); });
toload.forEach(function(widgetid) { toload.forEach(function(widgetid) {
Widget.loadFromState(widgetid, function(widget) { Widget.loadFromState(widgetid, function(widget) {
if (widget) { if (widget) {
platformAdd(widget, 0, position); platform.add(widget, 0, position);
} }
if (++loaded === toload.length) { if (++loaded === toload.length) {
widgetDeselect(); platform.deselect();
if (ondone) { if (ondone) {
ondone(); ondone();
// if ((newset || settings).mode != 'CAM') { // if ((newset || settings).mode != 'CAM') {
setTimeout(() => { setTimeout(() => {
updateWidgetsTopZ(); platform.update_top_z();
SPACE.update(); SPACE.update();
}, 1); }, 1);
// }; // };
@ -2238,7 +2276,7 @@ self.kiri.license = exports.LICENSE;
// free up worker cache/mem // free up worker cache/mem
KIRI.work.clear(); KIRI.work.clear();
platformSelectAll(); platformSelectAll();
platformDelete(selectedMeshes); platform.delete(selectedMeshes);
} }
function modalShowing() { function modalShowing() {
@ -2467,7 +2505,7 @@ self.kiri.license = exports.LICENSE;
function setViewMode(mode) { function setViewMode(mode) {
var oldMode = viewMode; var oldMode = viewMode;
viewMode = mode; viewMode = mode;
widgetDeselect(); platform.deselect();
meshUpdateInfo(); meshUpdateInfo();
[ UI.modeArrange, UI.modeSlice, UI.modePreview ].forEach(function(b) { [ UI.modeArrange, UI.modeSlice, UI.modePreview ].forEach(function(b) {
b.removeAttribute("class"); b.removeAttribute("class");
@ -2507,7 +2545,7 @@ self.kiri.license = exports.LICENSE;
} }
function switchMode(mode) { function switchMode(mode) {
setMode(mode, updatePlatformSize); setMode(mode, platform.update_size);
} }
function setMode(mode, lock, then) { function setMode(mode, lock, then) {
@ -2537,7 +2575,7 @@ self.kiri.license = exports.LICENSE;
UI.modeTable.style.display = lock ? 'none' : ''; UI.modeTable.style.display = lock ? 'none' : '';
if (camStock) camStock.material.visible = settings.mode === 'CAM'; if (camStock) camStock.material.visible = settings.mode === 'CAM';
restoreWorkspace(null,true); restoreWorkspace(null,true);
// if (MODE !== MODES.FDM) layoutPlatform(); // if (MODE !== MODES.FDM) platform.layout();
if (then) then(); if (then) then();
triggerSettingsEvent(); triggerSettingsEvent();
} }
@ -2559,21 +2597,10 @@ self.kiri.license = exports.LICENSE;
if (kiri.init) return; if (kiri.init) return;
kiri.init = init; kiri.init = init;
var assets = $('assets'), let assets = $('assets'),
control = $('control'), control = $('control'),
container = $('container'), container = $('container'),
welcome = $('welcome'), welcome = $('welcome');
selectedTool = null,
editTools = null,
ROT = Math.PI/2,
ROT5 = ROT / 9,
ALL = [MODES.FDM, MODES.LASER, MODES.CAM],
CAM = [MODES.CAM],
FDM = [MODES.FDM],
FDM_CAM = [MODES.CAM,MODES.FDM],
FDM_LASER = [MODES.LASER,MODES.FDM],
CAM_LASER = [MODES.LASER,MODES.CAM],
LASER = [MODES.LASER];
WIN.addEventListener("resize", onWindowResize); WIN.addEventListener("resize", onWindowResize);
@ -2693,13 +2720,13 @@ self.kiri.license = exports.LICENSE;
modeTable: UC.newTableRow([ modeTable: UC.newTableRow([
[ [
UI.modeFDM = UI.modeFDM =
UC.newButton("FDM Printing", function() { setMode('FDM',null,updatePlatformSize) }), UC.newButton("FDM Printing", function() { setMode('FDM',null,platform.update_size) }),
],[ ],[
UI.modeLASER = UI.modeLASER =
UC.newButton("Laser Cutting", function() { setMode('LASER',null,updatePlatformSize) }), UC.newButton("Laser Cutting", function() { setMode('LASER',null,platform.update_size) }),
],[ ],[
UI.modeCAM = UI.modeCAM =
UC.newButton("CNC Milling", function() { setMode('CAM',null,updatePlatformSize) }, {id:"modeCAM"}), UC.newButton("CNC Milling", function() { setMode('CAM',null,platform.update_size) }, {id:"modeCAM"}),
] ]
]), ]),
system: UC.newGroup('setup'), system: UC.newGroup('setup'),
@ -2726,7 +2753,7 @@ self.kiri.license = exports.LICENSE;
UC.newButton("+") UC.newButton("+")
],[ ],[
UI.modeArrange = UI.modeArrange =
UC.newButton("Arrange", layoutPlatform), UC.newButton("Arrange", platform.layout),
],[ ],[
UI.modeSlice = UI.modeSlice =
UC.newButton("Slice", prepareSlices) UC.newButton("Slice", prepareSlices)
@ -2960,7 +2987,7 @@ self.kiri.license = exports.LICENSE;
settings.controller.alignTop = UI.alignTop.checked; settings.controller.alignTop = UI.alignTop.checked;
settings.controller.reverseZoom = UI.reverseZoom.checked; settings.controller.reverseZoom = UI.reverseZoom.checked;
SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed); SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed);
updateOrigin(); platform.update_origin();
saveSettings(); saveSettings();
} }
@ -3004,7 +3031,7 @@ self.kiri.license = exports.LICENSE;
// dismiss modals // dismiss modals
hideModal(); hideModal();
// deselect widgets // deselect widgets
widgetDeselect(); platform.deselect();
// hide all dialogs // hide all dialogs
hideDialog(); hideDialog();
// cancel slicing // cancel slicing
@ -3025,7 +3052,7 @@ self.kiri.license = exports.LICENSE;
case 46: // others: delete case 46: // others: delete
if (inputHasFocus()) return false; if (inputHasFocus()) return false;
if (selectedMeshes.length > 0) { if (selectedMeshes.length > 0) {
platformDelete(selectedMeshes); platform.delete(selectedMeshes);
} }
evt.preventDefault(); evt.preventDefault();
break; break;
@ -3063,7 +3090,7 @@ self.kiri.license = exports.LICENSE;
if (evt.metaKey) { if (evt.metaKey) {
if (inputHasFocus()) return false; if (inputHasFocus()) return false;
evt.preventDefault(); evt.preventDefault();
widgetDeselect(); platform.deselect();
platformSelectAll(); platformSelectAll();
} }
break; break;
@ -3188,7 +3215,7 @@ self.kiri.license = exports.LICENSE;
break; break;
case cca('d'): // duplicate object case cca('d'): // duplicate object
sel = selectedMeshes.slice(); sel = selectedMeshes.slice();
widgetDeselect(); platform.deselect();
for (i=0; i<sel.length; i++) { for (i=0; i<sel.length; i++) {
m = sel[i].clone(); m = sel[i].clone();
m.geometry = m.geometry.clone(); m.geometry = m.geometry.clone();
@ -3196,7 +3223,7 @@ self.kiri.license = exports.LICENSE;
bb = m.getBoundingBox(); bb = m.getBoundingBox();
var nw = newWidget().loadGeometry(m.geometry); var nw = newWidget().loadGeometry(m.geometry);
nw.move(bb.max.x - bb.min.x + 1, 0, 0); nw.move(bb.max.x - bb.min.x + 1, 0, 0);
platformAdd(nw,true); platform.add(nw,true);
} }
break; break;
case cca('m'): // mirror object case cca('m'): // mirror object
@ -3210,7 +3237,7 @@ self.kiri.license = exports.LICENSE;
prepareSlices(); prepareSlices();
break; break;
case cca('a'): // auto arrange items on platform case cca('a'): // auto arrange items on platform
layoutPlatform(); platform.layout();
break; break;
case cca('w'): // toggle wireframe on widgets case cca('w'): // toggle wireframe on widgets
toggleWireframe(wireframe_color, wireframe_model_opacity); toggleWireframe(wireframe_color, wireframe_model_opacity);
@ -3525,7 +3552,7 @@ self.kiri.license = exports.LICENSE;
UI.deviceDelete.disabled = !local; UI.deviceDelete.disabled = !local;
updateFields(); updateFields();
updatePlatformSize(); platform.update_size();
settings.filter[mode] = devicename; settings.filter[mode] = devicename;
settings.cdev[mode] = dev; settings.cdev[mode] = dev;
@ -3790,7 +3817,7 @@ self.kiri.license = exports.LICENSE;
function loadCatalogFile(e) { function loadCatalogFile(e) {
Widget.loadFromCatalog(e.target.getAttribute('load'), function(widget) { Widget.loadFromCatalog(e.target.getAttribute('load'), function(widget) {
platformAdd(widget); platform.add(widget);
hideDialog(); hideDialog();
}); });
} }
@ -3836,7 +3863,7 @@ self.kiri.license = exports.LICENSE;
onControlResize(); onControlResize();
} }
SPACE.addEventHandlers(SELF, [ SPACE.addEventHandlers(self, [
'keyup', keyUpHandler, 'keyup', keyUpHandler,
'keydown', keyDownHandler, 'keydown', keyDownHandler,
'keypress', keyHandler, 'keypress', keyHandler,
@ -3860,8 +3887,8 @@ self.kiri.license = exports.LICENSE;
UI.toolShaftDiam, updateTool, UI.toolShaftDiam, updateTool,
UI.toolShaftLen, updateTool, UI.toolShaftLen, updateTool,
UI.bedWidth, updatePlatformSize, UI.bedWidth, platform.update_size,
UI.bedDepth, updatePlatformSize UI.bedDepth, platform.update_size
]); ]);
UI.setupDevices.innerHTML = "D<u>e</u>vices"; UI.setupDevices.innerHTML = "D<u>e</u>vices";
@ -3942,9 +3969,9 @@ self.kiri.license = exports.LICENSE;
SPACE.mouse.upSelect(function(selection, event) { SPACE.mouse.upSelect(function(selection, event) {
if (event && event.target.nodeName === "CANVAS") { if (event && event.target.nodeName === "CANVAS") {
if (selection) { if (selection) {
widgetSelect(selection.object.widget, event.shiftKey); platform.select(selection.object.widget, event.shiftKey);
} else { } else {
widgetDeselect(); platform.deselect();
} }
} else { } else {
return meshArray(); return meshArray();
@ -3956,7 +3983,7 @@ self.kiri.license = exports.LICENSE;
forSelectedWidgets(function(widget) { forSelectedWidgets(function(widget) {
widget.move(delta.x, delta.y, 0); widget.move(delta.x, delta.y, 0);
}); });
updateCamStock(); platform.update_stock();
} else { } else {
return selectedMeshes.length > 0; return selectedMeshes.length > 0;
} }
@ -3967,9 +3994,9 @@ self.kiri.license = exports.LICENSE;
if (!SDB[SEED]) { if (!SDB[SEED]) {
SDB[SEED] = new Date().getTime(); SDB[SEED] = new Date().getTime();
if (!SETUP.s) { if (!SETUP.s) {
loadSTL("/obj/cube.stl", function(vert) { platform.load_stl("/obj/cube.stl", function(vert) {
CATALOG.putFile("sample cube.stl", vert); CATALOG.putFile("sample cube.stl", vert);
platformComputeMaxZ(); platform.compute_max_z();
SPACE.view.home(); SPACE.view.home();
setTimeout(saveWorkspace,500); setTimeout(saveWorkspace,500);
ondone(); ondone();
@ -3982,7 +4009,7 @@ self.kiri.license = exports.LICENSE;
} }
function ondone() { function ondone() {
widgetDeselect(); platform.deselect();
CATALOG.addFileListener(updateCatalog); CATALOG.addFileListener(updateCatalog);
SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed); SPACE.view.setZoom(settings.controller.reverseZoom, settings.controller.zoomSpeed);
SPACE.platform.setZOff(0.2); SPACE.platform.setZOff(0.2);
@ -4032,7 +4059,7 @@ self.kiri.license = exports.LICENSE;
setMode(SETMODE || STARTMODE || settings.mode, SETMODE); setMode(SETMODE || STARTMODE || settings.mode, SETMODE);
setControlsVisible(true); setControlsVisible(true);
updatePlatformSize(); platform.update_size();
takeFocus(); takeFocus();
if (STATS.get('upgrade')) DBUG.log("kiri | version upgrade"); if (STATS.get('upgrade')) DBUG.log("kiri | version upgrade");

View file

@ -1,7 +1,7 @@
var exports = { var exports = {
COPYRIGHT:"Copyright (C) 2014-2019 Stewart Allen <sa@grid.space> - All Rights Reserved", COPYRIGHT:"Copyright (C) 2014-2019 Stewart Allen <sa@grid.space> - All Rights Reserved",
LICENSE:"See the license.md file included with the source distribution", LICENSE:"See the license.md file included with the source distribution",
VERSION:"1.7.1" VERSION:"1.7.2"
}; };
if (!module) var module = {}; if (!module) var module = {};
module.exports = exports; module.exports = exports;