refactor: Enhance intersection filtering by adding zonePlane and selection group exclusions
This commit is contained in:
parent
e72854d514
commit
24810d0eeb
|
@ -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]}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue