🧊 3D Window (Motor Gráfico e Cinemática)
A metade esquerda do Orquestrador. Focada na renderização visual do ambiente físico, controlo de câmaras, reprodução cinemática e telemetria em tempo real.
Visão Geral da Interface
A 3D Window é o palco onde a teoria se transforma em prática. É aqui que o bloco de material, a ferramenta de corte e os movimentos da máquina são renderizados com precisão matemática para espelhar o mundo real.
Navegação Espacial
O utilizador tem total liberdade visual. Pode usar os atalhos de câmara no topo para saltar rapidamente entre vistas ortogonais (Topo, Frente, Lado) ou rodar o ambiente livremente para inspecionar colisões ou acabamentos detalhados.
🎓 Formato Educacional Interativo
Toda esta janela é, por natureza, um componente didático. Funcionalidades destacadas:
- Painel de Telemetria (Dashboard Bar): Ao observar os valores de X, Y, Z a mudarem em tempo real no rodapé inferior, o aluno interioriza o conceito de coordenadas cartesianas em movimento dinâmico.
- Resultados e Avaliação: O botão de Resultados permite ao aluno e ao professor validarem rapidamente se o Programa gerou uma peça correta ou se resultou em erros (ex: colisões da ferramenta com a morsa).
Propósito: O contentor principal onde a biblioteca gráfica (WebGL/Three.js) desenha e atualiza a cena física a cada *frame*.
- Renderização da grelha de base (Mesa).
- Volume do Material (Stock), visualização da Ferramenta e injeção do rasto (Toolpath) com base nos cálculos do Interpretador lógico.
- Otimização de Draw Calls. O rasto da ferramenta não deve acumular geometria infinita na memória sob pena de quebrar o browser em Programas muito extensos.
Propósito: Fornecer atalhos rápidos para alternar a perspetiva visual do operador.
- Fila de botões no canto superior esquerdo: D (Default), F (Front), T (Top), R (Right), B (Back), L (Left), U (Under), I (Isometric).
- Cada botão deve forçar um Tween/Lerp (transição suave) das coordenadas e do *LookAt* da câmara para posições ortogonais ou isométricas pré-definidas.
Propósito: Exibir um painel sobreposto (Modal) de acesso rápido com os dados conclusivos e eventuais alertas após o término do Programa.
- Novo botão de ação a alocar na barra superior (junto ao Resize).
- Opções internas: Visualizar tempo estimado de execução, listar colisões detetadas, e ação de "Gravar/Exportar" os resultados.
- Requer que o motor cinemático emita eventos globais (ex:
onCollisionouonSimulationEnd) para popular os dados deste Modal.
Propósito: Controlar a área visível do motor e definir comportamentos de execução alternativos.
- Botão no canto superior direito para expandir/recolher a tela 3D. Regra Crítica: Tem de invocar a atualização de evento
window.dispatchEvent(new Event('resize'))para corrigir a escala do Canvas.
- (Implementação Planeada) - Botão de toggle (Switch) para alternar entre simulação ditada inteiramente pelo Programa, ou permitir injeção manual (MDI).
Propósito: Manipulação direta do ciclo de execução temporal da simulação.
- Botões ovais na zona inferior: Contínuo (Play), Passo a Passo (Pause/Step), Passo Anterior (Reverse Step), Próximo Passo (Forward Step), Reset (Rewind to Start).
- As ações nestes botões têm de disparar chamadas estritas para o *Code Viewer* na janela da direita, garantindo que o deslocamento visual do Programa avança/recua em uníssono.
Propósito: Fita de instrumentação contínua, emulando o painel de um controlador real.
- Slider Speed: Multiplicador em tempo real (ex: 1.0x a 5.0x) para gerir a velocidade da renderização visual sem alterar o *feedrate* matemático no log.
- Ø Fresa: Input numérico (ex: 10) que deve reconstruir imediatamente a geometria do cilindro na cena 3D.
- Displays de atualização rápida: Posição Absoluta (X, Y, Z), Avanço Programado (F) e Rotação do Fuso (S). Manipulação via DOM direta (
.innerText) recomendada para evitar estrangulamento da *thread*.