feat: Add wall classification and geometry handling, update wall rendering logic

This commit is contained in:
2025-06-04 15:19:37 +05:30
parent 20b6f84b38
commit a69fd2af92
10 changed files with 387 additions and 20 deletions

View File

@@ -8,6 +8,7 @@ import { useThree } from '@react-three/fiber';
import { useBuilderStore } from '../../../store/builder/useBuilderStore';
import { usePointSnapping } from './helpers/usePointSnapping';
import { useAislePointSnapping } from './helpers/useAisleDragSnap';
import { useWallStore } from '../../../store/builder/useWallStore';
function Point({ point }: { readonly point: Point }) {
const materialRef = useRef<THREE.ShaderMaterial>(null);
@@ -15,7 +16,8 @@ function Point({ point }: { readonly point: Point }) {
const plane = useMemo(() => new THREE.Plane(new THREE.Vector3(0, 1, 0), 0), []);
const [isHovered, setIsHovered] = useState(false);
const { toolMode } = useToolMode();
const { setPosition, removePoint } = useAisleStore();
const { setPosition: setAislePosition, removePoint: removeAislePoint } = useAisleStore();
const { setPosition: setWallPosition, removePoint: removeWallPoint } = useWallStore();
const { snapPosition } = useAislePointSnapping(point);
const { checkSnapForAisle } = usePointSnapping({ uuid: point.pointUuid, pointType: point.pointType, position: point.position });
const { hoveredPoint, setHoveredPoint } = useBuilderStore();
@@ -95,7 +97,13 @@ function Point({ point }: { readonly point: Point }) {
const aisleSnappedPosition = snapPosition(newPosition);
const finalSnappedPosition = checkSnapForAisle(aisleSnappedPosition.position);
setPosition(point.pointUuid, finalSnappedPosition.position);
setAislePosition(point.pointUuid, finalSnappedPosition.position);
}
} else if (point.pointType === 'Wall') {
if (position) {
const newPosition: [number, number, number] = [position.x, position.y, position.z];
setWallPosition(point.pointUuid, newPosition);
}
}
}
@@ -109,7 +117,7 @@ function Point({ point }: { readonly point: Point }) {
const handlePointClick = (point: Point) => {
if (deletePointOrLine) {
if (point.pointType === 'Aisle') {
const removedAisles = removePoint(point.pointUuid);
const removedAisles = removeAislePoint(point.pointUuid);
if (removedAisles.length > 0) {
setHoveredPoint(null);
}