• 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
  • v1.0.4 1efbf4aa6f

    ruivenda released this 2026-06-21 17:09:09 +01:00 | 0 commits to main since this release

    Adicionado

    • Distribuição Windows. Instalador NSIS x64 assinado, com auto-update — corre
      nativo em x64 e por emulação em Windows-on-ARM (artefacto universal). Publicado
      nas releases Gitea ao lado do macOS.

    Alterado

    • Instalador em Português europeu (PT-PT) por defeito (antes saía em PT-BR).

    Corrigido

    • Build determinista cross-OS: package-lock.json passa a ser versionado (sem
      ele o Windows resolvia um rolldown mais estrito e o build divergia do macOS).
    • Parâmetros opcionais TS (x?:) em .svelte reescritos para x: T | undefined = undefined (compatível com qualquer parser).
    • Script de release Windows: artefacto -setup.exe (Tauri 2.x), localização do
      bundle (workspace ..\target) e verificação do key_id.
    Downloads
  • v1.0.3 1efbf4aa6f

    ruivenda released this 2026-06-21 00:06:33 +01:00 | 0 commits to main since this release

    Adicionado

    • Recuperação de licença por email (código OTP). No tab Licenciar, "Não tenho a
      chave" envia um código de 6 dígitos para o email associado; ao confirmar, a licença
      é recuperada e activada automaticamente nesta máquina. Suportado pelos endpoints
      recover/recover/verify do InforNext (resposta genérica, código de validade curta,
      uso único, limite de tentativas).
    • Botão "Procurar actualizações" no painel de licença — verifica updates a pedido
      (antes só no arranque), com feedback (a procurar / já actualizado / disponível / falhou).
    Downloads
  • v1.0.0 1efbf4aa6f

    ruivenda released this 2026-06-20 17:50:03 +01:00 | 0 commits to main since this release

    Alterado

    • Dependências frontend para o latest: Tailwind CSS 3 → 4 (via
      @tailwindcss/vite (plugin) + esbuild explícito + target esnext + @import 'tailwindcss' + @config '../tailwind.config.js';
      autoprefixer removido), Vite → 8, @sveltejs/vite-plugin-svelte → 7,
      TypeScript → 6, @types/node → 26, SvelteKit 2.66, Svelte 5.56, svelte-check 4.6.
    • Tauri JS alinhado em 2.11; o Rust alinha no build com cargo update.
    Downloads
  • ruivenda released this 2026-06-20 16:12:27 +01:00 | 0 commits to main since this release

    Adicionado

    • Auto-update via tauri-plugin-updater + tauri-plugin-process: a app verifica
      no arranque (não-bloqueante, depois da licença/splash) o manifest servido pelo
      InforNext em https://next.infor.pt/api/visus2d/v1/update/{{target}}/{{arch}}/{{current_version}}?channel=stable
      e, se houver versão nova, descarrega+instala o bundle assinado (do Gitea) e reinicia.
      Tolerante a falhas — sem update / offline / endpoint indisponível é silencioso.
    • UI UpdateBanner: aviso discreto no canto inferior direito (acima do rodapé) com
      versão, notas de release limpas (Markdown → texto simples), barra de progresso durante
      o download e botões "Atualizar e reiniciar" / "Mais tarde". Store lib/stores/updater.ts
      • i18n update.* (pt/en). Reaproveita as classes surface-*/accent-* da linha isBIM.
    • createUpdaterArtifacts: true + bloco plugins.updater no tauri.conf.json (pubkey,
      endpoint, windows.installMode: passive); permissões updater:default e
      process:allow-restart em capabilities/default.json.

    Alterado

    • build-release.sh unificado: argumento --publish, carregamento automático de
      segredos de ~/.config/isbim/release.env, leitura da chave do updater de
      ~/.tauri/isbim-visus2d-updater.key, password per-app VISUS2D_UPDATER_PASSWORD
      (fallback ao genérico), verificação dos artefactos .app.tar.gz + .sig após o build
      e encadeamento de ./publish-release.sh quando se passa --publish.
    • publish-release.sh novo: cria a release no Gitea (INFOR/isBIM-visus2d-releases),
      sobe os artefactos de update como assets e faz smoke-test do manifest.

    Requer o repo INFOR/isBIM-visus2d-releases público (download anónimo dos assets)
    e a pubkey do updater colada no tauri.conf.json (placeholder COLAR_PUBKEY_VISUS2D).

    Downloads