import React from 'react'; import { useBeamStore } from '../../store/useBeamStore'; export const BeamGeometryInput: React.FC = () => { const { geometry, setGeometry } = useBeamStore(); const updateSpanLength = (spanId: number, length: number) => { const updatedSpans = geometry.spans.map(s => s.id === spanId ? { ...s, length } : s ); setGeometry({ spans: updatedSpans }); }; const updateSupportType = (supportId: number, type: 'Pinned' | 'Fixed' | 'Roller') => { const updatedSupports = geometry.supports.map(s => s.id === supportId ? { ...s, type } : s ); setGeometry({ supports: updatedSupports }); }; // Calculate total span for visualization const totalSpan = geometry.spans.reduce((sum, span) => sum + span.length, 0); return (
Beam Geometry
{/* Beam Visualization */}
{/* Beam span labels */} L Cant Span ① R Cant {/* Cantilever and main span dimensions */} {totalSpan > 0 ? `${totalSpan.toFixed(2)} ft` : '15.00 ft'} {/* Green beam */} {/* Supports */} {/* Support 1 */} {/* Support 2 */}
{/* Cantilever checkboxes */}
{/* Spans and Supports Tables */}
{/* Span Table */}
{geometry.spans.map((span) => ( ))} {geometry.spans.length < 5 && Array.from({ length: 5 - geometry.spans.length }).map((_, i) => ( ))} {geometry.leftCantilever && ( )} {geometry.rightCantilever && ( )}
Span Length
{span.id}
updateSpanLength(span.id, parseFloat(e.target.value) || 0)} step="0.1" /> ft
{geometry.spans.length + i + 1}
0.00 ft
L Cant setGeometry({ leftCantileverLength: parseFloat(e.target.value) || 0 })} step="0.1" /> ft
R Cant setGeometry({ rightCantileverLength: parseFloat(e.target.value) || 0 })} step="0.1" /> ft
{/* Support Table */}
{geometry.supports.map((support) => ( ))} {geometry.supports.length < 6 && Array.from({ length: 6 - geometry.supports.length }).map((_, i) => ( ))}
Support Type
{support.id}
{geometry.supports.length + i + 1}
); };