feat: Clean up commented code and improve asset handling in various components
This commit is contained in:
@@ -95,7 +95,7 @@ export default function Builder() {
|
|||||||
|
|
||||||
<AssetsGroup plane={plane} />
|
<AssetsGroup plane={plane} />
|
||||||
|
|
||||||
{/* <mesh name='Walls-And-WallAssets-Group'>
|
<mesh name='Walls-And-WallAssets-Group'>
|
||||||
<Geometry ref={csgRef} useGroups>
|
<Geometry ref={csgRef} useGroups>
|
||||||
|
|
||||||
<WallGroup />
|
<WallGroup />
|
||||||
@@ -103,7 +103,7 @@ export default function Builder() {
|
|||||||
<WallAssetGroup />
|
<WallAssetGroup />
|
||||||
|
|
||||||
</Geometry>
|
</Geometry>
|
||||||
</mesh> */}
|
</mesh>
|
||||||
|
|
||||||
<AislesGroup />
|
<AislesGroup />
|
||||||
|
|
||||||
@@ -113,9 +113,9 @@ export default function Builder() {
|
|||||||
|
|
||||||
<MeasurementTool />
|
<MeasurementTool />
|
||||||
|
|
||||||
{/* <CalculateAreaGroup /> */}
|
<CalculateAreaGroup />
|
||||||
|
|
||||||
{/* <NavMesh /> */}
|
<NavMesh />
|
||||||
|
|
||||||
<DxfFile />
|
<DxfFile />
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const CopyPasteControls3D = ({
|
|||||||
const { assetStore, eventStore } = useSceneContext();
|
const { assetStore, eventStore } = useSceneContext();
|
||||||
const { addEvent } = eventStore();
|
const { addEvent } = eventStore();
|
||||||
const { projectId } = useParams();
|
const { projectId } = useParams();
|
||||||
const { assets, addAsset, setPosition, updateAsset, removeAsset, getAssetById } = assetStore();
|
const { assets, addAsset, updateAsset, removeAsset, getAssetById } = assetStore();
|
||||||
const { selectedVersionStore } = useVersionContext();
|
const { selectedVersionStore } = useVersionContext();
|
||||||
const { selectedVersion } = selectedVersionStore();
|
const { selectedVersion } = selectedVersionStore();
|
||||||
const { userId, organization } = getUserData();
|
const { userId, organization } = getUserData();
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ function MoveControls3D({
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateAsset(movedAsset.userData.modelUuid, {
|
updateAsset(movedAsset.userData.modelUuid, {
|
||||||
position: asset.position,
|
position: [position.x, position.y, position.z],
|
||||||
rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z],
|
rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useEffect, useMemo } from "react";
|
import { useEffect, useMemo } from "react";
|
||||||
import { Canvas } from "@react-three/fiber";
|
import { Canvas } from "@react-three/fiber";
|
||||||
import { KeyboardControls, Stats } from "@react-three/drei";
|
import { KeyboardControls } from "@react-three/drei";
|
||||||
import { useSceneContext } from "./sceneContext";
|
import { useSceneContext } from "./sceneContext";
|
||||||
|
|
||||||
import Builder from "../builder/builder";
|
import Builder from "../builder/builder";
|
||||||
@@ -52,7 +52,7 @@ export default function Scene({ layout }: { readonly layout: 'Main Layout' | 'Co
|
|||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
}, [activeModule, assets, loadingProgress])
|
}, [activeModule, assets, loadingProgress])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -76,7 +76,6 @@ export default function Scene({ layout }: { readonly layout: 'Main Layout' | 'Co
|
|||||||
<Builder />
|
<Builder />
|
||||||
<Simulation />
|
<Simulation />
|
||||||
<Visualization />
|
<Visualization />
|
||||||
<Stats />
|
|
||||||
</Canvas>
|
</Canvas>
|
||||||
</KeyboardControls>
|
</KeyboardControls>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,15 +1,27 @@
|
|||||||
import { useEffect, useRef, useState } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
import { useFrame } from '@react-three/fiber';
|
import { useFrame, useThree } from '@react-three/fiber';
|
||||||
import * as THREE from 'three';
|
import * as THREE from 'three';
|
||||||
import { Line, Text } from '@react-three/drei';
|
import { Line, Text } from '@react-three/drei';
|
||||||
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
||||||
|
import { useSceneContext } from '../../../../scene/sceneContext';
|
||||||
|
import { useProductContext } from '../../../products/productContext';
|
||||||
|
|
||||||
type PointWithDegree = {
|
type PointWithDegree = {
|
||||||
position: [number, number, number];
|
position: [number, number, number];
|
||||||
degree: number;
|
degree: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone, armBot, path }: any) {
|
interface RoboticArmAnimatorProps {
|
||||||
|
HandleCallback: () => void;
|
||||||
|
restPosition: THREE.Vector3;
|
||||||
|
ikSolver: any;
|
||||||
|
targetBone: string;
|
||||||
|
armBot: ArmBotStatus;
|
||||||
|
path: [number, number, number][];
|
||||||
|
currentPhase: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone, armBot, path, currentPhase }: RoboticArmAnimatorProps) {
|
||||||
const progressRef = useRef(0);
|
const progressRef = useRef(0);
|
||||||
const curveRef = useRef<THREE.Vector3[] | null>(null);
|
const curveRef = useRef<THREE.Vector3[] | null>(null);
|
||||||
const totalDistanceRef = useRef(0);
|
const totalDistanceRef = useRef(0);
|
||||||
@@ -19,6 +31,14 @@ function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone
|
|||||||
const [circlePoints, setCirclePoints] = useState<[number, number, number][]>([]);
|
const [circlePoints, setCirclePoints] = useState<[number, number, number][]>([]);
|
||||||
const [circlePointsWithDegrees, setCirclePointsWithDegrees] = useState<PointWithDegree[]>([]);
|
const [circlePointsWithDegrees, setCirclePointsWithDegrees] = useState<PointWithDegree[]>([]);
|
||||||
const [customCurvePoints, setCustomCurvePoints] = useState<THREE.Vector3[] | null>(null);
|
const [customCurvePoints, setCustomCurvePoints] = useState<THREE.Vector3[] | null>(null);
|
||||||
|
const { armBotStore, productStore, materialStore } = useSceneContext();
|
||||||
|
const { getArmBotById } = armBotStore();
|
||||||
|
const { getMaterialById } = materialStore();
|
||||||
|
const { getEventByModelUuid } = productStore();
|
||||||
|
const { selectedProductStore } = useProductContext();
|
||||||
|
const { selectedProduct } = selectedProductStore();
|
||||||
|
const { scene } = useThree();
|
||||||
|
|
||||||
let curveHeight = 1.75
|
let curveHeight = 1.75
|
||||||
const CIRCLE_RADIUS = 1.6
|
const CIRCLE_RADIUS = 1.6
|
||||||
|
|
||||||
@@ -145,8 +165,38 @@ function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (circlePoints.length > 0 && currentPath.length > 0) {
|
if (circlePoints.length > 0 && currentPath.length > 0) {
|
||||||
|
|
||||||
const start = currentPath[0];
|
let start = currentPath[0];
|
||||||
const end = currentPath[currentPath.length - 1];
|
let end = currentPath[currentPath.length - 1];
|
||||||
|
|
||||||
|
const armbotStatus = getArmBotById(armBot.modelUuid);
|
||||||
|
const currentMaterial = armbotStatus?.currentAction?.materialId;
|
||||||
|
if (armbotStatus && currentMaterial && (currentPhase === 'rest-to-start' || currentPhase === 'start-to-end')) {
|
||||||
|
const materialData = getMaterialById(currentMaterial);
|
||||||
|
if (materialData) {
|
||||||
|
const prevModel = getEventByModelUuid(selectedProduct.productUuid, materialData.current.modelUuid);
|
||||||
|
|
||||||
|
if (prevModel && prevModel.type === 'transfer') {
|
||||||
|
const material = scene.getObjectByProperty("uuid", currentMaterial);
|
||||||
|
const armbotModel = scene.getObjectByProperty("uuid", armBot.modelUuid);
|
||||||
|
if (material && armbotModel) {
|
||||||
|
const materialWorldPos = new THREE.Vector3();
|
||||||
|
material.getWorldPosition(materialWorldPos);
|
||||||
|
|
||||||
|
const armbotWorldPos = new THREE.Vector3();
|
||||||
|
armbotModel.getWorldPosition(armbotWorldPos);
|
||||||
|
|
||||||
|
const materialLocalPos = materialWorldPos.clone();
|
||||||
|
armbotModel.worldToLocal(materialLocalPos);
|
||||||
|
|
||||||
|
if (currentPhase === 'rest-to-start') {
|
||||||
|
end = [materialLocalPos.x, materialLocalPos.y + 0.35, materialLocalPos.z];
|
||||||
|
} else if (currentPhase === 'start-to-end') {
|
||||||
|
start = [materialLocalPos.x, materialLocalPos.y + 0.35, materialLocalPos.z];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const raisedStart = [start[0], start[1] + 0.5, start[2]] as [number, number, number];
|
const raisedStart = [start[0], start[1] + 0.5, start[2]] as [number, number, number];
|
||||||
const raisedEnd = [end[0], end[1] + 0.5, end[2]] as [number, number, number];
|
const raisedEnd = [end[0], end[1] + 0.5, end[2]] as [number, number, number];
|
||||||
|
|||||||
@@ -334,7 +334,6 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) {
|
|||||||
|
|
||||||
}, [currentPhase, armBot, isPlaying, isReset, ikSolver])
|
}, [currentPhase, armBot, isPlaying, isReset, ikSolver])
|
||||||
|
|
||||||
|
|
||||||
function createCurveBetweenTwoPoints(p1: any, p2: any) {
|
function createCurveBetweenTwoPoints(p1: any, p2: any) {
|
||||||
const mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5);
|
const mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5);
|
||||||
const points = [p1, mid, p2];
|
const points = [p1, mid, p2];
|
||||||
@@ -342,7 +341,6 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const HandleCallback = () => {
|
const HandleCallback = () => {
|
||||||
|
|
||||||
if (armBot.isActive && armBot.state == "running" && currentPhase == "init-to-rest") {
|
if (armBot.isActive && armBot.state == "running" && currentPhase == "init-to-rest") {
|
||||||
logStatus(armBot.modelUuid, "Callback triggered: rest");
|
logStatus(armBot.modelUuid, "Callback triggered: rest");
|
||||||
setArmBotActive(armBot.modelUuid, false)
|
setArmBotActive(armBot.modelUuid, false)
|
||||||
@@ -370,7 +368,6 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) {
|
|||||||
setArmBotState(armBot.modelUuid, "idle")
|
setArmBotState(armBot.modelUuid, "idle")
|
||||||
setCurrentPhase("rest");
|
setCurrentPhase("rest");
|
||||||
setPath([])
|
setPath([])
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,7 +386,6 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) {
|
|||||||
ikSolver={ikSolver}
|
ikSolver={ikSolver}
|
||||||
targetBone={targetBone}
|
targetBone={targetBone}
|
||||||
armBot={armBot}
|
armBot={armBot}
|
||||||
logStatus={logStatus}
|
|
||||||
path={path}
|
path={path}
|
||||||
currentPhase={currentPhase}
|
currentPhase={currentPhase}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ const ArmBotUI = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fetch and setup selected ArmBot data
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (selectedEventSphere) {
|
if (selectedEventSphere) {
|
||||||
const selectedArmBot = getEventByModelUuid(selectedProduct.productUuid, selectedEventSphere.userData.modelUuid);
|
const selectedArmBot = getEventByModelUuid(selectedProduct.productUuid, selectedEventSphere.userData.modelUuid);
|
||||||
@@ -85,11 +86,13 @@ const ArmBotUI = () => {
|
|||||||
const modelData = getEventByModelUuid(selectedProduct.productUuid, modelUuid);
|
const modelData = getEventByModelUuid(selectedProduct.productUuid, modelUuid);
|
||||||
|
|
||||||
if (modelData?.type === "roboticArm") {
|
if (modelData?.type === "roboticArm") {
|
||||||
const baseY = modelData.point.position?.[1] || 0;
|
const baseX = modelData.point.position?.[0] || 0;
|
||||||
|
const baseY = modelData.point.position?.[1] || 0;;
|
||||||
|
const baseZ = modelData.point.position?.[2] || 0;
|
||||||
return {
|
return {
|
||||||
pick: [0, baseY, 0 + 0.5],
|
pick: [baseX, baseY, baseZ + 0.5],
|
||||||
drop: [0, baseY, 0 - 0.5],
|
drop: [baseX, baseY, baseZ - 0.5],
|
||||||
default: [0, baseY, 0],
|
default: [baseX, baseY, baseZ],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +225,7 @@ const ArmBotUI = () => {
|
|||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null; // important! must return something
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -183,7 +183,11 @@ export default function useDraggableGLTF(
|
|||||||
targetPosition.z = centerZ + finalLocal.z;
|
targetPosition.z = centerZ + finalLocal.z;
|
||||||
|
|
||||||
// Clamp Y axis using variables
|
// Clamp Y axis using variables
|
||||||
targetPosition.y = Math.min(Math.max(targetPosition.y, minHeight), maxHeight);
|
|
||||||
|
targetPosition.y = Math.min(
|
||||||
|
Math.max(targetPosition.y, Math.min(minHeight, maxHeight)),
|
||||||
|
Math.max(minHeight, maxHeight)
|
||||||
|
);
|
||||||
|
|
||||||
// Convert to local if parent exists
|
// Convert to local if parent exists
|
||||||
if (parent) {
|
if (parent) {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
import React, { useEffect, useMemo, useRef, useState } from 'react'
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import { useFrame, useThree, ThreeEvent } from '@react-three/fiber';
|
import { useFrame, useThree, ThreeEvent } from '@react-three/fiber';
|
||||||
import * as THREE from 'three';
|
import * as THREE from 'three';
|
||||||
import { Line, TransformControls } from '@react-three/drei';
|
import { Line } from '@react-three/drei';
|
||||||
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
||||||
import { useSceneContext } from '../../../../scene/sceneContext';
|
import { useSceneContext } from '../../../../scene/sceneContext';
|
||||||
import { useActiveTool, useSelectedPath } from '../../../../../store/builder/store';
|
import { useActiveTool, useSelectedPath } from '../../../../../store/builder/store';
|
||||||
|
|||||||
Reference in New Issue
Block a user