refactor: Enhance intersection filtering by adding zonePlane and selection group exclusions

This commit is contained in:
Jerald-Golden-B 2025-05-29 13:06:02 +05:30
parent e72854d514
commit 24810d0eeb
6 changed files with 64 additions and 21 deletions

View File

@ -553,7 +553,7 @@ const ZoneGroup: React.FC = () => {
const midpoint = new THREE.Vector3( const midpoint = new THREE.Vector3(
(point1.x + point2.x) / 2, (point1.x + point2.x) / 2,
CONSTANTS.zoneConfig.height / 2 + CONSTANTS.zoneConfig.height / 2 +
(zone.layer - 1) * CONSTANTS.zoneConfig.height, (zone.layer - 1) * CONSTANTS.zoneConfig.height,
(point1.z + point2.z) / 2 (point1.z + point2.z) / 2
); );
@ -564,6 +564,7 @@ const ZoneGroup: React.FC = () => {
return ( return (
<mesh <mesh
name="zonePlane"
key={index} key={index}
position={midpoint} position={midpoint}
rotation={[0, -angle, 0]} rotation={[0, -angle, 0]}

View File

@ -45,9 +45,14 @@ function CommentsGroup() {
(intersect) => (intersect) =>
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("MeasurementReference") &&
!intersect.object.name.includes("commentHolder") &&
!intersect.object.name.includes("agv-collider") && !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) { if (intersects.length > 0) {
@ -67,9 +72,14 @@ function CommentsGroup() {
(intersect) => (intersect) =>
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("MeasurementReference") &&
!intersect.object.name.includes("commentHolder") &&
!intersect.object.name.includes("agv-collider") && !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) { if (intersects.length > 0) {
const position = new Vector3(intersects[0].point.x, Math.max(intersects[0].point.y, 0), intersects[0].point.z); const position = new Vector3(intersects[0].point.x, Math.max(intersects[0].point.y, 0), intersects[0].point.z);

View File

@ -114,6 +114,7 @@ const SelectionControls: React.FC = () => {
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("MeasurementReference") &&
!intersect.object.name.includes("agv-collider") && !intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("zonePlane") &&
!intersect.object.name.includes("SelectionGroup") && !intersect.object.name.includes("SelectionGroup") &&
!intersect.object.name.includes("selectionAssetGroup") && !intersect.object.name.includes("selectionAssetGroup") &&
!intersect.object.name.includes("SelectionGroupBoundingBoxLine") && !intersect.object.name.includes("SelectionGroupBoundingBoxLine") &&
@ -124,6 +125,7 @@ const SelectionControls: React.FC = () => {
if (intersects.length > 0) { if (intersects.length > 0) {
const intersect = intersects[0]; const intersect = intersects[0];
const intersectObject = intersect.object; const intersectObject = intersect.object;
console.log('intersectObject: ', intersectObject);
let currentObject: THREE.Object3D | null = intersectObject; let currentObject: THREE.Object3D | null = intersectObject;
while (currentObject) { while (currentObject) {

View File

@ -51,6 +51,12 @@ const MeasurementTool = () => {
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("MeasurementReference") &&
!intersect.object.name.includes("agv-collider") && !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.type !== "GridHelper"
); );
@ -106,7 +112,13 @@ const MeasurementTool = () => {
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("MeasurementReference") && !intersect.object.name.includes("MeasurementReference") &&
!intersect.object.name.includes("agv-collider") && !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) { if (intersects.length > 0) {

View File

@ -368,12 +368,18 @@ function TriggerConnector() {
const intersects = raycaster.intersectObjects(scene.children, true).filter( const intersects = raycaster.intersectObjects(scene.children, true).filter(
(intersect) => (intersect) =>
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") && !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.name.includes("ArrowWithTube") &&
!intersect.object.parent?.name.includes("Zone") && !intersect.object.parent?.name.includes("Zone") &&
!(intersect.object.type === "GridHelper") && intersect.object.type !== "Line2"
!(intersect.object.type === "Line2")
); );
let point: THREE.Vector3 | null = null; let point: THREE.Vector3 | null = null;

View File

@ -138,9 +138,15 @@ export default function Dropped3dWidgets() {
.filter( .filter(
(intersect) => (intersect) =>
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") && !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) { if (intersects.length > 0) {
@ -174,9 +180,15 @@ export default function Dropped3dWidgets() {
.filter( .filter(
(intersect) => (intersect) =>
!intersect.object.name.includes("Roof") && !intersect.object.name.includes("Roof") &&
!intersect.object.name.includes("agv-collider") &&
!intersect.object.name.includes("MeasurementReference") && !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 // Update widget's position in memory
if (intersects.length > 0) { if (intersects.length > 0) {
@ -412,7 +424,7 @@ export default function Dropped3dWidgets() {
} }
} }
}; };
const handleMouseMove = (event: MouseEvent) => { const handleMouseMove = (event: MouseEvent) => {
if (!rightClickSelected || !rightSelect) return; if (!rightClickSelected || !rightSelect) return;
@ -477,9 +489,9 @@ export default function Dropped3dWidgets() {
// // planeIntersect.current // // planeIntersect.current
// // ); // // );
// // console.log('intersect: ', intersect); // // console.log('intersect: ', intersect);
// let intersect = event.clientY // let intersect = event.clientY
// if (intersect && typeof intersectcontextmenu === "number") { // if (intersect && typeof intersectcontextmenu === "number") {
// console.log('intersect: ', intersect); // console.log('intersect: ', intersect);
// const diff = intersect - intersectcontextmenu; // const diff = intersect - intersectcontextmenu;
@ -504,21 +516,21 @@ export default function Dropped3dWidgets() {
lastClientY.current = event.clientY; lastClientY.current = event.clientY;
return; return;
} }
const diff = lastClientY.current - event.clientY; // dragging up = increase Y const diff = lastClientY.current - event.clientY; // dragging up = increase Y
const scaleFactor = 0.05; // tune this based on your scene scale const scaleFactor = 0.05; // tune this based on your scene scale
const unclampedY = selectedWidget.position[1] + diff * scaleFactor; const unclampedY = selectedWidget.position[1] + diff * scaleFactor;
const newY = Math.max(0, unclampedY); const newY = Math.max(0, unclampedY);
lastClientY.current = event.clientY; lastClientY.current = event.clientY;
const newPosition: [number, number, number] = [ const newPosition: [number, number, number] = [
selectedWidget.position[0], selectedWidget.position[0],
newY, newY,
selectedWidget.position[2], selectedWidget.position[2],
]; ];
updateWidgetPosition(selectedZoneId, rightClickSelected, newPosition); updateWidgetPosition(selectedZoneId, rightClickSelected, newPosition);
} }