From 0ece9b965c806b82365f24cd77fb513b894b1068 Mon Sep 17 00:00:00 2001 From: martinRenou <martin.renou@gmail.com> Date: Mon, 25 Nov 2024 18:11:46 +0100 Subject: [PATCH 1/4] Show selection in transparency for non-visible objects --- packages/base/src/3dview/helpers.ts | 3 +++ packages/base/src/3dview/mainview.tsx | 34 ++++++++++++++++++++------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/packages/base/src/3dview/helpers.ts b/packages/base/src/3dview/helpers.ts index af5dd17f8..9c75f941f 100644 --- a/packages/base/src/3dview/helpers.ts +++ b/packages/base/src/3dview/helpers.ts @@ -190,6 +190,9 @@ export function buildShape(options: { const meshGroup = new THREE.Group(); meshGroup.name = `${objName}-group`; meshGroup.visible = visible; + meshGroup.userData = { + visible + }; // We only build the stencil logic for solid meshes if (isSolid) { diff --git a/packages/base/src/3dview/mainview.tsx b/packages/base/src/3dview/mainview.tsx index f3cfe8020..f73d5dd73 100644 --- a/packages/base/src/3dview/mainview.tsx +++ b/packages/base/src/3dview/mainview.tsx @@ -781,7 +781,7 @@ export class MainView extends React.Component<IProps, IStates> { if (output) { const { meshGroup, mainMesh, edgesMeshes } = output; - if (meshGroup.visible) { + if (meshGroup.userData.visible) { this._boundingGroup.expandByObject(mainMesh); } @@ -844,6 +844,11 @@ export class MainView extends React.Component<IProps, IStates> { this._meshGroup?.add(meshGroup); } + const localState = this._model.localState; + if (localState?.selected?.value) { + this._updateSelected(localState.selected.value); + } + this._updateTransformControls(selectedNames); }); @@ -947,7 +952,6 @@ export class MainView extends React.Component<IProps, IStates> { const wireframe = new THREE.LineSegments(lineGeo, mat); mesh.add(wireframe); mesh.name = name; - mesh.visible = true; if (this._meshGroup) { this._meshGroup.add(mesh); this._boundingGroup?.expandByObject(mesh); @@ -1106,14 +1110,21 @@ export class MainView extends React.Component<IProps, IStates> { const parentGroup = this._meshGroup?.getObjectByName( selectedMesh.name - )?.parent; + )?.parent as THREE.Group; const boundingBox = parentGroup?.getObjectByName( SELECTION_BOUNDING_BOX ) as THREE.Mesh; + if (boundingBox) { boundingBox.visible = false; } + if (!parentGroup.userData.visible) { + parentGroup.visible = false; + selectedMesh.material.opacity = 1; + selectedMesh.material.transparent = false; + } + const material = selectedMesh.material as THREE.Material & { linewidth?: number; }; @@ -1131,10 +1142,12 @@ export class MainView extends React.Component<IProps, IStates> { selectionName ) as BasicMesh; - if (!selectedMesh || !selectedMesh.visible) { + if (!selectedMesh) { continue; } + this._selectedMeshes.push(selectedMesh); + if (selectedMesh.name.startsWith('edge')) { // Highlight edges using the old method if (!selectedMesh.userData.originalColor) { @@ -1142,7 +1155,6 @@ export class MainView extends React.Component<IProps, IStates> { selectedMesh.material.color.clone(); } - this._selectedMeshes.push(selectedMesh); if (selectedMesh?.material?.color) { selectedMesh.material.color = BOUNDING_BOX_COLOR; } @@ -1155,11 +1167,16 @@ export class MainView extends React.Component<IProps, IStates> { } } else { // Highlight non-edges using a bounding box - this._selectedMeshes.push(selectedMesh); - const parentGroup = this._meshGroup?.getObjectByName( selectedMesh.name - )?.parent; + )?.parent as THREE.Group; + + if (!parentGroup.userData.visible) { + parentGroup.visible = true; + selectedMesh.material.opacity = 0.5; + selectedMesh.material.transparent = true; + } + const boundingBox = parentGroup?.getObjectByName( SELECTION_BOUNDING_BOX ) as THREE.Mesh; @@ -1377,6 +1394,7 @@ export class MainView extends React.Component<IProps, IStates> { const objColor = obj?.material.color; obj.parent!.visible = isVisible; + obj.parent!.userData.visible = isVisible; const explodedLineHelper = this._explodedViewLinesHelperGroup?.getObjectByName(objName); From 88a29359cb073e1d5ee52bdc8f84d5bc190bb2e0 Mon Sep 17 00:00:00 2001 From: martinRenou <martin.renou@gmail.com> Date: Mon, 25 Nov 2024 18:25:39 +0100 Subject: [PATCH 2/4] Fix initial upon transparency --- packages/base/src/3dview/mainview.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/base/src/3dview/mainview.tsx b/packages/base/src/3dview/mainview.tsx index f73d5dd73..0d0571e69 100644 --- a/packages/base/src/3dview/mainview.tsx +++ b/packages/base/src/3dview/mainview.tsx @@ -804,6 +804,12 @@ export class MainView extends React.Component<IProps, IStates> { boundingBox.visible = true; } + if (!meshGroup.userData.visible) { + meshGroup.visible = true; + mainMesh.material.opacity = 0.5; + mainMesh.material.transparent = true; + } + this._selectedMeshes.push(mainMesh); } edgesMeshes.forEach(el => { @@ -844,11 +850,6 @@ export class MainView extends React.Component<IProps, IStates> { this._meshGroup?.add(meshGroup); } - const localState = this._model.localState; - if (localState?.selected?.value) { - this._updateSelected(localState.selected.value); - } - this._updateTransformControls(selectedNames); }); From ca1d0d15114cc7ca91586fe5d348373689bf3625 Mon Sep 17 00:00:00 2001 From: martinRenou <martin.renou@gmail.com> Date: Mon, 25 Nov 2024 18:39:12 +0100 Subject: [PATCH 3/4] Store jcObject in userData --- packages/base/src/3dview/helpers.ts | 2 +- packages/base/src/3dview/mainview.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/base/src/3dview/helpers.ts b/packages/base/src/3dview/helpers.ts index 9c75f941f..393cdc3e8 100644 --- a/packages/base/src/3dview/helpers.ts +++ b/packages/base/src/3dview/helpers.ts @@ -191,7 +191,7 @@ export function buildShape(options: { meshGroup.name = `${objName}-group`; meshGroup.visible = visible; meshGroup.userData = { - visible + jcObject }; // We only build the stencil logic for solid meshes diff --git a/packages/base/src/3dview/mainview.tsx b/packages/base/src/3dview/mainview.tsx index 0d0571e69..49febf555 100644 --- a/packages/base/src/3dview/mainview.tsx +++ b/packages/base/src/3dview/mainview.tsx @@ -781,7 +781,7 @@ export class MainView extends React.Component<IProps, IStates> { if (output) { const { meshGroup, mainMesh, edgesMeshes } = output; - if (meshGroup.userData.visible) { + if (meshGroup.userData.jcObject.visible) { this._boundingGroup.expandByObject(mainMesh); } @@ -804,7 +804,7 @@ export class MainView extends React.Component<IProps, IStates> { boundingBox.visible = true; } - if (!meshGroup.userData.visible) { + if (!meshGroup.userData.jcObject.visible) { meshGroup.visible = true; mainMesh.material.opacity = 0.5; mainMesh.material.transparent = true; @@ -1120,7 +1120,7 @@ export class MainView extends React.Component<IProps, IStates> { boundingBox.visible = false; } - if (!parentGroup.userData.visible) { + if (!parentGroup.userData.jcObject.visible) { parentGroup.visible = false; selectedMesh.material.opacity = 1; selectedMesh.material.transparent = false; @@ -1172,7 +1172,7 @@ export class MainView extends React.Component<IProps, IStates> { selectedMesh.name )?.parent as THREE.Group; - if (!parentGroup.userData.visible) { + if (!parentGroup.userData.jcObject.visible) { parentGroup.visible = true; selectedMesh.material.opacity = 0.5; selectedMesh.material.transparent = true; From b10769889a2dba10c28ea372b0f4d3e8a8db02b2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:39:45 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- packages/base/src/3dview/mainview.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/base/src/3dview/mainview.tsx b/packages/base/src/3dview/mainview.tsx index 49febf555..74d1a12eb 100644 --- a/packages/base/src/3dview/mainview.tsx +++ b/packages/base/src/3dview/mainview.tsx @@ -1109,9 +1109,8 @@ export class MainView extends React.Component<IProps, IStates> { selectedMesh.material.color = originalColor; } - const parentGroup = this._meshGroup?.getObjectByName( - selectedMesh.name - )?.parent as THREE.Group; + const parentGroup = this._meshGroup?.getObjectByName(selectedMesh.name) + ?.parent as THREE.Group; const boundingBox = parentGroup?.getObjectByName( SELECTION_BOUNDING_BOX ) as THREE.Mesh; @@ -1168,9 +1167,8 @@ export class MainView extends React.Component<IProps, IStates> { } } else { // Highlight non-edges using a bounding box - const parentGroup = this._meshGroup?.getObjectByName( - selectedMesh.name - )?.parent as THREE.Group; + const parentGroup = this._meshGroup?.getObjectByName(selectedMesh.name) + ?.parent as THREE.Group; if (!parentGroup.userData.jcObject.visible) { parentGroup.visible = true;