Geração e prévia ao vivo no desktop

Objetivo

Cada solicitação interativa gera um andar e mostra como ele é construído no desktop. A geração continua fora da thread da interface, que recebe pequenos eventos de geometria para atualizar o mapa sem esperar o resultado final.

Fluxo implementado

stage_with_progress encaminha eventos de cada tentativa: início da tentativa, grade pronta, salas criadas e trechos de corredor adicionados ou alterados. O gerador publica as mudanças de topologia que o algoritmo escolhe. Simulações usadas só para calcular o β máximo não aparecem na prévia.

O desktop recebe esses eventos por um canal mpsc; a thread de trabalho chama egui::Context::request_repaint depois de cada lote. Um work_id descarta mensagens atrasadas de uma solicitação anterior. Quando a validação pede uma nova tentativa, a prévia é limpa e passa a mostrar a construção dessa tentativa. No fim, o mapa validado substitui o estado parcial e habilita inspeção, camadas, pan e zoom.

A prévia é desenhada com o Painter do egui. Uma geração rápida (menos de 120 ms) troca o mapa de uma vez, sem piscar; uma lenta mostra o andar sendo montado. Durante a geração ela mostra a grade, as salas e as conexões; depois da validação desenha também portas, junções, rótulos e as camadas escolhidas. Pan, zoom e tema atualizam o desenho direto na interface, sem serializar SVG.

Responsabilidades

  • Gerador: roda numa thread de trabalho e publica mudanças de geometria ao construir cada tentativa.
  • Interface: aplica os eventos da tentativa atual e redesenha o mapa; a thread principal continua livre para a interação.
  • Mapa: desenha o estado atual do mapa; o cálculo do mapa continua rodando na CPU, no gerador.
  • Validação: decide qual tentativa vira o mapa final. Os desenhos de tentativas descartadas são substituídos quando a próxima tentativa começa.

Medições

O painel registra o tempo total de stage, incluindo tentativas e validação. O custo de desenho acontece durante a construção e não é somado ao tempo do gerador. Para comparar o desempenho do algoritmo, use a duração de stage; para avaliar a experiência, veja se a interface mostra atualizações parciais e continua respondendo em gerações maiores.

Critérios

  • Uma solicitação interativa gera um único andar, com tentativas internas de validação quando necessário.
  • A interface recebe eventos de sala e corredor antes do resultado final.
  • O mapa mostra as conexões à medida que o grafo é construído.
  • Uma nova tentativa limpa os eventos da tentativa anterior.
  • Mensagens de solicitações antigas não substituem o mapa atual.
  • O resultado validado substitui a prévia parcial e oferece todas as inspeções e camadas existentes.
  • O benchmark de vários mapas continua separado do caminho interativo de um andar.

Editar esta página no GitHub