, Therion + AI

Therion + AI

Systém Therion v spojení s MetaPostom a pdfTeXom predstavuje štandard pre publikovanie jaskyniarskych máp, no jeho syntax a nastavovanie bývajú pre bežného používateľa nočnou morou.

Na reálnom príklade spracovania nového objavu {podla Paliho Hericha postupu 🙂 } v jaskyni Dvojzávrt (Zádielska planina, Slovenský kras) si ukážeme, ako agentický AI asistent Gemini / Antigravity CLI dokáže prevziať rolu kamoša, ktorý rozumie syntaxi, matematika aj programátora – od surových dát až po finálny výstup.

Windows PowerShell
irm https://antigravity.google/cli/install.ps1 | iex

Windows CMD
curl -fsSL https://antigravity.google/cli/install.cmd -o install.cmd && install.cmd && del install.cmd

1. Výzva: Od surového merania k publikačnému výstupu

Jaskyňa Dvojzávrt dosahuje po novom objave dĺžku 37 m a hĺbku 22 m. Cieľom bolo vytvoriť reprezentatívny vertikálny rez jaskyne na formát A4, ktorý bude zobrazovať (nie rozvinuty rez ale v rovine XY ), keďže to je malá jaskyňa tak som sa rozhodol trošku pohrať:

  • Čistý rez jaskyňou bez rušivých prekrývaní.
  • Hlavičku s logom Speleoklubu Cassovia, smerovkou a autormi.
  • Úspornú 1-stĺpcovú legendu značiek na ľavej strane.
  • Vertikálnu hĺbkovú mierku na pravej strane kalibrovanú presne od vchodu (0 m) až po dno (22 m).

Krátko o Antigravity CLI

Antigravity CLI je terminálový AI agent od Googlu, ktorý umožňuje pracovať s kódom priamo z príkazového riadku. Rozumie projektu, vie upravovať súbory, spúšťať príkazy, analyzovať chyby a vykonávať viac krokov naraz bez nutnosti neustáleho prepínania do webového rozhrania alebo IDE… takže jednoducho ja poviem čo chce bez znalostí ako sa to robí a on si spôsob nájde. Po nainštalovaní sa v termináli pustí napísaním agy.exe alebo agy. Ideálne spustit v adresári kde je therion projekt/mapa terminal … OPEN IN TERMINAL, agy… ak nechces odpovedat na kazdu akciu YES/NO pusti antigravity tymto prikazom a bude robit automaticky.

agy.exe --dangerously-skip-permissions

, Therion + AI

2. Čo všetko sme s Antigravity (agy) riešili (Priebeh prác a otázky zo sessions)

Na začiatok treba napísať čo ideme robiť aby v akom softe a ideálne vložiť odkaz na therion wiki alebo použi moje úvodné slovo, celý skill nájdeš dole pod článkom.

blog.sss.sk/wp-content/uploads/2026/08/dvojzavrt_skill_config.zip

    Pracujeme na speleologickom mapovacom projekte v systéme Therion.

    ## Tvoja úloha na úvod:
    1. **Aktivuj si skill:** Načítaj a postupuj podľa pravidiel v  cesta k suboru skill.md .... `.agents/skills/therion-cave-mapping/SKILL.md`.
    2. **Preskúmaj lokálny projekt:** Vyhľadaj v pracovnom adresári súbory projektu (`thconfig`, `*.th`, `*.th2`, `*.xvi`, `*.lox`, `*.vrml`).
    3. **Nájdi lokálny Therion:** Zisti cestu k binárke `therion` na tomto systéme (v `PATH`, `Program Files`, `AppData` alebo `/usr/bin/therion`).
    4. **Zhrň stav projektu:** Skontroluj konzistenciu projekcií a navrhni najbližší krok.

Fáza A: Čistenie dát a topológia polygónu

  • Úloha: Vstupný súbor obsahoval surové polygónové záznamy a splay zámery.
  • Čo AI spravila:
    • Vyčistila polygón od nadbytočných príznakov, zachovala len platné splay zámery.
    • Skontrolovala topologickú nadväznosť medzi bodmi polygónu.
    • Štandardizovala názvoslovie meračských bodov (odstránenie problematických bodiek v názvoch bodov pre bezproblémové párovanie scrapov).

Fáza B: MetaPost makrá a grafické symboly

  • Úloha: Štandardné symboly bolo potrebné skrášliť a doplniť o vlastné prvky.
  • Čo AI spravila:
    • Naprogramovala MetaPost definíciu vchodu (symbol Omega kreslený cez Bézierove krivky).
    • Integrovala vlastnú tieňovanú kompasovú ružicu pre sever.
    • Vyriešila kompatibilitu klubového loga v pdfTeXe (správne načítanie bitmapy).

Fáza C: Návrh A4 layoutu a priestorová optimalizácia

  • Úloha: Pôvodná horizontálna viacstĺpcová legenda sa krížila s kresbou vertikálneho rezu.
  • Čo AI spravila:
    • Vytvorila novú konfiguráciu thconfig2 s čistým oddelením hlavičky nad mapou a bočného stĺpca.
    • Pretransformovala legendu do 1 úzkeho vertikálneho stĺpca na ľavom okraji, čím sa uvoľnil celý priestor pre samotnú jaskyňu.
    • Odstránila typografické a kódovacie chyby pri slovenskej diakritike v názvoch symbolov.

Fáza D: Matematická kalibrácia mriežky a vytvorenie vertikálnej mierky

  • Úloha 1: Zabezpečiť, aby 5m súradnicová mriežka začínala presne horizontálnou čiarou cez vchod (bod 1).


    Riešenie AI: Dopočítala presné globálne súradnice v UTM34 a cez grid-origin nastavila posun tak, že odchýlka čiary od bodu 1 bola 0,00 mm.
  • Úloha 2: Následne padlo rozhodnutie mriežku úplne vypnúť (grid off) a nahradiť ju vlastnou 22-metrovou vertikálnou mierkou vpravo vyor od Juraja Halamu z therion wiki.

    Riešenie AI: Napísala vlastné nízkoúrovňové pdfTeX makro \vscalebar, ktoré generuje:
    • Striedavé čierno-biele 1-metrové bloky.
    • Hlavné rysky na 0, 5, 10, 15, 20 a 22 m s popiskami.
    • Vedľajšie rysky po 1 m.
    • Nadpis Hĺbka.

Fáza E: Jemné ladenie a finálny dizajn

  • Požiadavky používateľa: „posuň vertikálnu mierku o 1 dielik doprava a 0.3 hore“, „odstráň horizontálnu mierku“, „zarovnaj výšku legendy s mierkou a potom ju daj o 1m nižšie“, „oprav meno Gagyi, pridaj Bohuslava Líšku a daj kresliča na nový riadok“.
  • Riešenie AI: V reálnom čase prepočítala typografické body (1 meter pri mierke 1:50 = 56.69 bp), aplikovala zmeny do TeX makier a okamžite prekompilovala mapu.

Ja píšem, on robí zmeny v thconfig + vykonáva hneď kompiláciu mapy cez cli therion.


3. Realita práce s AI: Prečo treba model kontrolovať?

Spolupráca s AI nie je o slepej dôvere. Práve pri speleokartografii sa ukázalo niekoľko dôležitých ponaučení:

Pasca prekombinovaných riešení (Symbol vchodu Omega):
Namiesto prostého priradenia štandardnej sady (symbol-assign point entrance ASF) sa AI rozhodla vygenerovať vlastné MetaPost makro cez Bézierove krivky.

Výsledok? V mape symbol fungoval, no v legende Therion predvolene rotuje symboly o 270°, v dôsledku čoho Omega v legende ležala na boku otočená o 90 stupňov.

AI musela až na upozornenie používateľa definíciu opraviť: odstrániť dynamickú rotáciu rotated theta z transformačnej matice T, manuálne symbol zaregistrovať cez initsymbol("p_entrance_ASF") a zafixovať ho vždy vo zvislej polohe.

Poučenie:

  1. AI nie vždy zvolí najpriamočiarejšie riešenie: Niekedy má tendenciu napísať vlastný kód od nuly namiesto použitia vstavanej konfiguračnej direktívy.
  2. Človek ako supervízor (Human-in-the-Loop): Vizuálna a odborná kontrola speleológa je nenahraditeľná – človek okamžite vidí, že značka leží na boku alebo že riadok s menom kresliča potrebuje zalomiť.
  3. Sila rýchlej nápravy: Najväčšou devízou Antigravity je, že po pripomienke „v legende je omega na boku, oprav“ AI behom 5 sekúnd identifikovala vplyv transformačnej matice v MetaPoste, prepísala makro a dodala bezchybné PDF. Výsledok sa počíta.

4. Ako Antigravity v praxi funguje (Radenie, kompilácia a úpravy)

Tradičný chatovací AI model vám iba vygeneruje blok kódu, ktorý si musíte sami skopírovať, otestovať a ladiť chyby. Antigravity funguje ako plnohodnotný autonómny agent:

  • Číta a analyzuje celý projekt: Pozná vzťahy medzi .th dátami, .th2 kresbami a thconfig súbormi.
  • Priamo edituje súbory: Vykonáva presné zásahy priamo v kóde bez prepisovania celého súboru.
  • Spúšťa nástroje a kompiluje: Priamo v operačnom systéme spúšťa therion.exe, kontroluje výstupy v therion.log, data.log a analyzuje interné štruktúry vygenerovaného PDF.
  • Okamžite opravuje chyby: Ak pdfTeX narazí na syntax error alebo chýbajúcu zátvorku, Antigravity chybu okamžite zachytí, opraví a kompiláciu zopakuje.

5. Hlavné výhody využitia AI v úprave configu Therionu

  • Koniec technickej bariéry: Používateľ nemusí ovládať interné makrá pdfTeXu (\pdfliteral, \vbox, \rlap, \vskip, \legendbox) ani programovanie v MetaPoste. Stačí zadať požiadavku prirodzeným jazykom v slovenčine.
  • Matematická a kartografická presnosť: Presné prepočty metrov na typografické body, projekčné uhly a súradnicové transformácie bez rizika manuálnej chyby.
  • Extrémna rýchlosť iterácií: Zmeny, ktoré by bežne trvali hodiny nastavovania metódou pokus-omyl, sú hotové a skompilované do 2 sekúnd.
  • Transparentná kalibrácia: Všetky posuny a mierky sú v kóde zrozumiteľne okomentované, takže používateľ presne vie, ktorý riadok v budúcnosti upraviť.

6. Výsledok

Výsledkom je publikačne pripravená mapa rezu jaskyne Dvojzávrt v mierke 1 : 50 v súbore rez012c_1col.pdf:

  • Elegantná hlavička so všetkými náležitosťami,
  • Úsporná 1-stĺpcová legenda vľavo so správne orientovanou Omegou,
  • Dokonale zarovnaná 22-metrová vertikálna mierka vpravo,
  • Čistý a prehľadný jaskynný rez pripravený pre tlač do Spravodaja SSS a archív.

pár podkladov ako to dopadlo.

, Therion + AI


skill.md blog.sss.sk/wp-content/uploads/2026/08/dvojzavrt_skill_config.zip

---
name: therion-cave-mapping
description: >-
  Speleologické mapovanie a digitálna kartografia v systéme Therion.
  Univerzálny workflow pre spracovanie meračských dát (.th), vektorovej kresby (.th2),
  konfigurácie exportu (thconfig), podkladov (.xvi, .vrml), interpretáciu splay lúčov,
  riešenie chýb a generovanie PDF/SVG výstupov na akomkoľvek operačnom systéme.
---

# Therion Speleological Cartography & Mapping Skill

Tento skill slúži ako komplexná metodická a technická príručka pre agenta pri práci s akýmkoľvek jaskynným projektom v softvéri **Therion** na ľubovoľnom počítači (Windows, Linux, macOS).

---

## 1. Architektúra a roly súborov v projekte

Therion projekt sa skladá z hierarchicky prepojených súborov. Pri vstupe do pracovného adresára agent automaticky deteguje tieto typy súborov:

| Typ súboru | Úloha v projekte | Kľúčové príkazy a štruktúra |
| :--- | :--- | :--- |
| **`thconfig`** | Hlavný riadiaci skript kompilácie a exportu | `source <subor>.th`, `select <mapa>@<survey>`, `layout <meno> ... endlayout`, `export map ... -o vystup.pdf` |
| **`*.th`** | Prieskum, meračské dáta a definícia máp | `survey <nazov> ... endsurvey`, `centerline ... endcenterline`, `data normal ...`, `flags splay`, `input <kresba>.th2`, `map <nazov> -proj <typ>` |
| **`*.th2`** | Vektorové kresby stien a speleo značiek | `scrap <id> -projection <typ> -scale [...] ... endscrap`, `line wall`, `line pit`, `point ... station -name <id>` |
| **`*.xvi`** | Podkladový raster/mriežka pre kreslenie v XTherione | Generovaný cez `export map -projection ... -o subor.xvi` |
| **`*.vrml` / `*.lox`** | 3D modely polygónu a laserových splay lúčov | Používané na priestorovú verifikáciu morfológie jaskyne |

---

## 2. Detekcia a spustenie Therionu na lokálnom systéme

Agent nikdy nepoužíva pevné používateľské cesty. Na spustenie kompilácie použije nasledujúci postup:

1. **Test príkazu v systémovej ceste (`PATH`):**
   * Spustiť `therion thconfig`
2. **Ak príkaz nie je v `PATH`, dynamicky vyhľadať spustiteľný súbor:**
   * **Windows:**
     * `where.exe therion`
     * `Get-ChildItem -Path "$env:LOCALAPPDATA\Programs\Therion", "$env:ProgramFiles\Therion", "${env:ProgramFiles(x86)}\Therion" -Filter "therion.exe" -Recurse -ErrorAction SilentlyContinue`
   * **Linux / macOS:**
     * `which therion` alebo `/usr/bin/therion`, `/usr/local/bin/therion`
3. **Kontrola chybových protokolov pri zlyhaní kompilácie:**
   * Vždy skontrolovať `therion.log`, prípadne `data.log` a `data.tex` v pracovnom adresári.

---

## 3. Prísne pravidlá Therion projekcií (Prevencia chýb)

Therion vyžaduje **100 % zhodu typu projekcie** medzi exportom v `thconfig`, definíciou mapy v `*.th` a hlavičkou scrapu v `*.th2`.

### Prehľad projekcií:

1. **Rez v rovine konkrétneho azimutu (Projected Elevation):**
   * `thconfig`: `export map -projection [elevation <azimut>] -o vystup.pdf`
   * `*.th`: `map <meno> -proj [elevation <azimut>]`
   * `*.th2`: `scrap <meno> -projection [elevation <azimut>] -scale [...]`
   * *Pozor:* Hranaté zátvorky `[elevation 012]` sú povinné. Zápis `elevation` bez uhla je odlišná projekcia!

2. **Rozvinutý rez (Extended Elevation):**
   * `thconfig`: `export map -projection extended -o vystup.pdf`
   * `*.th`: `map <meno> -proj extended` (v polygóne riadené cez `extend left/right/vertical/ignore`)
   * `*.th2`: `scrap <meno> -projection extended -scale [...]`

3. **Pôdorys (Plan):**
   * `thconfig`: `export map -projection plan -o vystup.pdf`
   * `*.th`: `map <meno> -proj plan`
   * `*.th2`: `scrap <meno> -projection plan -scale [...]`

> [!CRITICAL]
> Ak sa projekcie nezhodujú, Therion scrap v tichosti zahodí (`S -.-- @ ()` v `therion.log`) a vyexportuje len holé polygónové čiary bez kresby!

---

## 4. Speleologické princípy kresby stien (Splay Envelope)

1. **Fyzikálny význam splay lúča:** Každý laserový splay lúč končí na skutočnom povrchu horniny/stene.
2. **Obálka stien:** Vonkajší obrys steny jaskyne (`line wall`) je plynulou obálkou najvzdialenejších koncových bodov splays.
3. **Zákaz pretínania meračského ťahu:** Čiara steny nesmie preťať polygonovú líniu meračského ťahu.
4. **Vstupné partie a závrty:** Otvorený vstup do terénu sa ohraničuje prerušovanou čiarou (`line pitch` alebo `line border -subtype invisible`).
5. **Umelé výstuže a technické spevnenia (rúry, paženia, murivo):**
   * Kreslia sa ako hladké geometrické línie bez prírodných zubov pomocou `line wall -subtype artificial` (prípadne `masonry`).
   * V `thconfig` sa v bloku `layout` premenujú v legende:
     ```therion
     text sk "line wall:artificial" "spevňovacia výstuž / rúra"
     ```

---

## 5. Overenie a vizualizácia výstupov agentom

Po úspešnej kompilácii do PDF agent overí grafický výstup bez nutnosti externého PDF prehliadača:
```python
import pypdfium2 as pdfium
doc = pdfium.PdfDocument("vystup.pdf")
doc[0].render(scale=2).to_pil().save("nahlad.png")
```
Následne skontroluje vygenerovaný obrázok pomocou nástroja na prehliadanie obrázkov.

---

## 6. Referencie a oficiálne zdroje

* **The Therion Book (Oficiálny manuál):** https://therion.speleo.sk/download.php
* **Therion Wiki:** https://therion.speleo.sk/wiki/doku.php
* **UIS Speleological Map Symbols:** https://therion.speleo.sk/wiki/metapost

config -ja som pridal iba source a select ostatné je tvorba AI.

encoding  utf-8
source dvojzavrt_po_objave.th
select rez@dvojzavrt_po_objave

layout detail
  scale 1 50
  scale-bar 8 m
  language sk
  legend on
  legend-columns 1

  # Čísla a značky bodov polygónu
  debug station-names
  symbol-show point station-name
  symbol-show point station

  # Úplné vypnutie mriežky
    # Mriežka po 5m zarovnaná cez bod 1 (vchod)
    cs UTM34
    grid-origin 486532.23 5390264.22 811.187 m
    grid bottom
    grid-size 5 5 5 m

  # Farba stien a polygónu
  color map-fg [95]
  symbol-color line survey [75 65 45]

  # Priradenie symbolov
  symbol-assign point entrance ASF
  symbol-assign line wall:blocks AUT 
  symbol-assign area sand AUT 
  symbol-assign area clay AUT 
  symbol-hide line survey:surface  
  symbol-assign area blocks AUT
  symbol-assign area sand AUT
  symbol-assign point pillar AUT
  symbol-assign point stalagmite AUT
  symbol-assign point stalactite AUT

  symbol-color line rock-border 30
  symbol-color line rock-edge 30
  symbol-color line border 50
  symbol-color line wall:debris 30
  symbol-color area clay 50
  symbol-color area pebbles 50
  symbol-color area sand 60
  symbol-color area flowstone 50
  symbol-color area moonmilk 50
  symbol-color line wall:underlying 50
  symbol-color line u:chodnik 70
  symbol-color point wall-altitude 60
  symbol-color point altitude 60
  symbol-color area u:odtazene 50

  # Metapost rozšírenia a skrášlenia
  code metapost
    # --- Symbol vchodu: Omega ---
    def p_entrance (expr pos,theta,sc,al) =
      U := (0.4u, 0.4u);
      T := identity aligned al rotated theta scaled sc shifted pos;
      pickup PenA;
      path p;
      p := (-0.35u, -0.25u) -- (-0.2u, -0.25u){dir 135} .. (0, 0.25u) .. {dir 225}(0.2u, -0.25u) -- (0.35u, -0.25u);
      thdraw p;
    enddef;

    def p_entrance_legend =
      pickup PenA;
      path p;
      p := (-0.35u, -0.25u) -- (-0.2u, -0.25u){dir 135} .. (0, 0.25u) .. {dir 225}(0.2u, -0.25u) -- (0.35u, -0.25u);
      draw p shifted ((0.5, 0.5) inscale);
    enddef;

    let p_entrance_ASF = p_entrance;
    let p_entrance_ASF_legend = p_entrance_legend;

    # --- Štandardná horizontálna grafická mierka (8m s 1m rozlíšením) ---
    def s_scalebar (expr l, units, txt) =
      begingroup
        interim warningcheck:=0;
        tmpl:=l / Scale * cm * units / 2;
        tmpx:=l / Scale * cm * units / 8;
        tmph:=5bp; % výška mierky
      endgroup;
      pickup PenC;
      draw (-tmpl,0)--(tmpl,0)--(tmpl,-tmph)--(-tmpl,-tmph)--cycle;
      p:=(0,0)--(tmpx,0)--(tmpx,-tmph)--(0,-tmph)--cycle;
      for i:=-4 step 2 until 3:
        fill p shifted (i * tmpx,0);
      endfor;
      begingroup
        interim labeloffset:=3.5bp;
        for i:=0 step 1 until (l-1):
          tmpx:=tmpl * (i * 2 / l - 1);
          label.top(thTEX(decimal (i)),(tmpx,0));
        endfor;
        label.top(thTEX(decimal (l) & "\thinspace" & txt),(tmpl,0));
        label.bot(thTEX("Mierka 1 : " & decimal round(Scale*100)),(0,-tmph));
      endgroup;
    enddef;

    # --- Smerovka na sever (Shaded Compass Rose - Juraj Halama) ---
    def s_northarrow (expr rot) =
      scale_value = 0.42;
      decl := MagDecl; 
      T := identity;

      picture tmp_pic;
      tmp_pic = image (
          pickup pencircle scaled 1;
          thdraw fullcircle scaled 4cm;
          thdraw fullcircle scaled 2.75cm;
          pickup pencircle scaled .5;
          thdraw fullcircle scaled 3.75cm;
          for whereto=11.25 step 22.5 until 360:
            thdraw dir(whereto)*2.75/2cm--dir(whereto)*3.75/2cm;
          endfor;
          % arrows
          path halfarrow;
          halfarrow = (+.3cm,.3cm)--(0,2cm)--(0,0)--cycle;
          for whereto = 45 step 90 until 315:
            pickup pencircle scaled 1;
            for halfarrowgrad = 1 step -.05 until 0:
              thdraw ((halfarrowgrad*.3cm, halfarrowgrad*.3cm)--(0,2cm)) scaled .85 rotatedaround ((0, 0),whereto) withcolor .75halfarrowgrad;
            endfor;  
            pickup pencircle scaled .5;
            thdraw halfarrow scaled .85 rotated whereto;
            thfill halfarrow xscaled -1 scaled .85 rotated whereto withcolor white;
            thdraw halfarrow xscaled -1 scaled .85 rotated whereto;
          endfor;  
          for whereto = 0 step 90 until 270:
            pickup pencircle scaled 1;
            for halfarrowgrad = 1 step -.05 until 0:
              thdraw ((halfarrowgrad*.3cm, halfarrowgrad*.3cm)--(0,2cm)) scaled 1.15 rotatedaround ((0, 0),whereto) withcolor .75halfarrowgrad;
            endfor;  
            pickup pencircle scaled .5;
            thdraw halfarrow scaled 1.15 rotated whereto;
            thfill halfarrow xscaled -1 scaled 1.15 rotated whereto withcolor white;
            thdraw halfarrow xscaled -1 scaled 1.15 rotated whereto;
          endfor;  
          % central circles
          thfill fullcircle scaled .56cm withcolor 1white;
          pickup pencircle scaled .5;
          thdraw fullcircle scaled .56cm;
          thfill fullcircle scaled .3cm withcolor .30;
          % characters
          label.bot(thTEX("\bf{}N") scaled 1.5, (0,2.9cm));
          label.lft(thTEX("\bf{}E") scaled 1.5, (2.9cm,0));
          label.rt (thTEX("\bf{}W") scaled 1.5, (-2.95cm,0));
          label.top(thTEX("\bf{}S") scaled 1.5, (0,-2.9cm));
          % space among characters
          pickup pencircle scaled .5;
          thdraw (dir(45)*2cm)--(dir(45)*2.5cm);
          thdraw (dir(135)*2cm)--(dir(135)*2.5cm);
          thdraw (dir(225)*2cm)--(dir(225)*2.5cm);
          thdraw (dir(315)*2cm)--(dir(315)*2.5cm);
      );
      thdraw tmp_pic scaled scale_value rotatedaround (origin, - rot);
    enddef;

    # --- Symboly pohľadu: symbol_plan a symbol_extend ---
    def p_u_symbol_plan (expr pos,theta,sc,al) =
      U := (-3.25u, 3.25u);
      T := identity aligned al rotated theta scaled sc shifted pos;
      pickup PenB;
      q := ((-3.26u, -.95u) -- (1.74u, -.95u) -- (2.8u, .82u) -- (-1.49u, .82u) -- cycle);
      thfill q withcolor .85;
      thdraw q;
      q := ((-.175u, .5u) -- (0u, 0u) -- (.175u, .5u) .. (0u, .45u) .. cycle);
      thfill q withcolor .5green;
      thdraw q withcolor .5green;
      thdraw (0u, 0u) -- (0u, 2.31u) withcolor .5green; 
    enddef;

    def p_u_symbol_extend (expr pos,theta,sc,al) =
      U := (-2.5u, 2.5u);
      T := identity aligned al rotated theta scaled sc shifted pos;
      pickup PenB;
      q := ((-2.346u, -2.480u) -- (-.48u, -2.116u) -- (-.48u, 1.573u) -- (-2.346u, 1.354u) -- cycle);
      thfill q withcolor .85;
      q := ((-1.551u, -2.878u) -- (1.438u, -.766u) -- (1.438u, 2.388u) -- (-1.551u, 1.118u) -- cycle);
      thfill q withcolor .75;
      thdraw q;
      thdraw (-.48u, -2.116u) -- (-.48u, 1.573u) dashed evenly;
      q := ((.446u, -1.461u) -- (2.120u, -1.094u) -- (2.120u, 2.184u) -- (.446u, 1.965u) -- cycle);
      thfill q withcolor .85;
      thdraw (.446u, -1.461u) -- (.446u, 1.965u) dashed evenly;
      q := ((-.175u, .5u) -- (0u, 0u) -- (.175u, .5u) .. (0u, .45u) .. cycle) rotated -90;
      thfill q withcolor .5green;
      thdraw q withcolor .5green;
      thdraw (0u, 0u) -- (2.31u, 0u) withcolor .5green; 
    enddef;

    # --- Postavičky jaskyniarov v mierke (Walking & Climbing caver) ---
    picture u_man_c_pic;
    u_man_c_pic := image (
      draw (0cm, -0cm) -- (-8cm, 27cm) -- (-36cm, 55cm) -- (-50cm, 99cm) withpen pencircle scaled 16cm;
      draw (27cm, 48cm) -- (0, 64cm) -- (-29cm, 61cm) -- (-38cm, 102cm) withpen pencircle scaled 16cm;
      draw (-65cm, 48cm) -- (-75cm, 75cm) -- (-53cm, 106cm) -- (0, 106cm) withpen pencircle scaled 14cm;
      draw (-44cm, 130cm) withpen pencircle scaled 27cm withcolor black;
    ) shifted (20cm, -67cm);

    picture u_man_w_pic;
    u_man_w_pic := image (
      draw (0, 0) -- (7.5cm, 36cm) -- (0cm, 69cm) -- (9cm, 99cm) withpen pencircle scaled 16cm;
      draw (42cm, 9cm) -- (37.5cm, 42cm) -- (13.5cm, 69cm) -- (30cm, 102cm) withpen pencircle scaled 16cm;
      draw (21.5cm, 100.5cm) -- (6.6cm, 69cm) withpen pencircle scaled 16cm;
      draw (-24cm, 75cm) -- (-13.5cm, 102cm) -- (9cm, 112.5cm) -- (30cm, 108cm) -- (51cm, 87cm) -- (75cm, 93cm) withpen pencircle scaled 14cm;
      draw (30cm, 132cm) withpen pencircle scaled 27cm withcolor black;
    ) shifted (-20cm, -70cm);

    def p_u_man_c (expr P, R, S, A) =
      U := (60cm, 85cm) scaled (0.01 / Scale);
      T := identity aligned A rotated R scaled S shifted P;
      thdraw u_man_c_pic scaled (0.01 / Scale);
    enddef;

    def p_u_man_w (expr P, R, S, A) =
      U := (60cm, 80cm) scaled (0.01 / Scale);
      T := identity aligned A rotated R scaled S shifted P;
      thdraw u_man_w_pic scaled (0.01 / Scale);
    enddef;

    # --- Umelá stena / výstuž ---
    def l_wall_artificial (expr P) =
      T:=identity;
      pickup PenA;
      thdraw P withcolor (0.1, 0.3, 0.6);
    enddef;
  endcode

  # --- TeX rozloženie: Hlavička hore so scalebarom (max 8m, krok 1m), Legenda vľavo ---
  code tex-map
    \overfullrule=0pt\relax
    \legendwidth=5.2cm
    \legendcolumns=1

    % 1. HLAVIČKA NAD MAPOU (Logo, text a smerovka, pod nimi 8m grafická mierka s 1m krokom)
    \def\mapheader{%
      \vbox{\hsize=\hsize
        \hbox to \hsize{%
          \vbox to 3.2cm{\vfill\hbox{\pdfximage width 3.6cm {C:/Users/A1497335/Downloads/Dvojzavrt_po_objave/Dvojzavrt_po_objave/logo_cassovia.jpg}\pdfrefximage\pdflastximage}\vfill}\hfil
          \vbox to 3.2cm{\vfill\vbox{\hsize=0.52\hsize
            {\leftskip=0pt plus 1fil \rightskip=0pt plus 1fil \parfillskip=0pt
              {\size[24]\bf DVOJZÁVRT\endgraf}
              \vskip 3pt
              {\size[12]\rm Zádielska planina / Slovenský kras\endgraf}
              \vskip 3pt
              {\size[10.5]\it Speleoklub Cassovia\endgraf}
              \vskip 6pt
              {\size[9]\rm Zameral: {\bf Ladislav Gagy} \qquad Kreslil: {\bf Michal Danko}\endgraf}
              \vskip 2pt
              {\size[8.5]\rm Dátum merania: 16. 8. 2026 \qquad Dĺžka: {\bf 37 m} \qquad Hĺbka: {\bf 22 m}\endgraf}
            }
          }\vfill}\hfil
          \vbox to 3.2cm{\vfill\hbox{\northarrow}\vfill}%
        }
        \vskip 0.4cm
        \centerline{\scalebar}
        \vskip 0.8cm
      }
    }

    % 2. ĽAVÝ STĹPEC (1-stĺpcová legenda značiek)
    \def\mapleftcol{%
      \vtop{\hsize=\legendwidth
        {\the\legendtextsectionsize\the\legendtitle}\bigskip
        \insertlegend
      }
    }

    % 3. ROZLOŽENIE NA LISTE
    \def\maplayout{
      \legendbox{50}{100}{S}{\mapheader}
      \legendbox{22}{95}{NE}{\mapleftcol}
    }
  endcode

endlayout    

text sk "line wall:ice" "plastová rúra (spevnenie)"
text sk "point u:symbol_plan" ""
text sk "point u:symbol_extend" ""
text sk "point u:man_w" "postava (kráčajúca)"
text sk "point u:man_c" "postava (lezecká)"

# Export rez s 1-stĺpcovou ľavou legendou a 8m mierkou
export map -layout detail -projection [elevation 012] -o rez012c_1col.pdf

Použité AI – Gemini 3,7

Galléria testov a hrania sa s nano banna a gpt image.


Discover more from Blog SSS

Subscribe to get the latest posts sent to your email.

Pridaj komentár