@@ -369,7 +369,8 @@ def getHTMLTemplate():
369369 data: obj,
370370 faces: faces,
371371 wires: wires,
372- wirematerial: wirematerial
372+ wirematerial: wirematerial,
373+ gui_link: null
373374 });
374375 }
375376
@@ -418,7 +419,9 @@ def getHTMLTemplate():
418419 if (guiparams.wiretype == 'None') {
419420 m.visible = false;
420421 } else {
421- m.visible = true;
422+ if ((obj.faces.length == 0) | scene.getObjectByName(obj.faces[0]).material.visible){
423+ m.visible = true;
424+ }
422425 }
423426 m.linewidth = guiparams.wirewidth;
424427 m.color = new THREE.Color(guiparams.wirecolor);
@@ -486,10 +489,12 @@ def getHTMLTemplate():
486489 // Ignore objects with no vertices
487490 if (obj.data.verts.length > 0) {
488491 const guiObjData = {
489- obj: obj, color: obj.data.color, opacity: obj.data.opacity };
492+ obj: obj, color: obj.data.color, opacity: obj.data.opacity, show: true };
490493 const guiObject = guiObjects.addFolder(obj.data.name);
491494 guiObject.addColor(guiObjData, 'color').name('Color').onChange(GUIObjectChange);
492495 guiObject.add(guiObjData, 'opacity').min(0.0).max(1.0).step(0.05).name('Opacity').onChange(GUIObjectChange);
496+ guiObject.add(guiObjData, 'show').onChange(GUIObjectChange).listen();
497+ obj.gui_link = guiObjData
493498 }
494499 }
495500
@@ -503,15 +508,23 @@ def getHTMLTemplate():
503508 m.opacity = v;
504509 m.transparent = (v != 1.0);
505510 }
511+ if (this.property == 'show') {
512+ m.visible = v
513+ }
506514 }
507515 if (this.property == 'opacity') {
508516 const m = this.object.obj.wirematerial;
509517 m.opacity = v;
510518 m.transparent = (v != 1.0);
511519 }
520+ if (this.property == 'show') {
521+ const m = this.object.obj.wirematerial;
522+ m.visible = v
523+ }
512524 requestRender();
513525 }
514526
527+
515528 // Make simple orientation arrows and box - REF: http://jsfiddle.net/b97zd1a3/16/
516529 const arrowCanvas = document.querySelector('#arrowCanvas');
517530 const arrowRenderer = new THREE.WebGLRenderer({
@@ -588,6 +601,7 @@ def getHTMLTemplate():
588601 persControls.addEventListener('change', requestRender);
589602 orthControls.addEventListener('change', requestRender);
590603 renderer.domElement.addEventListener('mousemove', onMouseMove);
604+ renderer.domElement.addEventListener('dblclick', onMouseDblClick);
591605 window.addEventListener('resize', onMainCanvasResize, false);
592606
593607 onMainCanvasResize();
@@ -621,7 +635,45 @@ def getHTMLTemplate():
621635 requestRender();
622636 }
623637
624- // XXX use mouse click to toggle the gui for the selected object?
638+ // Use mouse double click to toggle the gui for the selected object
639+ function onMouseDblClick(e){
640+ let c = false;
641+ if (cameraType == 'Orthographic') {
642+ c = orthCamera;
643+ }
644+ if (cameraType == 'Perspective') {
645+ c = persCamera;
646+ }
647+ if (!c) {
648+ return;
649+ }
650+
651+ const raycaster = new THREE.Raycaster();
652+ raycaster.setFromCamera(new THREE.Vector2(
653+ (e.clientX / canvas.clientWidth) * 2 - 1,
654+ -(e.clientY / canvas.clientHeight) * 2 + 1),
655+ c);
656+ const intersects = raycaster.intersectObjects(raycasterObj);
657+
658+ for (const i of intersects) {
659+ const m = i.object;
660+ if (!m.material.visible){continue};
661+ for (const obj of objects) {
662+ for (const face_uuid of obj.faces) {
663+ if (face_uuid == m.uuid) {
664+ obj.gui_link.show = false
665+ obj.wirematerial.visible = false
666+ for (const face of obj.faces) {
667+ scene.getObjectByName(face).material.visible = false
668+ }
669+ requestRender();
670+ return
671+ }
672+ }
673+ }
674+ }
675+ }
676+
625677
626678 function onMouseMove(e) {
627679 let c = false;
@@ -645,7 +697,7 @@ def getHTMLTemplate():
645697 let chosen = '';
646698 for (const i of intersects) {
647699 const m = i.object.material;
648- if (m.opacity > 0) {
700+ if (( m.opacity > 0) & m.visible ) {
649701 if (m.emissive.getHex() == 0x000000) {
650702 m.emissive.setHex( 0x777777 );
651703 m.needsUpdate = true;
0 commit comments