ConstructCraft

A interface: ribbon, comandos e paleta

English version: interface.md.

A janela do ConstructCraft segue a disposição que usuários de CAD e BIM de desktop esperam. A barra de acesso rápido fica no canto superior esquerdo. Abaixo dela está o ribbon, uma fileira de abas com grupos de botões. Em seguida vem a barra de opções da ferramenta ativa. O navegador de projeto e as propriedades ficam encaixados à esquerda, as vistas ocupam as abas no centro e a barra de status fica embaixo. Com muitas vistas abertas, Fechar vistas inativas (na barra de acesso rápido e em Vista → Janelas) fecha todas as abas menos a ativa, e o clique direito numa aba oferece Fechar as outras vistas.

Comandos e suas dicas

Todo botão do ribbon e da barra de acesso rápido executa um comando da interface. O mesmo vale para cada atalho de duas letras e cada item da paleta de comandos. Cada comando define, num só lugar:

Passe o mouse sobre um botão para ver a dica:

Mover  [MV]
Move os elementos selecionados de um ponto base até um destino.
Indisponível: Selecione os elementos antes de usar a ferramenta
Comando do motor: elements_move

Botões que não podem rodar ficam acinzentados, e a dica explica o motivo. Motivos comuns são “nada para desfazer”, “selecione os elementos primeiro”, “abra uma folha para exportá-la”, “selecione um texto” e “copie elementos primeiro”. Um atalho digitado quando o comando não pode rodar mostra o mesmo motivo na barra de status.

Ícones e selos

Os ícones têm dois tons: os traços na cor do texto e os preenchimentos suaves no tom de destaque do tema. Um pequeno selo no canto inferior direito indica o tipo de ação do comando:

Selo Significado Exemplos
+ verde cria algo novo nova planta de piso ou de forro, vista 3D, legenda, vista de desenho, tabela, folha, novo componente
seta azul para baixo traz dados de um arquivo Importar IFC, Importar CAD, Carregar componente
seta azul para cima grava dados num arquivo Exportar PDF, Exportar SVG, Exportar imagem, Exportar DXF
− vermelho remove algo Excluir

A ferramenta selecionada aparece realçada na cor de destaque. Comandos indisponíveis ficam acinzentados, inclusive o selo.

Recolher o ribbon

Para dar mais espaço às vistas, recolha o ribbon até os títulos das abas. Qualquer uma destas ações recolhe o ribbon ou o expande de novo:

Com o ribbon recolhido, um clique numa aba mostra o painel dela por cima das vistas. O painel fecha quando um comando é executado, quando você aperta Esc ou clica em outro lugar, ou quando clica de novo na mesma aba. Se o ribbon começa recolhido é definido em Preferências → Interface.

Janelas estreitas

Quando a janela é mais estreita que os grupos de uma aba, os grupos rolam de lado em vez de serem cortados. Aparecem setas nas duas pontas da fileira: clique nelas para rolar, ou use a roda do mouse. Cada seta fica acinzentada ao chegar à sua ponta.

Paleta de comandos

Ctrl+Shift+P abre a paleta de comandos, assim como a lupa no fim da fileira de abas, à direita. Digite parte do que procura. A busca ignora maiúsculas e acentos (“niveis” encontra “Níveis”), e todas as palavras digitadas precisam aparecer. A paleta encontra:

Use ↑ e ↓ para escolher e Enter para executar, ou clique num item. Esc fecha a paleta. Um comando indisponível continua na lista, acinzentado, com o motivo no lugar da descrição.

Executar comandos do motor

Escolher um comando do motor abre um formulário com sua descrição e seus argumentos em JSON, já com os campos obrigatórios:

{
  "elevation": 9.0,
  "name": "Cobertura"
}

Executar (ou Ctrl+Enter) roda o comando no projeto aberto e mostra o resultado ou a mensagem de erro. Uma alteração é um passo de desfazer e é gravada enquanto uma macro está gravando, como qualquer outra. Voltar (ou Esc) retorna à busca. Os argumentos são os mesmos dos scripts e da referência de comandos. Comprimentos estão em metros, ângulos em graus, pontos são [x, y], e níveis, tipos, vistas e materiais podem ser indicados pelo id ou pelo nome.

Os comandos de arquivo do motor (project_open, project_save, ifc_import, ifc_export, sheet_export, view_export…) não aparecem aqui. Os comandos da interface correspondentes, nas abas Arquivo e Inserir e na paleta, cuidam dos arquivos pelos diálogos de sempre.

Teclado

Tecla Ação
Ctrl+Shift+P Paleta de comandos
Ctrl+F1 Recolher / expandir o ribbon
Ctrl+, Preferências
Ctrl+N / Ctrl+O / Ctrl+S / Ctrl+Shift+S / Ctrl+W Novo / Abrir / Salvar / Salvar como / Fechar projeto
Ctrl+Z / Ctrl+Y Desfazer / Refazer
Ctrl+X / Ctrl+C / Ctrl+V Recortar / Copiar / Colar
Delete Excluir a seleção
Esc Cancelar a operação, sair da ferramenta, limpar a seleção
Backspace Ao desenhar uma sequência de paredes, vigas, tubos ou eletrodutos: desfaz o último segmento e continua do início dele (Ctrl+Z também; Ctrl+Y o refaz); o último ponto de um guarda-corpo
Espaço Girar ou inverter a seleção ou o elemento sendo posicionado

As teclas de duas letras funcionam com o foco numa vista e nenhum campo de texto em edição. O README lista todas elas, e cada dica mostra também o seu atalho.

Selecionar em vistas 2D

Um clique escolhe o elemento sob o cursor (Ctrl soma ou retira). Um arrasto que começa no papel vazio, ou dentro de uma laje, de um hachurado ou de outro preenchimento, desenha uma caixa de seleção: arrastada para a direita é uma janela e pega os elementos inteiramente dentro dela (linhas, preenchimentos e textos); para a esquerda é um cruzamento, tracejado e verde, e pega também os que ela corta ou em que está: uma parede cortada entre as pontas, uma laje em volta da caixa, um texto ancorado nela. Áreas de ambiente e desenhos importados não entram por cruzamento (uma janela em volta deles os pega). Ctrl mantém a seleção atual e soma a ela. Um arrasto que começa na linha de um elemento, ou num elemento já selecionado, o move (Ctrl+arrastar copia).

Os identificadores de portas, janelas, vigas, pilares e sapatas podem ser arrastados para outro lugar com a ferramenta Selecionar (o cursor vira uma mão sobre eles). O identificador mantém o texto e ganha uma linha de chamada até o elemento; cada planta guarda as posições dos seus identificadores (uma planta duplicada começa com as da original). Repor identificador, nas propriedades do elemento, o devolve ao lugar padrão.

Anotar → Níveis coloca cotas de nível. Nível em planta (numa planta de piso ou de forro) desenha um círculo com dois quadrantes preenchidos no ponto clicado e escreve, sobre uma linha, o nível acabado do piso sob ele e, abaixo, o nível osso da sua estrutura (o topo das camadas abaixo do acabamento); fora de qualquer piso escreve o nível da planta. Nível em seção (num corte ou elevação) desenha um triângulo apontando para o ponto e escreve a sua altura, com o nível osso quando o ponto está no topo de um piso cortado; no corte a ferramenta se prende às linhas da vista, então um clique na linha do topo de um piso cai sobre ela. Os valores acompanham o modelo; no painel de propriedades a cota pode fixar qualquer um dos níveis à mão, esconder o nível osso ou pôr os valores à esquerda. O tipo guarda o tamanho do texto, o nível de referência (o valor escrito para o zero do projeto, por exemplo 100,00) e os sufixos, (N.A.) e (N.O.) por padrão.

Editar vários elementos

Com vários elementos de uma categoria selecionados, a paleta de propriedades mostra Tipo e Nível (Restrição de base em paredes, pilares, escadas, rampas e shafts) e os parâmetros que eles têm em comum: a Linha de localização das paredes, o deslocamento da base, a Restrição superior (desconectada, ou até um nível; paredes que passam a desconectadas mantêm a altura) com seu deslocamento ou a Altura desconectada, peitoril, beiral, rotação, Estrutural, Delimita ambientes, a união das paredes nas pontas, inversões e os dados de identidade (Marca e Comentários). Um valor que difere entre eles aparece como ‹vários› (uma caixa indeterminada nos de ligar e desligar); escolher ou digitar um valor o aplica a todos num só passo de desfazer (o comando elements_set; tipos por elements_set_type). Uma seleção de categorias diferentes mostra quantos há de cada uma e Excluir.

Selecionar em vistas 3D

Com a ferramenta Selecionar, um clique escolhe o elemento sob o cursor (Ctrl soma ou retira). Shift+arrastar desenha uma caixa de seleção, como nas plantas: arrastada para a direita é uma janela e pega os elementos inteiramente dentro dela; para a esquerda é um cruzamento e pega também os que ela toca. Elementos atrás de outros contam; os ocultos, não. Ctrl mantém a seleção atual e soma a ela. Com Arrastar na vista 3D seleciona ligado em Preferências → Interface, arrastar com o botão esquerdo desenha a caixa e Shift+arrastar orbita.

Modificar em vistas 3D

Mover, Copiar, Matriz, Girar, Espelhar (escolher ou desenhar o eixo), Alinhar e Unir geometria/Desunir geometria também funcionam em vistas 3D; arrastar com o botão esquerdo continua orbitando (ou Shift+arrastar, veja acima), com o do meio ou o direito desloca a vista.

Gráficos das vistas

Vista → Gráficos reúne Visibilidade/gráficos (VG), Filtros e Modelos de vista (também em Gerenciar).

Esboço de contornos

Pisos, forros, telhados, radiers e massas são esboçados em planta. A ferramenta abre um esboço: o ribbon mostra Criar contorno com as ferramentas de desenho até Concluir ou Cancelar.

Cobertura e estrutura de telhados

Um tipo de telhado define a telha e a estrutura, na seção Cobertura e estrutura do diálogo de tipo.

Massas conceituais

Massa e Terreno → Estudo de massa → Massa (MS) desenha um contorno na planta, como uma laje, e o extruda até o nível de cima. As massas servem para estudos de volumetria antes de existirem paredes e lajes: corpos transparentes nas vistas 3D, elevações e cortes, cortados nas plantas que atravessam.

Terreno

Massa e Terreno → Terreno → Terreno (TS) esboça o contorno do terreno numa planta, como o contorno de uma laje, e marca seus pontos medidos: Pontos → Ponto clica um ponto na cota definida na barra de opções (acima do nível), e desfazer retira pontos como retira curvas. Concluir triangula os pontos com o contorno; o contorno recebe as cotas que os pontos lhe dão, inclusive os que ficam além dele, e a terra fecha até uma base plana. Um projeto sem tipo de terreno ganha um, cortado num material Terra (hachura em trama).

Massa e Terreno → Terreno → Platô (PD) esboça o contorno de um platô sobre o terreno do nível da planta, na Cota da barra de opções; sem terreno nesse nível, o botão avisa. Concluir conforma o terreno: plano dentro do contorno, talude de corte onde o terreno fica acima do platô e talude de aterro onde fica abaixo, até encontrarem o terreno natural (a linha de offset).

Guarda-corpos e seus hospedeiros

Cortinas de vidro são paredes de um tipo cortina (um projeto sem tipo cortina ganha um pela lista de tipos da ferramenta Parede: + Cortina de vidro). As propriedades do tipo definem as grades vertical e horizontal (distribuição, espaçamento ou número, justificação), o painel (vidro, sólido, vazio, ou uma porta, janela ou outro componente) e os montantes verticais, horizontais e de borda. Arquitetura → Construir → Grade de cortina edita a grade de uma parede clicando nela em planta, elevação ou corte: Adicionar linha (vertical ou horizontal; em planta, só verticais), Remover linha (a mais próxima), Unir/separar trecho (o pedaço de uma linha entre duas outras: as células dos dois lados viram um painel só, ou dois de novo) e Trocar painel (o painel escolhido na barra de opções, ou o do tipo de novo); passar o mouse mostra o que o clique fará. As propriedades de uma cortina selecionada mostram as células, o número de painéis, a área envidraçada e o comprimento dos montantes, e Repor devolve as linhas ou os painéis do tipo.

Arquitetura → Circulação → Guarda-corpo (RA) desenha um guarda-corpo pelos pontos clicados, no nível mais o deslocamento da base. Um guarda-corpo também pode acompanhar uma escada ou rampa (seu hospedeiro): ele corre pelo lado do hospedeiro na inclinação dos bocéis ou da rampa, contorna os patamares e se move, muda e é excluído com ele.

Shafts

Arquitetura → Pisos e coberturas → Shaft (SF) esboça em planta o contorno de uma abertura vertical (um shaft de instalações, um poço de elevador ou de escada, um vazio de iluminação), como o contorno de um piso; ela sobe do seu nível até o nível mais alto acima (ou até um nível ou altura definidos nas propriedades). Um projeto sem tipo de shaft ganha um na primeira vez.

Perfis varridos

Arquitetura → Modelo → Perfil varrido (SW) leva um perfil ao longo de um caminho desenhado em planta: rodapés, molduras de teto, testeiras, calhas, rufos. Um projeto sem tipo de perfil varrido ganha um na primeira vez (um rodapé de 1,5 × 10 cm).

Vistas de desenho

Chamadas de detalhe e vistas de detalhe

Linhas de detalhe

Estilos de linha, regiões preenchidas e de máscara

Componentes de detalhe

Desenhos CAD importados

Fases de construção

Folhas e carimbos

As propriedades de uma folha definem o número, o carimbo (um tipo de carimbo do projeto, ou Nenhum para papel em branco), o formato do papel (A0 a A4, ou Personalizado, com largura × altura em milímetros entre 50 e 5000), com Retrato para deixar o lado maior na vertical, e a data de emissão (digitada como AAAA-MM-DD; Hoje preenche a data de hoje). Campos da folha lista os campos por folha do carimbo: digite um valor para esta folha, ou deixe a linha vazia para usar o texto do próprio carimbo, mostrado em cinza. Quando uma peça do carimbo da folha ativa não pode ser desenhada (uma expressão que não se resolve), a barra de status a indica.

Gerenciar → Projeto → Informações do projeto tem uma tabela Campos do projeto: valores seus, como o engenheiro ou o número do alvará, cada um com nome e valor. + Adicionar campo acrescenta um, o nome muda ao digitar por cima (Enter), × remove. Os carimbos os mostram como {project:Nome}.

O carimbo desenha a folha inteira: borda, margens, o próprio carimbo, logotipos. Ele é um componente (categoria Carimbos), então é salvo e carregado em arquivos .ccomp e na biblioteca de componentes. Modificar → Carimbo → Editar carimbo (ou Editar carimbo no menu do botão direito de uma folha, na vista ou no navegador do projeto) abre o carimbo da folha ativa no editor; Vista → Documentação → Novo carimbo cria um a partir do modelo padrão e o abre; carregar um carimbo da biblioteca também o abre.

Ambiente de modelagem de componentes

Editar componente (Arquitetura → Modelo, ou Editar componente… nas propriedades de um tipo de componente) abre um espaço de trabalho próprio para o componente selecionado, ou para o que a ferramenta Componente coloca. Edição rápida… mantém o editor antigo, numa só janela.

Preferências

Arquivo → Preferências (Ctrl+,, também no pé da tela inicial) reúne as configurações do próprio aplicativo; elas não fazem parte de nenhum projeto e ficam guardadas entre as sessões. Escolha uma página à esquerda. As mudanças aparecem na hora; OK as mantém e Cancelar (ou Esc) volta aos valores de quando a janela abriu. Restaurar padrões (embaixo, à esquerda) volta as opções da página mostrada aos valores padrão; o idioma e as pastas ficam como estão.

Programação visual

Gerenciar → Macros → Programação visual abre o editor de grafos num painel abaixo das vistas, para ver o modelo e o grafo juntos (constructcraft projeto.ccad --graph arquivo.ccgraph abre um ao iniciar). Um grafo é um conjunto de nós ligados por fios (veja Grafos de programação visual para o que os nós fazem e como rodar de novo atualiza o modelo).

Plugins

Plugins acrescentam comandos ao ConstructCraft (veja Plugins no guia de automação). Gerenciar → Plugins tem dois botões: Plugins… abre a janela Plugins, e Comandos de plugins é um menu dos comandos dos plugins instalados, por plugin; escolher um abre o formulário dele na paleta de comandos, onde Executar o roda como um passo de desfazer e mostra o que o plugin imprimiu. A paleta também encontra os comandos de plugins pelo nome.

A janela Plugins tem duas abas:

Só essa aba usa a rede: ela lê o índice e os arquivos que ele lista, por HTTPS, quando você pede. Recarregar plugins lê a pasta de novo, depois que você acrescenta ou edita um plugin à mão. Os plugins são carregados quando o aplicativo abre e continuam carregados quando você abre outro projeto.

Aviso de atualização

O ConstructCraft avisa quando uma versão mais nova é publicada; ele nunca baixa nem instala nada por conta própria, só quando você escolhe Atualizar agora.

Salvamento automático e recuperação

Um minuto depois que um projeto passa a ter alterações não salvas (também um projeto novo, nunca salvo; Preferências → Salvamento define outro intervalo ou desliga o salvamento automático), o ConstructCraft grava uma cópia dele, em segundo plano, na pasta recovery da sua pasta de dados (%APPDATA%\ConstructCraft\data no Windows, ~/Library/Application Support/ConstructCraft no macOS, ~/.local/share/constructcraft no Linux). Ele só grava de novo depois que o modelo muda, e nunca sobre o arquivo do projeto. Salvar, fechar o projeto ou sair remove a cópia.

Se o ConstructCraft travar ou for encerrado à força, a próxima abertura mostra Recuperar trabalho não salvo com as cópias deixadas: Restaurar abre o projeto escolhido com as alterações não salvas (salvá-lo grava no arquivo original, ou pergunta onde, para um projeto nunca salvo), Descartar apaga a cópia e Cancelar guarda as cópias para a próxima abertura. Uma falha na interface também grava uma última cópia antes de o programa fechar, e toda falha é acrescentada a crash.log na pasta de dados; anexe-o ao relatar uma falha.

Inicialização gráfica

O ConstructCraft desenha com a API gráfica nativa do sistema (DirectX 12 ou Vulkan no Windows, Metal no macOS, Vulkan no Linux) e passa sozinho para o OpenGL quando ela falha, o que algumas GPUs integradas antigas ou pequenas exigem:

Acessibilidade

Os botões do ribbon, os títulos das abas, as setas de rolagem, os itens da paleta, as linhas do navegador, os cartões da tela inicial, os botões de fechar dos diálogos, as seções de propriedades e o botão de início do cubo de vista são desenhados pelo próprio ConstructCraft. Eles informam à interface de acessibilidade do sistema seu papel (botão, item selecionável, cabeçalho recolhível), seu nome e seu estado (habilitado, selecionado, expandido), para que leitores de tela possam anunciá-los.

Para desenvolvedores

Adicionar um comando à interface

  1. Primeiro, faça da alteração um comando do motor (veja Para desenvolvedores no guia de automação).
  2. Acrescente uma variante a UiCommand em crates/cc_app/src/commands.rs. Depois preencha icon, label, description (uma chave i18n cmd-desc-… em todos os arquivos .ftl), shortcut (se houver), engine (o nome do comando do motor), badge, unavailable (um motivo traduzido para cada estado em que não pode rodar), selected (para ferramentas) e run. Inclua-o em UiCommand::all.
  3. Coloque-o num grupo do ribbon com command_button (grande) ou numa família de botões pequenos com stacks (crates/cc_app/src/ribbon.rs).

A dica, a habilitação, o item da paleta e um atalho de duas letras saem todos do comando. Os testes verificam que cada nome do motor existe no catálogo, que os atalhos não se repetem e que todo comando aparece no ribbon com nome acessível.

Ícones

Os ícones são arquivos SVG em assets/icons/ui, numa grade de 24 unidades. Eles usam traços brancos (stroke-width 1.75, pontas e junções arredondadas) e preenchimentos suaves escritos como fill="#fff" fill-opacity=".2". O icons.rs separa cada ícone em duas camadas por esses atributos: os traços e as marcas sólidas formam a tinta, e os preenchimentos suaves formam o tom. Cada camada é rasterizada pelo resvg no tamanho exato em pixels e pintada nas cores do tema (icons::Tones). Acrescente o novo ícone a Icon, Icon::ALL e Icon::source. ICON_SHEET=folha.png cargo test -p cc_app icon_sheet grava todos os ícones em vários tamanhos para revisão.

Tema

As cores são tokens de theme::Palette: PALETTE (claro) e DARK, com um teste de contraste. Pinte com theme::palette(ctx) para que um tema escuro possa ser ligado depois.

Testes de interface

O crates/cc_app/src/ui_tests.rs roda o ribbon e a paleta sem janela, com o egui_kittest. Os testes clicam e digitam pela árvore de acessibilidade, então widgets próprios precisam chamar Response::widget_info. As capturas de referência ficam em crates/cc_app/tests/snapshots. Elas cobrem cada aba do ribbon, o ribbon estreito e o recolhido, uma dica completa, a paleta, cada página da janela de Preferências e uma galeria de ícones nos dois temas. Placas de vídeo renderizam com pequenas diferenças, então a comparação das capturas roda sob demanda:

CC_UI_SNAPSHOTS=1 cargo test -p cc_app snapshots     # compara com as referências
UPDATE_SNAPSHOTS=1 cargo test -p cc_app snapshots    # regrava após uma mudança intencional

Revise as imagens novas antes do commit. Quando há diferença, o kittest grava *.new.png e *.diff.png ao lado das referências; o Git ignora esses arquivos.