From 24810d0eeb2362d9a63afdf0992e5a77c1b77993 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Thu, 29 May 2025 13:06:02 +0530 Subject: [PATCH] refactor: Enhance intersection filtering by adding zonePlane and selection group exclusions --- app/src/modules/builder/groups/zoneGroup.tsx | 3 +- .../collaboration/comments/commentsGroup.tsx | 18 +++++++--- .../selectionControls/selectionControls.tsx | 2 ++ .../modules/scene/tools/measurementTool.tsx | 14 +++++++- .../triggerConnections/triggerConnector.tsx | 12 +++++-- .../widgets/3d/Dropped3dWidget.tsx | 36 ++++++++++++------- 6 files changed, 64 insertions(+), 21 deletions(-) diff --git a/app/src/modules/builder/groups/zoneGroup.tsx b/app/src/modules/builder/groups/zoneGroup.tsx index 5b567af..21ba6cc 100644 --- a/app/src/modules/builder/groups/zoneGroup.tsx +++ b/app/src/modules/builder/groups/zoneGroup.tsx @@ -553,7 +553,7 @@ const ZoneGroup: React.FC = () => { const midpoint = new THREE.Vector3( (point1.x + point2.x) / 2, CONSTANTS.zoneConfig.height / 2 + - (zone.layer - 1) * CONSTANTS.zoneConfig.height, + (zone.layer - 1) * CONSTANTS.zoneConfig.height, (point1.z + point2.z) / 2 ); @@ -564,6 +564,7 @@ const ZoneGroup: React.FC = () => { return ( !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && - !intersect.object.name.includes("commentHolder") && !intersect.object.name.includes("agv-collider") && - !(intersect.object.type === "GridHelper") + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" ); if (intersects.length > 0) { @@ -67,9 +72,14 @@ function CommentsGroup() { (intersect) => !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && - !intersect.object.name.includes("commentHolder") && !intersect.object.name.includes("agv-collider") && - !(intersect.object.type === "GridHelper") + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" ); if (intersects.length > 0) { const position = new Vector3(intersects[0].point.x, Math.max(intersects[0].point.y, 0), intersects[0].point.z); diff --git a/app/src/modules/scene/controls/selectionControls/selectionControls.tsx b/app/src/modules/scene/controls/selectionControls/selectionControls.tsx index db072d2..02faf56 100644 --- a/app/src/modules/scene/controls/selectionControls/selectionControls.tsx +++ b/app/src/modules/scene/controls/selectionControls/selectionControls.tsx @@ -114,6 +114,7 @@ const SelectionControls: React.FC = () => { !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("agv-collider") && + !intersect.object.name.includes("zonePlane") && !intersect.object.name.includes("SelectionGroup") && !intersect.object.name.includes("selectionAssetGroup") && !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && @@ -124,6 +125,7 @@ const SelectionControls: React.FC = () => { if (intersects.length > 0) { const intersect = intersects[0]; const intersectObject = intersect.object; + console.log('intersectObject: ', intersectObject); let currentObject: THREE.Object3D | null = intersectObject; while (currentObject) { diff --git a/app/src/modules/scene/tools/measurementTool.tsx b/app/src/modules/scene/tools/measurementTool.tsx index f9d6ae7..1da41b3 100644 --- a/app/src/modules/scene/tools/measurementTool.tsx +++ b/app/src/modules/scene/tools/measurementTool.tsx @@ -51,6 +51,12 @@ const MeasurementTool = () => { !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("agv-collider") && + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && intersect.object.type !== "GridHelper" ); @@ -106,7 +112,13 @@ const MeasurementTool = () => { !intersect.object.name.includes("Roof") && !intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("agv-collider") && - !(intersect.object.type === "GridHelper") + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" ); if (intersects.length > 0) { diff --git a/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx b/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx index d082419..09048b4 100644 --- a/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx +++ b/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx @@ -368,12 +368,18 @@ function TriggerConnector() { const intersects = raycaster.intersectObjects(scene.children, true).filter( (intersect) => !intersect.object.name.includes("Roof") && - !intersect.object.name.includes("agv-collider") && !intersect.object.name.includes("MeasurementReference") && + !intersect.object.name.includes("agv-collider") && + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" && !intersect.object.name.includes("ArrowWithTube") && !intersect.object.parent?.name.includes("Zone") && - !(intersect.object.type === "GridHelper") && - !(intersect.object.type === "Line2") + intersect.object.type !== "Line2" ); let point: THREE.Vector3 | null = null; diff --git a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx index ccb88c4..601309a 100644 --- a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx +++ b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx @@ -138,9 +138,15 @@ export default function Dropped3dWidgets() { .filter( (intersect) => !intersect.object.name.includes("Roof") && - !intersect.object.name.includes("agv-collider") && !intersect.object.name.includes("MeasurementReference") && - !(intersect.object.type === "GridHelper") + !intersect.object.name.includes("agv-collider") && + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" ); if (intersects.length > 0) { @@ -174,9 +180,15 @@ export default function Dropped3dWidgets() { .filter( (intersect) => !intersect.object.name.includes("Roof") && - !intersect.object.name.includes("agv-collider") && !intersect.object.name.includes("MeasurementReference") && - !(intersect.object.type === "GridHelper") + !intersect.object.name.includes("agv-collider") && + !intersect.object.name.includes("zonePlane") && + !intersect.object.name.includes("SelectionGroup") && + !intersect.object.name.includes("selectionAssetGroup") && + !intersect.object.name.includes("SelectionGroupBoundingBoxLine") && + !intersect.object.name.includes("SelectionGroupBoundingBox") && + !intersect.object.name.includes("SelectionGroupBoundingLine") && + intersect.object.type !== "GridHelper" ); // Update widget's position in memory if (intersects.length > 0) { @@ -412,7 +424,7 @@ export default function Dropped3dWidgets() { } } }; - + const handleMouseMove = (event: MouseEvent) => { if (!rightClickSelected || !rightSelect) return; @@ -477,9 +489,9 @@ export default function Dropped3dWidgets() { // // planeIntersect.current // // ); // // console.log('intersect: ', intersect); - + // let intersect = event.clientY - + // if (intersect && typeof intersectcontextmenu === "number") { // console.log('intersect: ', intersect); // const diff = intersect - intersectcontextmenu; @@ -504,21 +516,21 @@ export default function Dropped3dWidgets() { lastClientY.current = event.clientY; return; } - + const diff = lastClientY.current - event.clientY; // dragging up = increase Y const scaleFactor = 0.05; // tune this based on your scene scale - + const unclampedY = selectedWidget.position[1] + diff * scaleFactor; const newY = Math.max(0, unclampedY); - + lastClientY.current = event.clientY; - + const newPosition: [number, number, number] = [ selectedWidget.position[0], newY, selectedWidget.position[2], ]; - + updateWidgetPosition(selectedZoneId, rightClickSelected, newPosition); }