🚀 Auto-deploy: BrainWind atualizado em 21/07/2026 15:36:29
This commit is contained in:
@@ -21,9 +21,8 @@ const LinearLoadsTable: React.FC = () => {
|
|||||||
const wind = useWindStore();
|
const wind = useWindStore();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const { width: b, length: a, height: h, roofPitch, wallCpe, roofCpe } = galpao;
|
const { width: b, length: a, height: h, roofPitch, wallCpe, roofCpe } = galpao;
|
||||||
const { q, cpi, windAngle } = wind;
|
const { q, cpi, windAngle, frameSpacing, setFrameSpacing } = wind;
|
||||||
|
|
||||||
const [frameSpacing, setFrameSpacing] = useState<number>(6.0);
|
|
||||||
const [purlinSpacing, setPurlinSpacing] = useState<number>(1.5);
|
const [purlinSpacing, setPurlinSpacing] = useState<number>(1.5);
|
||||||
|
|
||||||
const columnLoads = useMemo(
|
const columnLoads = useMemo(
|
||||||
|
|||||||
@@ -84,13 +84,12 @@ export function buildFtoolModel(): FtoolModel {
|
|||||||
const galpao = useGalpaoStore.getState();
|
const galpao = useGalpaoStore.getState();
|
||||||
const wind = useWindStore.getState();
|
const wind = useWindStore.getState();
|
||||||
const { width: b, height: h, roofPitch, wallCpe, roofCpe } = galpao;
|
const { width: b, height: h, roofPitch, wallCpe, roofCpe } = galpao;
|
||||||
const { q, cpi, windAngle } = wind;
|
const { q, cpi, windAngle, frameSpacing } = wind;
|
||||||
|
|
||||||
const FRAME_SPACING = 6.0;
|
const columnLoads = getColumnLinearLoads(cpi, q, wallCpe, frameSpacing, windAngle);
|
||||||
const PURLIN_SPACING = 1.5;
|
// Para Ftool (análise 2D de pórtico principal), a viga de cobertura (rafter)
|
||||||
|
// também recebe a carga baseada no espaçamento entre pórticos.
|
||||||
const columnLoads = getColumnLinearLoads(cpi, q, wallCpe, FRAME_SPACING, windAngle);
|
const roofLoads = getRoofLinearLoads(cpi, q, roofCpe, frameSpacing, roofPitch);
|
||||||
const roofLoads = getRoofLinearLoads(cpi, q, roofCpe, PURLIN_SPACING, roofPitch);
|
|
||||||
|
|
||||||
const rise = (b / 2) * Math.tan((roofPitch * Math.PI) / 180);
|
const rise = (b / 2) * Math.tan((roofPitch * Math.PI) / 180);
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ export interface GlobalWindState {
|
|||||||
authorName: string;
|
authorName: string;
|
||||||
projectRev: string;
|
projectRev: string;
|
||||||
setProjectMetadata: (data: Partial<{projectName: string, clientName: string, authorName: string, projectRev: string}>) => void;
|
setProjectMetadata: (data: Partial<{projectName: string, clientName: string, authorName: string, projectRev: string}>) => void;
|
||||||
|
|
||||||
|
// Cargas Lineares (M9.2)
|
||||||
|
frameSpacing: number; // Espaçamento entre pórticos em metros
|
||||||
|
setFrameSpacing: (spacing: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
function calcCpi(permeabilityCase: PermeabilityCase, ratio: number, windAngle: 0 | 90): number {
|
function calcCpi(permeabilityCase: PermeabilityCase, ratio: number, windAngle: 0 | 90): number {
|
||||||
@@ -118,6 +122,9 @@ export const useWindStore = create<GlobalWindState>((set, get) => {
|
|||||||
projectRev: 'R0',
|
projectRev: 'R0',
|
||||||
setProjectMetadata: (data) => set((state) => ({ ...state, ...data })),
|
setProjectMetadata: (data) => set((state) => ({ ...state, ...data })),
|
||||||
|
|
||||||
|
frameSpacing: 5.0,
|
||||||
|
setFrameSpacing: (val) => set({ frameSpacing: val }),
|
||||||
|
|
||||||
updateCalculations: () => set((state) => recalc(state)),
|
updateCalculations: () => set((state) => recalc(state)),
|
||||||
|
|
||||||
setV0: (val) => {
|
setV0: (val) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user