• v1.1.0 1efbf4aa6f

    ruivenda released this 2026-07-08 23:46:29 +01:00 | 0 commits to main since this release

    Adicionado

    • Toggle global de visibilidade das anotações (pedido do Rui). Botão "olho"
      na toolbar (junto ao botão Anotar) e acção no cabeçalho do painel de anotações
      ligam/desligam todas as anotações como se fosse um layer — sem as apagar.
      Novo store annotationsVisible (stores/app.ts); a CanvasOverlay deixa de
      montar a AnnotationsLayer quando está desligado. Entrar no modo de anotação
      força a visibilidade (não faz sentido editar anotações ocultas). i18n
      toolbar.hideAnnotations/showAnnotations, measure.hideAll/showAll.
    • Exportação de markup PDF nativo e universal (/Annot) com aparências. As
      anotações (cotas, áreas, setas, nuvens de revisão, elipses, texto…) passam a
      ser embebidas no PDF como objectos /Annot nativos com appearance stream
      (/AP /N → Form XObject)
      — legíveis e editáveis no Adobe Acrobat, Bluebeam
      Revu, Preview do macOS (que exige /AP), Foxit e qualquer outro leitor de
      PDF (já não só no sidecar JSON proprietário do DWFx). A aparência desenha o
      markup em coordenadas absolutas de página (/BBox = /Rect, /Matrix
      identidade): linhas com pontas de seta, polilinhas/polígonos, nuvem festonada
      (bumps cúbicos), elipses (Bézier), traço sólido/tracejado/pontilhado, e texto
      em Helvetica (WinAnsi). Cobre os comandos Guardar como PDF, Exportar
      PDF
      (diálogo) e o wrapper de exportação.
      Mapeamento: linha→Line, seta→Line+/LE, polilinha→PolyLine (ou
      Polygon se fechada), polígono/área→Polygon (+/IC se preenchido),
      nuvem→Polygon+/BE (cloudy), elipse/círculo→Circle, ângulo→PolyLine,
      arco→PolyLine achatada por 3 pontos, texto→FreeText. Cores, estilos de
      traço (sólido/tracejado/pontilhado/traço-ponto) e espessura preservados.
    • Leitura de markup PDF /Annot (round-trip fechado). Ao abrir um PDF, os
      objectos /Annot nativos são importados como anotações editáveis no
      isBIM Visus: Line→linha (ou seta, se /LE tiver pontas), PolyLine→
      polilinha, Polygon→polígono (+nuvem se /BE cloudy, +preenchido se /IC),
      Square→polígono (4 cantos), Circle→elipse, FreeText→texto, Ink→
      polilinha. Cor (/C, incl. CMYK→RGB), espessura/estilo de traço (/BS) e
      texto (/Contents, UTF-16BE ou Latin-1) recuperados. Coordenadas pt→DIP com
      flip Y e origem da caixa (MediaBox/CropBox). Markup criado no Acrobat,
      Bluebeam ou no próprio isBIM Visus pode agora ser reaberto e editado.

    Detalhe técnico

    • Nova crate-API em visus2d-pdf: módulo annot.rs com PdfMarkup +
      inject_annotations() (pós-processamento dos bytes PDF via lopdf 0.31 —
      promovida de dev- a dependência normal), gerador de appearance streams
      (Form XObjects, fonte Helvetica partilhada), e export_document_annotated() /
      inject_into_export() em document.rs. Conversão de coordenadas px@96→pt com
      flip Y idêntica ao conteúdo de página (units.rs), garantindo coincidência ao
      pixel. Funciona em ambos os pipelines (vectorial e raster legacy).
    • IPC: export_pdf e save_as_pdf ganham o parâmetro opcional annotations
      (Vec<AnnotationInfo>); commands/export.rs::annotations_to_markups converte
      o modelo IPC em PdfMarkup (mantém a semântica das pontas de seta e do
      modificador de nuvem). Frontend: tauri.ts (exportPdf/saveAsPdf/saveAsDwfx
      partilham annotationsPayload) e ExportPdfDialog enviam o snapshot do store.

    Alterado

    • Toolbar de ficheiro reorganizada. O par Abrir/Guardar fica separado
      por divisores de Novo / Exportar / Imprimir, clarificando o modelo de formatos
      nativos (Abrir lê DWFx/PDF · Guardar grava DWFx-projecto · Exportar gera PDF).
      Botões mantêm-se só-ícone (uniformidade com a linha isBIM); a distinção é
      por tooltip descritiva.
    • Acções de PDF fundidas. O botão "Guardar como PDF" (gravação directa) foi
      removido — fazia o mesmo que Exportar PDF, que passa a ser a única acção
      de PDF (diálogo com DPI/páginas/modo + markup /Annot). O comando IPC
      save_as_pdf mantém-se como API programática.

    Corrigido

    • Ecrã de arranque: o texto de arrastar-e-largar mencionava DWF, que o
      visualizador não abre. Passa a indicar apenas DWFx e PDF (pt-PT e en).

    Limitações conhecidas

    • A aparência do FreeText usa Helvetica built-in (sem quebra de linha
      automática nem rich text /RC); o texto longo pode exceder a caixa.
    • A nuvem de revisão preenchida exporta só o contorno festonado (sem o fundo a
      12%).
    • Na leitura, a medição não é recalculada (markup importado entra como forma
      livre, markup:true); Ink usa só a 1.ª sub-lista; estilos de traço de PDF
      externos colapsam em sólido/tracejado.
    • Ainda não suportados (próxima paridade com Bluebeam): text markup
      (Highlight/Underline/StrikeOut), Stamp, Callout (/CL), /Measure (cotas com
      escala), /Popup+respostas (/IRT) e metadados de comentário (/M,
      /CreationDate).

    Testes

    • Escrita: visus2d-pdf::annot traz 13 testes unitários (flip Y, subtipos por
      modo + presença de aparência, pontas de seta, nuvem /BE, preenchimento
      /IC, FreeText com fonte, curvas de elipse, amostragem de arco, parsing de
      cor, escape de texto). Leitura: visus2d-pdf-reader::annotations traz 7
      (Line→linha, /LE→seta, Polygon+/BE→nuvem, Circle→elipse, FreeText
      com/sem /Contents, subtipo não suportado ignorado, /C→hex). Pendente
      correr no Mac
      (cargo test --workspace --lib, cargo clippy --workspace --lib, npm run check) — toolchain Rust indisponível no ambiente de
      preparação desta release.
    Downloads