Skip to content

Commit 60e9947

Browse files
je-cookyorikvanhavre
authored andcommitted
Add option to hide shape also hidden on double click
1 parent 4b7ce7c commit 60e9947

File tree

1 file changed

+57
-5
lines changed

1 file changed

+57
-5
lines changed

src/Mod/BIM/importers/importWebGL.py

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)