diff --git a/package.json b/package.json index 793dec78..1b6579f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grid-apps", - "version": "3.4.0D", + "version": "3.4.1D", "description": "grid.space 3d slice & modeling tools", "author": "Stewart Allen ", "license": "MIT", diff --git a/src/kiri-mode/cam/client.js b/src/kiri-mode/cam/client.js index 4b8d3172..041e4cef 100644 --- a/src/kiri-mode/cam/client.js +++ b/src/kiri-mode/cam/client.js @@ -612,7 +612,7 @@ CAM.init = function(kiri, api) { } }); }); - }, poppedRec.single); + }, poppedRec.select === 'lines'); api.feature.hover = true; api.feature.hoverAdds = true; func.hover = func.traceHover; @@ -954,7 +954,8 @@ CAM.init = function(kiri, api) { down: 'camTraceDown', rate: 'camTraceSpeed', plunge: 'camTracePlunge', - single: 'camTraceLines', + // single: 'camTraceLines', + select: 'camTraceMode' }).inputs = { tool: UC.newSelect(LANG.cc_tool, {}, "tools"), sep: UC.newBlank({class:"pop-sep"}), @@ -966,8 +967,9 @@ CAM.init = function(kiri, api) { rate: UC.newInput(LANG.cc_feed_s, {title:LANG.cc_feed_l, convert:UC.toInt, units:true}), plunge: UC.newInput(LANG.cc_plng_s, {title:LANG.cc_plng_l, convert:UC.toInt, units:true}), sep: UC.newBlank({class:"pop-sep"}), - single: UC.newBoolean(LANG.cc_sngl_s, undefined, {title:LANG.cc_sngl_l}), - select: UC.newRow([ + // single: UC.newBoolean(LANG.cc_sngl_s, undefined, {title:LANG.cc_sngl_l}), + select: UC.newSelect(LANG.cc_sele_s, {title:LANG.cc_sele_l}, "select"), + menu: UC.newRow([ UC.newButton(undefined, func.traceAdd, {icon:''}), UC.newButton(undefined, func.traceDone, {icon:''}), ], {class:"ext-buttons f-row"}), diff --git a/src/kiri/consts.js b/src/kiri/consts.js index d46fa1cc..3046f543 100644 --- a/src/kiri/consts.js +++ b/src/kiri/consts.js @@ -74,6 +74,11 @@ const LISTS = { { name: "800" }, { name: "900" } ], + select: [ + { name: "loops" }, + { name: "lines" }, + // { name: "surface" } + ], trace: [ { name: "follow" }, { name: "clear" } diff --git a/src/kiri/platform.js b/src/kiri/platform.js index 05cf0140..802f4712 100644 --- a/src/kiri/platform.js +++ b/src/kiri/platform.js @@ -263,9 +263,8 @@ function platformSelect(widget, shift, recurse = true) { platform.select(widget, false, recurse); } } else { - let { mesh } = widget; // prevent selection in slice view - if (!mesh.material.visible) { + if (!widget.isVisible()) { return; } if (!shift) { diff --git a/src/kiri/widget.js b/src/kiri/widget.js index 25765b87..270263e8 100644 --- a/src/kiri/widget.js +++ b/src/kiri/widget.js @@ -300,19 +300,18 @@ class Widget { loadGeometry(geometry) { const mesh = new THREE.Mesh( geometry, - new THREE.MeshPhongMaterial({ + [ new THREE.MeshPhongMaterial({ color: 0xffff00, specular: 0x202020, shininess: 125, transparent: true, opacity: solid_opacity - }) + }) ] ); mesh.renderOrder = 1; - // fix invalid normals - // geometry.computeFaceNormals(); geometry.computeVertexNormals(); - mesh.material.side = THREE.DoubleSide; + geometry.addGroup(0, Infinity, 0); + mesh.material[0].side = THREE.DoubleSide; mesh.castShadow = true; mesh.receiveShadow = true; mesh.widget = this; @@ -362,7 +361,7 @@ class Widget { if (save) { this.color = color; } - let material = this.mesh.material; + let material = this.getMaterial(); material.color.set(this.meta.disabled ? avgc(0x888888, color, 3) : color); } @@ -370,19 +369,28 @@ class Widget { return this.color; } + getMaterial() { + return this.mesh.material[0]; + } + + isVisible() { + return this.getMaterial().visible; + } + /** * @param {number} value */ setOpacity(value) { const mesh = this.mesh; + const mat = this.getMaterial(); if (value <= 0.0) { - mesh.material.transparent = solid_opacity < 1.0; - mesh.material.opacity = solid_opacity; - mesh.material.visible = false; + mat.transparent = solid_opacity < 1.0; + mat.opacity = solid_opacity; + mat.visible = false; } else if (inRange(value, 0.0, solid_opacity)) { - mesh.material.transparent = value < 1.0; - mesh.material.opacity = value; - mesh.material.visible = true; + mat.transparent = value < 1.0; + mat.opacity = value; + mat.visible = true; } } @@ -474,10 +482,11 @@ class Widget { _move(x, y, z, abs) { let mesh = this.mesh, + mat = this.getMaterial(), pos = this.track.pos, zcut = this.track.zcut || 0; // do not allow moves in pure slice view - if (!mesh.material.visible) return; + if (!mat.visible) return; if (abs) { mesh.position.set(x, y, z - zcut); pos.x = (x || 0); @@ -896,7 +905,7 @@ const Group = Widget.Groups = { h: group[0].track.box.h, move: (x,y,z,abs) => { group.forEach(widget => { - widget.mesh.material.visible = true; + widget.getMaterial().visible = true; widget._move(x, y, z, abs); }); } diff --git a/src/main/kiri.js b/src/main/kiri.js index 7dd6d303..989b6310 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -15,7 +15,7 @@ gapp.main("main.kiri", [], (root) => { const modfns = root.kirimod = ( root.kirimod || [] ); const kiri = root.kiri = { - beta: 3400, + beta: 3401, driver: {}, // driver modules load(fn) { modfns.push(fn); diff --git a/src/moto/license.js b/src/moto/license.js index 8e8b7fb4..d2b9a65e 100644 --- a/src/moto/license.js +++ b/src/moto/license.js @@ -3,7 +3,7 @@ let terms = { COPYRIGHT: "Copyright (C) Stewart Allen - All Rights Reserved", LICENSE: "See the license.md file included with the source distribution", - VERSION: "3.4.D0" + VERSION: "3.4.D1" }; if (typeof(module) === 'object') { diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index a5538695..50b802d0 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -436,6 +436,8 @@ self.kiri.lang['en-us'] = { cc_plng_l: ["max z axis speed in","workspace units / minute"], cc_sngl_s: "select lines only", cc_sngl_l: ["select only single edges","instead of connected polylines"], + cc_sele_s: "select", + cc_sele_l: ["select lines for follow","select loops for clear","select surface for pocket"], // CNC COMMON cc_menu: "limits",