import { usePileCapStore } from '../../store/pileCapStore'; import { DraggableLabel } from './DraggableLabel'; export const ElevationDiagram = () => { const geometry = usePileCapStore(state => state.geometry); // Global Diagram State const isLocked = usePileCapStore(state => state.diagramState.isLocked); const labelPositions = usePileCapStore(state => state.diagramState.labelPositions); const setDiagramLocked = usePileCapStore(state => state.setDiagramLocked); const updateLabelPosition = usePileCapStore(state => state.updateLabelPosition); const getLabelPos = (id: string, defaultX: number, defaultY: number) => { return labelPositions[id] || { x: defaultX, y: defaultY }; }; const scale = 30; // pixels per foot const svgWidth = geometry.length * scale + 100; const svgHeight = (geometry.soilCover + geometry.depth / 12 + 3) * scale + 100; // Add space for piles below const offsetX = 50; const offsetY = 50; // Calculate heights const soilHeight = geometry.soilCover * scale; const pileCapHeight = (geometry.depth / 12) * scale; const pileExtension = 2 * scale; // Show 2 feet of pile below cap // Pile positions const startX = (geometry.length - (geometry.pileColumns - 1) * geometry.pileSpacingX) / 2; return (
Pile Cap - Elevation View
{/* Controls */}
{/* Ground level line */} {/* Soil cover */} {geometry.soilCover > 0 && ( <> )} {/* Pile Cap */} {/* Pile cap thickness label */} {/* Column/Pedestal */} {/* Piles - show centerline piles */} {Array.from({ length: geometry.pileColumns }).map((_, col) => { const x = startX + col * geometry.pileSpacingX; const pileWidth = (geometry.pileSize / 12) * scale; return ( {/* Pile body */} {/* Pile embed indication */} {geometry.pileTopEmbed > 0 && ( )} ); })} {/* Pile cap length dimension */} {/* Arrow markers */}
); };