Vector Engine

Przegląd

Silnik grafiki sterowany JSON-em — rdzeń C++23, WebAssembly w workerze, deterministyczny eksport SVG/PNG/JPEG/BMP i responsywny workspace Vue 3.

Czym jest Vector Engine?#

Vector Engine to silnik grafiki wektorowej sterowany JSON-em: wersjonowany dokument sceny przechodzi walidację, jest renderowany deterministycznie przez rdzeń C++23 i eksportowany do SVG, PNG, JPEG lub BMP — w całości lokalnie, bez serwera.

text
JSON → walidacja → render C++23 (WASM) → SVG / PNG / JPEG / BMP

Najważniejsze możliwości#

  • Wersjonowany format sceny z walidacją JSON Schema (Draft 2020-12).
  • 10 typów obiektów: rect, rounded rect, circle, ellipse, line, polygon, polyline, path, text, group.
  • Gradienty i warstwy — linear/radial, named layers, workspaces eksportowe.
  • Deterministyczny SVG z XML escaping i opcjonalną minifikacją.
  • Wspólny pipeline rasteryzacji RGBA dla PNG, JPEG i BMP (24/32-bit).
  • Jeden rdzeń C++23 — natywna biblioteka, CLI i bindingi Emscripten z jednej implementacji.
  • WebAssembly w Dedicated Worker — zero-copy transfery, anulowanie przez AbortSignal.
  • Edytor CodeMirror 6 z live walidacją i debounced renderingiem.
  • Responsywny workspace — breakpointy od 1280×800 do 5K, zwijane panele.
  • Limity zasobów — rozmiar źródła, wymiary, liczba obiektów, głębokość zagnieżdżenia.

Stack#

WarstwaTechnologia
RdzeńC++23, CMake ≥ 3.24, Ninja
WebVue 3, TypeScript, CodeMirror 6, Vite
WASMEmscripten, wasm32-wasi reactor
TestyVitest, Playwright, Catch2
WalidacjaAjv (standalone), JSON Schema

Minimalna scena#

json
{
  "version": "1.0",
  "document": {
    "width": 1200,
    "height": 800,
    "unit": "px",
    "background": "#FFFFFF"
  },
  "objects": [
    {
      "id": "circle-1",
      "type": "circle",
      "cx": 600,
      "cy": 400,
      "radius": 150,
      "fill": "#0052FF",
      "stroke": "#171717",
      "strokeWidth": 4
    }
  ]
}

Limity bezpieczeństwa#

ZasóbLimit
Źródło JSON4 MB
Wymiar dokumentu16 384 px
Obszar rastra67 108 864 px
Obiekty10 000
Głębokość grup32
Dane path1 000 000 znaków

Renderer akceptuje tylko zadeklarowane właściwości sceny, kolory hex, obsługiwane komendy path i lokalny tekst. Nie ładuje zewnętrznych zasobów.

Od czego zacząć?#

Szybki start

Web, natywne CLI i build WASM.

Format sceny

Dokument, obiekty, gradienty i warstwy.

Eksport

SVG, PNG, JPEG, BMP — zachowanie i opcje.

Architektura

Pipeline, worker i rdzeń C++23.

Struktura projektu#

text
vector-engine/
├── apps/web/              # Vue, TypeScript, CodeMirror, adapter przeglądarki
├── engine/include/        # Publiczne API C++
├── engine/src/            # Parser, geometria, SVG, raster, enkodery, bindingi
├── engine/tests/          # Testy Catch2
├── schemas/               # Wersjonowany JSON Schema
├── examples/              # Przykładowe sceny
├── docs/                  # Dokumentacja
├── scripts/               # Weryfikacja builda i wdrożenia
├── CMakeLists.txt         # Punkt wejścia native + WASM
├── CMakePresets.json      # Powtarzalne presety builda
└── vercel.json            # Build, routing, cache, nagłówki