🚀 Auto-deploy: BrainWind atualizado em 30/07/2026 10:29:57
This commit is contained in:
@@ -113,7 +113,7 @@ function BridgeModel({
|
|||||||
/>
|
/>
|
||||||
<Text
|
<Text
|
||||||
position={[-halfL * 0.8, deckY + 1.5, -halfW - 4]}
|
position={[-halfL * 0.8, deckY + 1.5, -halfW - 4]}
|
||||||
rotation={[0, Math.PI / 4, 0]}
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={1.2}
|
fontSize={1.2}
|
||||||
color={isDark ? '#60a5fa' : '#3b82f6'}
|
color={isDark ? '#60a5fa' : '#3b82f6'}
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ function IsolatedRoofModel({
|
|||||||
</group>
|
</group>
|
||||||
<Text
|
<Text
|
||||||
position={[0, centerY + 1.2, -halfDepth - 3.5]}
|
position={[0, centerY + 1.2, -halfDepth - 3.5]}
|
||||||
rotation={[0, -3 * Math.PI / 4, 0]}
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={1.2}
|
fontSize={1.2}
|
||||||
color="#3b82f6"
|
color="#3b82f6"
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
@@ -260,7 +260,7 @@ function IsolatedRoofModel({
|
|||||||
{/* Rótulo Superior */}
|
{/* Rótulo Superior */}
|
||||||
<Text
|
<Text
|
||||||
position={[0, centerY + 3, 0]}
|
position={[0, centerY + 3, 0]}
|
||||||
rotation={[0, -3 * Math.PI / 4, 0]}
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={Math.max(0.4, width / 15)}
|
fontSize={Math.max(0.4, width / 15)}
|
||||||
color={textColor}
|
color={textColor}
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
import React, { useRef } from 'react';
|
|
||||||
import * as THREE from 'three';
|
|
||||||
import { useFrame } from '@react-three/fiber';
|
|
||||||
import { Text, Grid, Environment } from '@react-three/drei';
|
import { Text, Grid, Environment } from '@react-three/drei';
|
||||||
import { WindArrow as GlobalWindArrow } from './WindArrow';
|
import { WindArrow as GlobalWindArrow } from './WindArrow';
|
||||||
import { ViewerOrbitControls as OrbitControls } from './ViewerOrbitControls';
|
import { ViewerOrbitControls as OrbitControls } from './ViewerOrbitControls';
|
||||||
@@ -35,7 +32,7 @@ function ShelterModel({
|
|||||||
rightClosure,
|
rightClosure,
|
||||||
openingPos,
|
openingPos,
|
||||||
backRange,
|
backRange,
|
||||||
windAngle = 0,
|
windAngle: _windAngle = 0,
|
||||||
viewMode,
|
viewMode,
|
||||||
}: Shelter3DProps) {
|
}: Shelter3DProps) {
|
||||||
const isElevation = viewMode === 'elevation';
|
const isElevation = viewMode === 'elevation';
|
||||||
@@ -135,15 +132,15 @@ function ShelterModel({
|
|||||||
{/* Seta de Vento Global (Sempre visível para não pular de posição) */}
|
{/* Seta de Vento Global (Sempre visível para não pular de posição) */}
|
||||||
<group>
|
<group>
|
||||||
<GlobalWindArrow
|
<GlobalWindArrow
|
||||||
target={[-halfW * 1.2, height * 1.5 - 1.5, -halfD - 5 + 2]}
|
target={[0, height * 1.5 - 1.5, -halfD - 8 + 2]}
|
||||||
direction={[0, 0, 1]}
|
direction={[0, 0, 1]}
|
||||||
scale={4}
|
scale={3.2}
|
||||||
/>
|
/>
|
||||||
<Text
|
<Text
|
||||||
position={[-halfW * 1.2, height * 1.5, -halfD - 5]}
|
position={[0, height * 1.5, -halfD - 8]}
|
||||||
rotation={[0, Math.PI / 4, 0]}
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={1.2}
|
fontSize={0.96}
|
||||||
color={isDark ? '#60a5fa' : '#3b82f6'}
|
color={isDark ? '#60a5fa' : '#2563eb'}
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
anchorY="bottom"
|
anchorY="bottom"
|
||||||
>
|
>
|
||||||
@@ -166,13 +163,13 @@ function ShelterModel({
|
|||||||
{/* Textos Informativos 3D - Virados para quem olha da frente (-Z) */}
|
{/* Textos Informativos 3D - Virados para quem olha da frente (-Z) */}
|
||||||
{!isAirflow && (
|
{!isAirflow && (
|
||||||
<>
|
<>
|
||||||
<Text position={[0, height + slopeRise + 1.2, 0]} rotation={[0, Math.PI, 0]} fontSize={0.45} color="#e2e8f0">
|
<Text position={[0, height + slopeRise + 1.4, 0]} rotation={[0, Math.PI, 0]} fontSize={0.45} color={isDark ? '#f8fafc' : '#0f172a'}>
|
||||||
{isElevation ? 'CORTE A-A (Elevação)' : 'Abrigo / Pórtico (NBR 6123)'}
|
{isElevation ? 'CORTE A-A (Elevação)' : 'Abrigo / Pórtico (NBR 6123)'}
|
||||||
</Text>
|
</Text>
|
||||||
<Text position={[0, height + slopeRise + 0.5, 0]} rotation={[0, Math.PI, 0]} fontSize={0.32} color="#f43f5e">
|
<Text position={[0, height + slopeRise + 0.6, 0]} rotation={[0, Math.PI, 0]} fontSize={0.51} color={isDark ? '#ff4d6d' : '#b91c1c'}>
|
||||||
Arrancamento [+Fz ↑]
|
Arrancamento [+Fz ↑]
|
||||||
</Text>
|
</Text>
|
||||||
<Text position={[0, height * 0.5, halfD + 1.2]} rotation={[0, Math.PI, 0]} fontSize={0.32} color="#fb923c">
|
<Text position={[0, height * 0.5, halfD + 1.2]} rotation={[0, Math.PI, 0]} fontSize={0.51} color={isDark ? '#ff9f43' : '#c2410c'}>
|
||||||
Empuxo no Fundo [+Fx →]
|
Empuxo no Fundo [+Fx →]
|
||||||
</Text>
|
</Text>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export interface SignAirflowSystemProps {
|
|||||||
|
|
||||||
export function SignAirflowSystem({ length, height, groundClearance, alpha, cf }: SignAirflowSystemProps) {
|
export function SignAirflowSystem({ length, height, groundClearance, alpha, cf }: SignAirflowSystemProps) {
|
||||||
const isDark = useCanvasTheme() === 'dark';
|
const isDark = useCanvasTheme() === 'dark';
|
||||||
const count = 350;
|
const count = 175;
|
||||||
const meshRef = useRef<THREE.InstancedMesh>(null);
|
const meshRef = useRef<THREE.InstancedMesh>(null);
|
||||||
const baseY = groundClearance;
|
const baseY = groundClearance;
|
||||||
const topY = baseY + height;
|
const topY = baseY + height;
|
||||||
@@ -34,7 +34,7 @@ export function SignAirflowSystem({ length, height, groundClearance, alpha, cf }
|
|||||||
Math.random() * (topY * 1.6),
|
Math.random() * (topY * 1.6),
|
||||||
(Math.random() - 0.5) * limitZ * 2
|
(Math.random() - 0.5) * limitZ * 2
|
||||||
),
|
),
|
||||||
baseSpeed: 0.12 + Math.random() * 0.08,
|
baseSpeed: 0.06 + Math.random() * 0.04,
|
||||||
wobbleSpeed: Math.random() * 0.05,
|
wobbleSpeed: Math.random() * 0.05,
|
||||||
wobbleOffset: Math.random() * Math.PI * 2,
|
wobbleOffset: Math.random() * Math.PI * 2,
|
||||||
currentCpe: 0,
|
currentCpe: 0,
|
||||||
|
|||||||
@@ -210,13 +210,13 @@ function TowerModel({
|
|||||||
{isAirflow ? (
|
{isAirflow ? (
|
||||||
<group>
|
<group>
|
||||||
<WindArrow
|
<WindArrow
|
||||||
target={[-baseWidth * 1.5, height / 2, -baseWidth * 1.5]}
|
target={[0, height / 2, -baseWidth * 1.5]}
|
||||||
direction={[0, 0, 1]}
|
direction={[0, 0, 1]}
|
||||||
scale={4}
|
scale={4}
|
||||||
/>
|
/>
|
||||||
<Text
|
<Text
|
||||||
position={[-baseWidth * 1.5, height / 2 + 1.5, -baseWidth * 1.5 - 2]}
|
position={[0, height / 2 + 1.5, -baseWidth * 1.5 - 2]}
|
||||||
rotation={[0, Math.PI / 4, 0]}
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={1.2}
|
fontSize={1.2}
|
||||||
color={isDark ? '#60a5fa' : '#3b82f6'}
|
color={isDark ? '#60a5fa' : '#3b82f6'}
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
@@ -240,6 +240,7 @@ function TowerModel({
|
|||||||
</mesh>
|
</mesh>
|
||||||
<Text
|
<Text
|
||||||
position={[0, height + 1.0, 0]}
|
position={[0, height + 1.0, 0]}
|
||||||
|
rotation={[0, Math.PI, 0]}
|
||||||
fontSize={0.5}
|
fontSize={0.5}
|
||||||
color={isDark ? "#93c5fd" : "#1e40af"}
|
color={isDark ? "#93c5fd" : "#1e40af"}
|
||||||
anchorX="center"
|
anchorX="center"
|
||||||
|
|||||||
Reference in New Issue
Block a user