SKICA je samostatná PWA aplikace pro návrh dílů a generování NC programů pro obrábění na CNC strojích. Aplikace běží plně v prohlížeči jako client-side SPA (žádný backend), offline-first, s podporou mobilních zařízení.
Aplikace je určena pro kreslení 2D (CAD) a pro simulaci a generování CNC drah a G-kódy (CAM).
Podporované typy strojů:
- Soustruhy – osa X je osa radiální, osa Z je osa axiální ( Standardní konfigurace )
- Karusely / obráběcí centra – osa X je osa axiální, osa Z je osa radiální (prohození os)
Podporované řídicí systémy:
- Sinumerik (Siemens 840D sl a kompatibilní)
- Fanuc (standardní dialekt)
- Haidenhain (TNC 640 a kompatibilní)
wx (world X) → vodorovně (horizontal) wy (world Y) → svisle (vertical)
- Kreslení primitiv:
LINE,ARC,CIRCLE,RECT,POLYLINE,TEXT - Pokročilé úpravy:
FILLET,CHAMFER,TRIM,EXTEND,BREAK,JOIN,MOVE,COPY,ROTATE,SCALE,MIRROR,ARRAY,ARRAY CIRCULAR - Boolean operace, geometrické pomocné konstrukce, MERGE
- Základní DXF import/export s podporou 2D prvků, insertů, bloků, základní 3D face
- Automatické výpočty průsečíků a asociativní dimenze
- Zubové kola – Cylindrická a kuželová (zobáčková) ozubení
- Drážky – DIN 374 / VDI prstové drážky
- Závity – metrické, technologické (formy A, B, C), válcové a kuželové
- Generování NC programu pro více řídicích systémů:
- Sinumerik (840D sl a kompatibilní)
- Fanuc (standardní dialekt)
- Haidenhain (TNC 640 a kompatibilní)
- Výsekové strategie: čárový a kličkový výsekový rour, koncentrické obrysy, vrtací cykly
- Simulátor CAM strategií (náhled obrysů obrábění)
- Podpora přímočarých závitů a vrtání
- Mezní údaje, tolerance, práce s nástroji
- Výpočty střihu, otáček, dostupného zatížení, hmotnosti, zkrácení, prodlev
- Tabulky M-kódů, příkazy, přeskládání
- Fotka strojírenského výkresu → analýza AI → soustružnický profil (Z/D)
- Konverze AI výstupu → kresba ve SKICA
- Podpora více AI poskytovatelů (Groq, Gemini, OpenRouter)
- Černý / světlý režim (Catppuccin paleta)
- Plná podpora mobilů (touch ovládání, spodní lišta)
- Načtení/uložení projektu do %LOCALAPPDATA%, ukládání do IndexedDB
- Uložení obrázku PNG
- Neomezený UNDO/REDO
- In-app nápověda (CZ)
| Vrstva | Technologie |
|---|---|
| Frontend | Vanilla JS, ES modules (0 závislostí) |
| Ukládání | IndexedDB, localStorage |
| Offline | PWA: Service Worker + Cache |
| DXĚ import | Custom DXF parser |
| Testování | Vitest |
| AI | Groq / Gemini / OpenRouter API |
| NC formát | Sinumerik 840D / Fanuc / Haidenhain (ISO 6983 dialekty) |
| UI paleta | Catppuccin (dark + light theme) |
git clone https://github.com/tvuj-user/2D_CAD-CAM.git
cd 2D_CAD-CAM
# stačí libovolný statický server (ES module = nelze file://)
npx serve .
# nebo
python -m http.server 8080Poté otevři http://localhost:PORT.
npm run swnpm test # run all
npm run test:watch # dev
npm run test:coverage # coverageTesty jsou v tests/ – unit i integrační (např. CAM g-code, DXF, gear).
├── index.html # PWA entry point, CSP, manifest
├── sw.js # Service Worker (cache offline)
├── manifest.json # PWA manifest
├── css/
│ └── style.css # Catppuccin Mocha/Latte, ~5.5k ř.
├── js/
│ ├── state.js # Stav aplikace, toast, undo/redo
│ ├── objects.js # Správa výkresových objektů (CRUD)
│ ├── types.js # Type definitions (registry, types)
│ ├── constants.js # Barvy, počítadla
│ ├── canvas.js # Canvas 2D rendering
│ ├── bridge.js # AutoCenter, store
│ ├── geometry.js # Geometrické operace (intersection, fillet, chamfer)
│ ├── dxf.js # DXF import + export (1k+ řádek, SI format)
│ ├── cnc-calcs.js # CNC kalkulačky: ohyby, otáčky, tolerance, ...
│ ├── toolLibrary.js # Správa nástrojů
│ ├── stockTools.js # Nástroje pro soustruh
│ ├── touch.js # Touch ovládání
│ ├── ui.js # UI, panely, tooltipy
│ ├── dialogs/ # Všechna dialogová okna (numerický input, M-code, gear, thread, ...)
│ ├── tools/ # Nástroje kreslení/úprav (line, arc, rect, polyline, gear, array, ...)
│ ├── calculators/ # CAM: gcode, threadData, roughness, cutting, tolerance, contour, ...
│ └── ai/ # AI panel + settings (Multi-LLM)
├── tests/ # 30+ testovacích souborů
└── scripts/
└── generate-sw-assets.js # Generování assetů pro SW
- Stav:
state.objects(js/state.js) sdílený objekt spushUndo()/performUndo()(undostack). - Objekty: pole
state.objects, typy definované vjs/types.js. Každý objekt má CSS-like vlastnosti (stroke, dash, color, vrsynt). - Render: reaktivní překreslování canvasu po každé změně stavu.
- Eventy: handlery na canvasu + touch layer; nástroje jsou registry → vybráný tool registruje handlery.
- CAM: generátory v
js/calculators/→ vracejí strukturu kontur a obrábění. - Sinumerik: výstup jako subprogramy + hlavičky dle předvoleb.
PR jsou vítány! Otevři issue, popiš změnu, ujisti se, že npm test prošel.
ISC
| Verze | Deník změn |
|---|---|
| 1.8.0 | Rozsah 📐 vymezuje obrobenou plochu, snap mezních čar, hlídání držáku dle pořadí |
| 1.7.0 | AI fotopanel, AI integrace |
| 1.6.x | Sinumerik subprogramy, opravy |
| 1.5.x | CAM strategie + finish only |
(více viz git log)