diff --git a/src/kiri/init.js b/src/kiri/init.js index 633a0a75..4aee64c9 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -582,14 +582,14 @@ }); } - function objectsExport() { + function objectsExport(format = "stl") { // return API.selection.export(); - UC.confirm("Export Filename", {ok:true, cancel: false}, "selected.stl").then(name => { + UC.confirm("Export Filename", {ok:true, cancel: false}, `selected.${format}`).then(name => { if (!name) return; - if (name.toLowerCase().indexOf(".stl") < 0) { - name = `${name}.stl`; + if (name.toLowerCase().indexOf(`.${format}`) < 0) { + name = `${name}.${format}`; } - API.util.download(API.selection.export(), name); + API.util.download(API.selection.export(format), name); }); } @@ -1515,6 +1515,11 @@ mesh: () => { UI.tool.show('ft-mesh') }, select: () => { UI.tool.show('ft-select') }, }, + mesh: { + name: $('mesh-name'), + points: $('mesh-points'), + faces: $('mesh-faces'), + }, fps: $('fps'), load: $('load-file'), @@ -2612,9 +2617,11 @@ $('render-ghost').onclick = () => { API.view.wireframe(false, 0, 0.5); }; $('render-wire').onclick = () => { API.view.wireframe(true, 0, 0.5); }; $('render-solid').onclick = () => { API.view.wireframe(false, 0, 1); }; + // mesh buttons + $('mesh-heal').onclick = () => { API.widgets.heal() }; + $('mesh-export-stl').onclick = () => { objectsExport('stl') }; + $('mesh-export-obj').onclick = () => { objectsExport('obj') }; // context menu - $('context-heal-mesh').onclick = () => { API.widgets.heal() }; - $('context-export-stl').onclick = () => { objectsExport() }; $('context-export-workspace').onclick = () => { profileExport(true) }; $('context-clear-workspace').onclick = () => { API.view.set(VIEWS.ARRANGE); diff --git a/src/kiri/main.js b/src/kiri/main.js index 296394a0..1528a05c 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -1593,7 +1593,7 @@ auto_save(); } - function exportSelection() { + function exportSelection(format = "stl") { let widgets = API.selection.widgets(); if (widgets.length === 0) { widgets = API.widgets.all(); @@ -1606,6 +1606,24 @@ outs.push({geo, widget}); facets += geo.attributes.position.count; }); + if (format === "obj") { + let obj = []; + for (let out of outs) { + let meta = out.widget.meta; + let name = meta.file || 'unnamed'; + obj.push(`g ${name}`); + let { position } = out.geo.attributes; + let pvals = position.array; + for (let i=0, il=position.count; i= 0) { name = name.substring(sp + 1); } - $('winfo').style.display = 'flex'; - $('winfo').innerHTML = `${UTIL.comma(sel.meta.vertices)}
${name}`; + UI.mesh.name.innerText = name; + UI.mesh.points.innerText = sel.meta.vertices; + UI.mesh.faces.innerText = sel.meta.vertices / 3; } + } else { + UI.mesh.name.innerText = `[${selcount}]`; + UI.mesh.points.innerText = '-'; + UI.mesh.faces.innerText = '-'; } } else { - // UI.scale.classList.remove('lt-active'); - // UI.rotate.classList.remove('lt-active'); + UI.mesh.name.innerText = '[0]'; + UI.mesh.points.innerText = '-'; + UI.mesh.faces.innerText = '-'; UI.nozzle.classList.remove('lt-active'); UI.trash.style.display = ''; } diff --git a/web/kiri/index.css b/web/kiri/index.css index 0ab15812..f99530ee 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -512,6 +512,16 @@ th, tr, td, label { border-right: 3px solid var(--main-color); } +#lab-axis, #lab-scale, #lab-size { + border-radius: 3px; + padding: 2px; + border: 1px solid white; +} +#lab-axis:hover, #lab-scale:hover { + background-color: var(--main-color); + color: white; +} + #ft-rotate { grid-gap: 2px; grid-template-rows: auto auto auto 1fr; @@ -520,6 +530,17 @@ th, tr, td, label { #ft-rotate label, #ft-rotate svg { text-align: center; } +#ft-rotate svg { + margin-top: 2px; + padding: 1px 15px 1px 15px; + border: 1px solid transparent; + border-radius: 3px; +} +#ft-rotate svg:hover { + border: 1px solid #ccc; + background-color: var(--main-color); + color: white; +} #ft-rotate > div { display: flex; align-items: center; @@ -544,9 +565,21 @@ th, tr, td, label { margin-left: 0; margin-right: 0; } +#ft-mesh label { + font-size: smaller; +} +#ft-mesh .value { + font-family: monospace; + padding-left: 4px; +} #ft-mesh, #ft-select { min-width: 200px; } +#mesh-info { + grid-gap: 2px; + grid-template-rows: auto auto auto; + grid-template-columns: auto 1fr; +} #lock_x, #lock_y, #lock_z { position: absolute; @@ -1667,13 +1700,6 @@ th, tr, td, label { font-size: 12px; color: #000; } -#winfo { - position: fixed; - font-size: 10px; - bottom: 5px; - left: 5px; - color: #000; -} #context-menu { display: none; position: absolute; @@ -1701,13 +1727,6 @@ th, tr, td, label { margin: 5px 0 5px 0; } -#lab-axis, #lab-scale { - border-radius: 3px; -} -#lab-axis:hover, #lab-scale:hover { - background-color: rgba(0,0,0,0.2); -} - .range-info { position: relative; } diff --git a/web/kiri/index.html b/web/kiri/index.html index 1de3923a..1b54dec4 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -110,9 +110,9 @@
-
-
-
+
+
+
@@ -124,7 +124,19 @@
-
coming soon
+
+
+ + [0] + + - + + - +
+ + + +
coming soon
@@ -470,14 +482,10 @@ -
- -
-
alerts
alerts
alerts
diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 2ef0a99f..ea11f669 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -57,7 +57,8 @@ kiri.lang['en-us'] = { rc_dupl: "duplicate", rc_focs: "set focus", rc_heal: "heal meshes", - rc_xstl: "export as STL", + rc_xobj: "export OBJ", + rc_xstl: "export STL", // DEVICE MENU and related dialogs dm_sldt: "select a device type",