🧊 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).
🎨 Feature: Animation Window (Canvas 3D)

Propósito: O contentor principal onde a biblioteca gráfica (WebGL/Three.js) desenha e atualiza a cena física a cada *frame*.

🎯 Composição
  • 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.
🟢 Desafio Técnico
  • 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.
🎥 Feature: View Buttons (Gestão de Câmaras)

Propósito: Fornecer atalhos rápidos para alternar a perspetiva visual do operador.

🎯 Gatilho & UI
  • Fila de botões no canto superior esquerdo: D (Default), F (Front), T (Top), R (Right), B (Back), L (Left), U (Under), I (Isometric).
📦 Lógica Associada
  • 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.
📊 Feature: Result Modal (Relatório Rápido)

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.

🎯 Gatilho & UI
  • 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.
📦 Integração
  • Requer que o motor cinemático emita eventos globais (ex: onCollision ou onSimulationEnd) para popular os dados deste Modal.
🔀 Feature: Viewport Tools (Resize & Modos)

Propósito: Controlar a área visível do motor e definir comportamentos de execução alternativos.

🎯 Resize Screen
  • 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.
🎯 Auto/Manual Button
  • (Implementação Planeada) - Botão de toggle (Switch) para alternar entre simulação ditada inteiramente pelo Programa, ou permitir injeção manual (MDI).
⏯️ Feature: Playback Options (Controlos Base)

Propósito: Manipulação direta do ciclo de execução temporal da simulação.

🎯 Gatilho & UI
  • 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).
🟢 Sincronização Lógica
  • 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.
📡 Feature: Dashboard Bar (Telemetria)

Propósito: Fita de instrumentação contínua, emulando o painel de um controlador real.

🎯 Entradas (Inputs)
  • 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.
🎯 Saídas (Outputs)
  • 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*.