fix other random breakage / omissions
This commit is contained in:
parent
1f470555ec
commit
f35e9dc46a
4 changed files with 115 additions and 30 deletions
|
|
@ -82,7 +82,6 @@ kiri.load(api => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
CAM.holes = function(indiv,rec,onProgress,onDone) {
|
CAM.holes = function(indiv,rec,onProgress,onDone) {
|
||||||
kiri.client.sync();
|
kiri.client.sync();
|
||||||
const settings = api.conf.get();
|
const settings = api.conf.get();
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||||
|
|
||||||
import { broker } from '../moto/broker.js';
|
import { broker } from '../moto/broker.js';
|
||||||
import { h, $ } from '../moto/webui.js';
|
import { $, h } from '../moto/webui.js';
|
||||||
import { api } from './api.js';
|
import { api } from './api.js';
|
||||||
import { util } from './util.js';
|
import { util } from './util.js';
|
||||||
import { space } from '../moto/space.js';
|
import { space } from '../moto/space.js';
|
||||||
import { split } from './split.js';
|
import { split } from './split.js';
|
||||||
import { newPolygon } from '../geo/polygon.js';
|
import { newPolygon } from '../geo/polygon.js';
|
||||||
|
|
||||||
|
const { div, label, input, hr } = h;
|
||||||
const { dbug } = api;
|
const { dbug } = api;
|
||||||
const devel = api.isDebug;
|
const devel = api.isDebug;
|
||||||
|
|
||||||
|
|
@ -235,40 +236,118 @@ api.welcome = function(version = "unknown") {
|
||||||
|
|
||||||
// bind settings endpoint to api
|
// bind settings endpoint to api
|
||||||
api.settings = function() {
|
api.settings = function() {
|
||||||
const { util } = mesh;
|
|
||||||
const { prefs } = api;
|
const { prefs } = api;
|
||||||
const { surface, normals, space, sketch, wireframe } = prefs.map;
|
const { surface, normals, space, sketch, wireframe } = prefs.map;
|
||||||
const { dark } = space;
|
const { dark } = space;
|
||||||
|
|
||||||
const set1 = h.div([
|
const set1 = div([
|
||||||
h.label('dark mode'),
|
label('dark mode'),
|
||||||
h.input({ type: "checkbox",
|
input({ type: "checkbox",
|
||||||
onchange: ev => call.set_darkmode(ev.target.checked),
|
onchange: ev => call.set_darkmode(ev.target.checked),
|
||||||
checked: dark
|
[ dark ? 'checked' : 'unchecked' ] : 1
|
||||||
}),
|
}),
|
||||||
h.label('wireframe'),
|
label('auto floor'),
|
||||||
h.input({ type: "checkbox",
|
input({ type: "checkbox",
|
||||||
onchange: ev => call.set_wireframe(ev.target.checked),
|
onchange: ev => prefs.save( space.floor = !space.floor ),
|
||||||
checked: wireframe
|
[ space.floor !== false ? 'checked' : 'unchecked' ] : 1
|
||||||
}),
|
}),
|
||||||
h.label('surface'),
|
label('auto center'),
|
||||||
h.input({ type: "checkbox",
|
input({ type: "checkbox",
|
||||||
onchange: ev => call.set_surface(ev.target.checked),
|
onchange: ev => prefs.save( space.center = !space.center ),
|
||||||
checked: surface
|
[ space.center !== false ? 'checked' : 'unchecked' ] : 1
|
||||||
}),
|
|
||||||
h.label('normals'),
|
|
||||||
h.input({ type: "checkbox",
|
|
||||||
onchange: ev => call.set_normals(ev.target.checked),
|
|
||||||
checked: normals
|
|
||||||
}),
|
|
||||||
h.label('sketch'),
|
|
||||||
h.input({ type: "checkbox",
|
|
||||||
onchange: ev => call.set_sketch(ev.target.checked),
|
|
||||||
checked: sketch
|
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
modal.show('Settings', set1);
|
const set2 = div([
|
||||||
|
label({ class: "header", _: 'wire'}),
|
||||||
|
label('opacity'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(wireframe.opacity),
|
||||||
|
onchange: ev => call.set_wireframe_opacity(ev.target.value)
|
||||||
|
}),
|
||||||
|
label('fog x'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(wireframe.fog),
|
||||||
|
onchange: ev => call.set_wireframe_fog(ev.target.value)
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const set3 = div([
|
||||||
|
label({ class: "header", _: 'normal'}),
|
||||||
|
label('length'),
|
||||||
|
input({ type: "text", size: 6, value: parseFloat(normals.length),
|
||||||
|
onchange: ev => call.set_normals_length(ev.target.value)
|
||||||
|
}),
|
||||||
|
label('color'),
|
||||||
|
input({ type: "text", size: 6,
|
||||||
|
value: util.toHexRGB(dark ? normals.color_dark : normals.color_lite),
|
||||||
|
onchange: ev => call.set_normals_color(util.fromHexRGB(ev.target.value))
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const set4 = div([
|
||||||
|
label({ class: "header", _: 'surface'}),
|
||||||
|
label('radians'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(surface.radians),
|
||||||
|
onchange: ev => call.set_surface_radians(ev.target.value)
|
||||||
|
}),
|
||||||
|
label('radius'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(surface.radius || 0.2),
|
||||||
|
onchange: ev => call.set_surface_radius(ev.target.value)
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const set5 = div([
|
||||||
|
label({ class: "header", _: 'snap'}),
|
||||||
|
label('value'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(space.snap || 1),
|
||||||
|
onchange: ev => call.set_snap_value(ev.target.value)
|
||||||
|
}),
|
||||||
|
label('enabled'),
|
||||||
|
input({ type: "checkbox",
|
||||||
|
onchange: ev => prefs.save( space.snapon = !space.snapon ),
|
||||||
|
[ space.snapon === true ? 'checked' : 'unchecked' ] : 1
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const set6 = div([
|
||||||
|
label({ class: "header", _: 'duplicate'}),
|
||||||
|
label('select'),
|
||||||
|
input({ type: "checkbox",
|
||||||
|
onchange: ev => prefs.save( space.dup_sel = !space.dup_sel ),
|
||||||
|
[ space.dup_sel === true ? 'checked' : 'unchecked' ] : 1
|
||||||
|
}),
|
||||||
|
label('shift'),
|
||||||
|
input({ type: "checkbox",
|
||||||
|
onchange: ev => prefs.save( space.dup_shift = !space.dup_shift ),
|
||||||
|
[ space.dup_shift === true ? 'checked' : 'unchecked' ] : 1
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let ot = sketch.open_type;
|
||||||
|
let srr = () => { api.sketch.list().forEach(s => s.render()) };
|
||||||
|
const set7 = div([
|
||||||
|
label({ class: "header", _: 'open poly'}),
|
||||||
|
label('auto close'),
|
||||||
|
input({ type: "checkbox",
|
||||||
|
onchange: ev => prefs.save( ((sketch.open_close = !sketch.open_close) || true) && srr() ),
|
||||||
|
[ sketch.open_close === true ? 'checked' : 'unchecked' ] : 1
|
||||||
|
}),
|
||||||
|
label('width'),
|
||||||
|
input({ type: "text", size: 5, value: parseFloat(sketch.open_width || 1),
|
||||||
|
onchange: ev => prefs.save( (sketch.open_width = parseFloat(ev.target.value)) && srr() )
|
||||||
|
}),
|
||||||
|
label('type'),
|
||||||
|
h.select({ type: "text", value: sketch.open_type,
|
||||||
|
onchange: ev => prefs.save( (sketch.open_type = ev.target.value) && srr() )
|
||||||
|
}, [
|
||||||
|
h.option({ _: 'square', [ot === 'square' ? 'selected' : '']: '' }),
|
||||||
|
h.option({ _: 'miter', [ot === 'miter' ? 'selected' : '']: '' }),
|
||||||
|
h.option({ _: 'round', [ot === 'round' ? 'selected' : '']: ''}),
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
modal.show('settings', div({ class: "settings" }, [
|
||||||
|
set1, set2, set3, set4, set5, set6, set7
|
||||||
|
] ));
|
||||||
};
|
};
|
||||||
|
|
||||||
// bootstrap icons
|
// bootstrap icons
|
||||||
|
|
@ -446,7 +525,7 @@ function ui_build() {
|
||||||
div({ class: "menu" }, [
|
div({ class: "menu" }, [
|
||||||
div('Help'),
|
div('Help'),
|
||||||
div({ class: "menu-items" }, [
|
div({ class: "menu-items" }, [
|
||||||
menu_item('About', () => { api.welcome(mesh.version) }),
|
menu_item('About', () => { api.welcome(license.version) }),
|
||||||
hr(),
|
hr(),
|
||||||
menu_item('Documentation', api.help),
|
menu_item('Documentation', api.help),
|
||||||
menu_item('Report Bugs', api.bugs),
|
menu_item('Report Bugs', api.bugs),
|
||||||
|
|
|
||||||
|
|
@ -223,10 +223,14 @@ class MeshModel extends meshObject {
|
||||||
// moves mesh object center to target
|
// moves mesh object center to target
|
||||||
centerTo(to) {
|
centerTo(to) {
|
||||||
this.log('model-centerto', to);
|
this.log('model-centerto', to);
|
||||||
let pos = this.position();
|
|
||||||
let { mid } = this.bounds;
|
let { mid } = this.bounds;
|
||||||
this.translate(to.x - mid.x, to.y - mid.y, to.z - mid.z);
|
let abs = this.world_bounds.mid;
|
||||||
this.position(pos.x, pos.y, pos.z);
|
this.translate(
|
||||||
|
-mid.x + (abs.x - to.x),
|
||||||
|
-mid.y + (abs.y - to.y),
|
||||||
|
-mid.z + (abs.z - to.z),
|
||||||
|
);
|
||||||
|
this.position(to.x, to.y, to.z);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,11 @@ function build(data, context) {
|
||||||
func[key] = val;
|
func[key] = val;
|
||||||
elid = elid || `_${nextid++}`;
|
elid = elid || `_${nextid++}`;
|
||||||
} else if (tov === 'object') {
|
} else if (tov === 'object') {
|
||||||
if (val.length)
|
if (Array.isArray(val)) {
|
||||||
html.push(` ${key}="${val.filter(v => v !== undefined).join(' ')}"`);
|
html.push(` ${key}="${val.filter(v => v !== undefined).join(' ')}"`);
|
||||||
|
} else {
|
||||||
|
html.push(` ${key}="${val}"`);
|
||||||
|
}
|
||||||
} else if (tov !== 'undefined') {
|
} else if (tov !== 'undefined') {
|
||||||
html.push(` ${key}="${val}"`);
|
html.push(` ${key}="${val}"`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue