Specifikace struktury slidu a vzorkovníku

Title Specifikace struktury slidu a struktury vzorkovníku
Author Jiří Krutil
Date 7.1.1999
Reference
File plpoint/docs/slidespc.html
Project Kolik třešní, tolik višní alias LeNoLin
Version $Id: slidespc.html,v 1.6 1999/01/10 18:40:49 jehne Exp $

Slide je umístěn v dokumentu a je uzavřen v obdélníkovém rámečku (ne nutně viditelném). Zabírá celou šířku stránky použitou pro vkládání textu, samotný rámeček však má vlastní šířku a zarovnání. Tento rámeček má vlastní souřadnicový systém s počátkem v levém horním rohu. Měrné jednotky jsou relativní k šířce stránky (např. 1 jednotka = 1/1 000 000 šířky) a jsou čtvercové. Tím jsou platformově nezávislé. Tyto jednotky se při vykreslování přepočítávají na skutečné pixely obrazovky resp. tiskárny.

Obsah základního rámečku Rámeček obsahuje elementy, z nichž každý je definován umístěním svých klíčových bodů. Elementem rozumíme kterýkoli z atomů, skupinu nebo uživatelem definovaný element.
Mezi atomy patří lomená čára, obdélník, elipsa a bublina. Popis těchto atomů naleznete níže v tomto dokumentu.
Klíčové body slouží k určení pozice, tvaru a velikosti elementu. V seznamu atomů uvedeném v tomto dokumentu je pro každý atom definováno, kolik má klíčových bodů, v jakém jsou vztahu a jak určují atom. Klíčový bod může být buď pevný nebo plovoucí. Pevný klíčový bod má absolutní souřadnici vzhledem k počátku souřadnic slidu. Plovoucí klíčový bod nemá pevnou pozici, ale jeho pozice je určena umístěním kotvy, k níž je přichycen. Tato kotva se zpravidla nachází na jiném elementu. Sdružování elementů do skupin Jakýkoli počet elementů (tento počet nemusí být větší než jedna, viz "lomená čára") je možné sdružit do skupiny. Toto sdružení se provede tak, že se postupně označí požadované elementy a poté se provede operace Seskupit. Tím vznikne nová obdélníková oblast s vlastní pozicí a velikostí obsahující všechny prvky skupiny.
Je-li takto skupina vytvořena, je při označení kteréhokoli elementu skupiny označena celá skupina a také se poté eventuální operace provede s celou skupinou. U některých operací (otočení, zrcadlové převrácení, změna velikosti) se poté operace neprovádí pouze jednotlivě pro všechny elementy skupiny, ale pro skupinu jako celek. Pro operace jako změna barvy, vlastnosti nebo pozice není toto rozlišení důležité, tzn. že je možné operaci provést postupně pro všechny prvky skupiny odděleně.
Skupina navenek vystupuje jako jeden element. Tím pádem je možné vytvářet stromovou strukturu, v níž jsou uzly chápány jako skupiny a listy jako samostatné elementy, které jsou zároveň atomy. Na rozdíl od všech ostatních elementů ovšem skupina nemá svou souřadnici z (z-order), protože výška jejich prvků je určena pro každý prvek samostatně.
Existující skupinu je možné také rozpojit. Po provedení této operace zůstanou označeny všechny prvky skupiny, které se již dále chovají jako před seskupením, tedy nezávisle.
Poznámka k zobrazení skupin a elementů: klikne-li uživatel na element, rozlišují se dvě možnosti:
Není-li element prvkem žádné skupiny, zvýrazní se např. červeně jeho pevné klíčové body, modře jeho plovoucí klíčové body a zeleně jeho uživatelem definované kotvy (viz dále). Samotný element je zobrazen jeho barvou.
Je-li element prvkem nějaké skupiny, označí se např. šedě klíčové body všech elementů, jež jsou prvky skupiny, do níž označený element náleží. Dále se barevně zvýrazní klíčové body a kotvy samotné této skupiny, a to stejným způsobem jako u samostatného elementu. Kliknutí na prvek skupiny se tedy chápe jako označení této skupiny s tím, že je uživatel šedým zvýrazněním informován o tom, jaké další prvky do této skupiny náleží. Základní operace nad elementy Přemístění (move), změna velikosti (resize), otočení (rotate), zrcadlové převrácení podle obou os (flip horizontal, flip vertical), změna barvy (color), barvy výplně (fill color), tloušťky (thickness) a "hloubky" (z-order). Vlastnosti obecného atomu Poloha jeho klíčových bodů, barva, barva výplně, tloušťka čáry a hloubka (ve smyslu osy z). Některé atomy některá z těchto vlastností nemají, některé mají další specifické vlastnosti uvedené dále. Jedinou společnou vlastností je poloha klíčových bodů. Vlastnosti jsou uloženy vždy v paměti v objektu Properties, který je pro všechny typy elememtů společný, ale použijí se jen ty, které mají pro konkrétní element význam.
Poznámka k barvě: Může to být jakákoli barva nebo tzv. "průhledná barva", která na rozdíl od bílé barvy umožňuje vidět, co je "pod objektem". Popis atomů Lomená čára je posloupnost klíčových bodů, které jsou propojeny úsečkami. Zmíněné body musí být nejméně dva. Tuto čáru lze přemisťovat (jako celek), nebo pouze přemisťovat její klíčové body, v nichž se lomí. To je také jedna z možností, jak změnit její velikost. Druhou možností je označit lomenou čáru (a třeba už nic jiného), udělat z ní skupinu a poté měnit velikost skupiny, což způsobí, že čára změní velikost při zachování tvaru. Lze ji také otáčet, zrcadlově překlápět a nastavovat jí barvu a tloušťku.
Lomená čára může mít také jako vlastnost ukončení šipkou na jednom nebo obou koncích. Může mít také nastaven příznak "oblá", který způsobí, že se nejedná o čáru, ale o spline křivku procházející zadanými body. Kombinacím těchto dvou vlastností lze získat typickou "křivou šipku" sloužící k propojování prvků slidu.
Kterýkoli z klíčových bodů čáry může být plovoucí.
Obdélník má čtyři klíčové body, které tvoří jeho rohy. Je to neustále obdélník: při tažení jednoho z klíčových (rohových) bodů se přemísťují i sousední dva a to tak, aby byl zachován obdélníkový tvar, i když byl obdélník pootočen, tzn. když jeho strany nejsou rovnoběžné s osami x a y.
Obdélník může mít nejvýše dva plovoucí klíčové body, které spolu nesmí sousedit, ale musí být "naproti" přes diagonálu.
Změna velikosti u obdélníka probíhá tak, že je-li přemístěn jeden z klíčových bodů (ať už uživatelem nebo přemístěním příslušné kotvy), je za druhý daný bod považován protější roh a výsledný obdélník bude mít strany rovnoběžné s původním.
Jiná situace nastane, je-li nastaven speciální příznak Čtverec. Ten zajišťuje, že se i po změně velikosti jedná o čtverec. V takovém případě se roh náležející přemisťovanému klíčovému bodu bude nacházet co nejblíže jeho požadované pozici, kde ještě bude zachována rovnoběžnost stran i čtvercový tvar.
Mnohoúhelník je speciální případ lomené čářy. Protíná-li se totiž lomená čára sama se sebou, její vnitřek se vyplní.
Elipsa je vepsána obdélníku, který ji definuje. Tento obdélník pochopitelně není vidět, ale zajišťuje, že elipsa je i po otočení a změně velikosti stále elipsou. Je-li nastaven speciální příznak Kružnice, jedná se o kružnici, a to i po změně velikosti.
Klíčové body elipsy jsou rohy zmíněného obdélníka, jemuž je elipsa vepsána. Platí pro ně stejné pravidlo jako pro klíčové body obdélníka. Také při nastaveném příznaku Kružnice bude tento obdélník udržovat tvar čtverce stejným způsobem, jaký byl popsán u obdélníku.
Bublina je textový rámeček se zaoblenými rohy, který nelze otáčet a z jehož jednoho rohu vychází ostrý trojúhelník, který někam ukazuje. Obsahuje text ve formátu HTML zpracovávaný stejně jako text v dokumentu mimo slide s jednou výjimkou: do tohoto textu již nelze vkládat obrázky.
Klíčové body textového rámečku se nacházejí v jeho rozích a stejně jako u obdélníka mohou být nejvýše dva a navíc naproti přes diagonálu. Bublina má jednu speciální vlastnost: "kulatost" rohů udanou jako poloměr kružnice, která roh tvoří (0 znamená pravoúhlý roh).
Klíčovými body bubliny jsou rohy obdélníka a konec "ukazující" špičky. Pro čtyři klíčové body ležící v rozích obdélníka platí stejné pravidlo jako pro klíčové body textového rámečku.
Textový rámeček speciální případ bubliny, kde není definován  pátý, "ukazovací" klíčový bod. Další speciální atributy Všechny elementy mají navíc ještě jako vlastnost typ čáry, kterou jsou nakresleny. Může to být normální, čárkovaná (přerušovaná), tečkovaná nebo čerchovaná čára. Další vlastnost určuje způsob zakončení čar: kulaté nebo hranaté. Lomená čára má navíc ještě pro oba konce zvlášť uveden typ šipky, kterým je daný konec vybaven. Jedním z typů je i "žádná šipka". Uchycování plovoucích klíčových bodů Plovoucí klíčový bod musí být uchycen k nějaké kotvě. Kotva je bod, jehož pozice je vyjádřena absolutně pomocí souřadnic na slidu, ale při transformaci je vztažena k elementu, jemuž patří. Tím pádem se při přemístění tohoto elementu přemístí i jeho kotva a s ní i uchycený plovoucí klíčový bod, čímž dojde ke změně tvaru elementu, jemuž tento plovoucí klíčový bod náleží.
Každý element má již "od narození" kotvy ve všech svých klíčových bodech (i v plovoucích); jinak řečeno: každý klíčový bod může být použit jako kotva. Další kotvu může uživatel vyrobit a přidat ji k tomuto elementu v podstatě na libovolnou pozici. Tato kotva se poté přesunuje s elementem, k němuž patří. Při změně velikosti obdélníka, elipsy, textového rámce a bubliny se stejná transformace provede i s kotvou, takže bude zaujímat stejnou relativní pozici.
Horší je to s lomenou čarou a mnohoúhelníkem. Posune-li se totiž jeden z mnoha jejich klíčových bodů, není jasné, v jakém smyslu se tato transformace týká i pozice kotvy. Skládá-li se lomená čára pouze ze dvou klíčových bodů, přemístění kotvy se provede následujícím způsobem: transformace se rozloží na otočení a prodloužení úsečky a poté se spojnice druhého klíčového bodu a kotvy otočí o stejný úhel a prodlouží ve stejném poměru jako přemisťovaný klíčový bod.
Na základě této vlastnosti se dá provést následující trik: mezi nějaké dva klíčové body lomené čáry A a B (ale mohou to být obecné dva klíčové body) se nakreslí úsečka s oběma klíčovými body plovoucími a ukotvenými do bodů A a B (zmatek?), této úsečce se nastaví průhledná barva a třeba v její třetině se na ni přidá kotva. A hle - máme kotvu nacházející se vždy v jedné třetině spojnice bodů A a B. Uživatelem definované elementy Jakýkoli element lze (když je právě označen) uložit do vzorkovníku elementů, přiřadit mu jméno a třeba ikonu. Takové vzorkovníky se ukládají zvlášť (ne do dokumentu) a ke každému dokumentu jich lze připojit více. V dokumentu je potom pouze zapsáno, že při jeho tvorbě byly použity ty a ty vzorkovníky.
Je-li do dokumentu vložen uživatelem definovaný element, není tam fyzicky pouze odkaz do vzorkovníku, ale kopie tohoto elementu, jejíž vlastnosti se dají normálně editovat.
Nedodá-li tedy autor ke své prezentaci vzorkovníky, které použil, prezentace normálně chodí, jen se k ní už méně pohodlně něco přidává. Uložení slidu do dokumentu na disk Dokument je na disku uložen ve formátu HTML. Slide je v dokumentu uložen na tomtéž místě, na kterém se nachází při editování dokumentu. Celá sekvence klíčových slov uzavřená do tagů <SLIDE> je navíc "zakomentovaná" ve smyslu HTML - tzn. že HTML prohlížeč ji přeskočí. Bezprostředně za příkazem uzavírajícím komentář je vloženo volání konvertoru slidů do bitmapy, jehož výstupem je bitmapa odpovídající slidu výše definovanému. Je-li dokument otevřen HTML prohlížečem, popis slidu v komentáři se přeskočí, ale zavolá se automaticky konverzní program a slide se zobrazí jako bitmapa. Je-li tentýž dokument otevřen našim programem, načte se definice slidu z komentáře a přeskočí se následné volání konvertoru. V komentářích nemusí být uvedena přímo definice slidu, ale jen odlaz na externí soubor (include). Všechny tagy odpovídající prvkům mají navíc jeden nepovinný parametr NAME=x, kde x je nějaký identifikátor spojený s odkazem. Slouží k tomu, aby se z textu prezentace dalo odkazovat i na konkrétní prvky slidu. Důležité také je, že v jednom slidu může být víc prvklů se stejným parametrem NAME, takže je možné udělat odkaz na více prvků slidu, aniž by bylo potřeba je kvůli tomu seskupovat.
Otázkou zůstává, jak to uživateli přehledně znázornit tak, aby viděl, na které prvky jeho odkaz ukazuje, jak takový odkaz vytvořit, jak měnit a jak mazat. Zde asi nezbyde než donutit uživatele, aby odkazu dal identifikátor, podle kterého by jej pak poznal. Poté by mohl nezávisle tvořit zdroj a cíl odkazu (např. jeden v režimu editace textu a druhý v režimu editace slidu) a také by mohl podle tohoto identifikátoru nechat zobrazit cíle odkazu. Každý slide má nějaký popisek. Pokud není uživatelem zadn, používá se implicitní popisek "Slide no. #", kde # je aktuální pořadové číslo slidu. Tento popisek není v dokumentu vidět a není ani nijak svázán s texty ve slidu (např. s jeho nadpisem). Používá se pouze pro sestavování prezentací. Aktuální číslo slidu lze zjistit voláním příslušné metody hajzlbáby, které se předá ukazatel na slide. Seznam příkazů Vložení slidu do HTML <!--
<SLIDE SID=s FILE=fi NAME=n WIDTH=w HEIGHT=h BORDERTHICK=b COLOR=c FILLCOLOR=f ALIGNMENT=a DESCRIPTION=d>
% zde je obsah slidu
</SLIDE>
-->
<A NAME=n1 NAME=n2...><IMG SRC="convert s"></A> s    identifikátor slidu (v rámci souboru)
fi    jméno souboru, z něhož se slide načte (nepovinné)
n    slouží pro odkazy z textu
w    šířka slidu v jednotkách
h    výška slidu v jednotkách
b    tloušťka čáry ohraničující slide v jednotkách
c    barva rámečku slidu (může být průhledná)
f    barva výplně (pozadí) slidu
a    zarovnání (LEFT, CENTER, RIGHT)
d    popis slidu (objeví se vycentrovaný pod ním
n1, n2... jména odkazů mířících do tohoto slidu
Vzorkovník <PATTERNS FILENAME=f> f    jméno souboru se vzorkovníkem Skupina <GROUP GID=g EID=e1 EID=e2...> g    identifikátor skupiny (pozor, je to zároveň identifikátor prvku)
e    prvky skupiny (elementy) zadané pomocí následujících příkazů
Pevný klíčový bod < ... KPID=k X=x Y=y ... > k    identifikátor klíčového bodu (jednoznačný v rámci slidu) typu longint
x    x-ová souřadnice v jednotkách (vzhledem k počátku souřadnic)
y    y-ová souřadnice v jednotkách (vzhledem k počátku souřadnic)
Uživatelem vytvořená kotva < ... AID=a X=x Y=y ... > a    identifikátor kotvy (totéž co identifikátor klíčového bodu) typu longint
x    x-ová souřadnice kotvy v jednotkách (vzhledem k počátku souřadnic)
y    y-ová souřadnice kotvy v jednotkách (vzhledem k počátku souřadnic)
Plovoucí klíčový bod < ... FKPID=k AID=a ... > k identifikátor klíčového bodu (jednoznačný v rámci slidu) typu longint
a kotva k níž je tento klíčový bod přichycen (může to být i identifikátor klíčového bodu)
Vlastnosti < ... COLOR=c THICKNESS=t ZORDER=z FILLCOLOR=f SQUARE=s STARTARR=sa ENDARR=ea LINETYPE=lt LINEENDS=le RADIUS=r SPLINEX=x ... > c    barva (color) ve tvaru RRGGBB (hexa), XXXXXX=průhledná
t    tloušťka (thickness) v jednotkách
z    hloubka (z-order) typu integer
f    barva výplně (fill color) RRGGBB (hexa), XXXXXX=průhledná
s   čtvercovost (square) hodnota 0 nebo 1
sa  počáteční šipka (start arrow) typu identifikátor šipky
ea  koncová šipka
lt    typ čáry
le   typ konců čáry
r    poloměr oblosti rohu (radius) v jednotkách, u lomené čáry nula=lomená, nenula=oblá
x    reálné číslo určující "ostrost" ohybů spline křivky
Lomená čára <CUTLINE EID=e kp1kp2... a1 a2... props> e     identifikátor prvku (jednoznačný v rámci slidu) typu longint
kp  definice pevných/plovoucích klíčových bodů v pevném pořadí
a    definice uživatelem vytvořených kotev
Obdélník <RECTANGLE EID=e kp1kp2 kp3 kp4 a1 a2... props> e     identifikátor prvku (jednoznačný v rámci slidu) typu longint
kp  definice čtyř pevných/plovoucích klíčových bodů v pevném pořadí
a    definice uživatelem vytvořených kotev
Elipsa <ELLIPSE EID=e kp1kp2 kp3 kp4 a1 a2... props> e     identifikátor prvku (jednoznačný v rámci slidu) typu longint
kp  definice čtyř pevných/plovoucích klíčových bodů v pevném pořadí
a    definice uživatelem vytvořených kotev
Bublina <BUBBLE EID=e kp1kp2 kp3 kp4 kp5 a1 a2... props> text </BUBBLE> e      identifikátor prvku (jednoznačný v rámci slidu) typu longint
kp   definice pěti pevných/plovoucích klíčových bodů v pevném pořadí
a     definice uživatelem vytvořených kotev
text textový obsah bubliny

Specifikace formátu vzorkovníku

Vzorkovník obsahuje množinu prvků uložených v samostatném souboru, které je možné použít pro vkládání do slidu a následnou editaci. Jakmile je prvek vzorkovníku vložen do slidu, je tam i fyzicky zkopírován, takže jakékoli úpravy se týkají pouze tohoto konkrétního prvku. Důsledkem je, že hotová prezentace se může dodávat bez vzorkovníků, pomocí kterých byla vytvořena a přesto je možné ji nadále zobrazovat i editovat.
Každému prvku vzorkovníku je přiřazeno jméno, ev. ikona. Při editaci si může uživatel otevírat jednotlivé vzorkovníky do toolboxů na obrazovce, kde jsou jednotlivé prvky reprezentovány svými ikonami nebo tlačítky se jmény. Prvky lze ze vzorkovníků mazat a také je možné aktuálně označený element prezentace do vzorkovníku vložit. Při vkládání do vzorkovníku je uživatel dotázán, do kterého vzorkovníku chce prvek vložit, jak jej chce pojmenovat a jakou mu chce dát ikonu.
Ikony jsou tak trochu třešeň, protože si říkají o editor ikon. Alternativou by mohlo být automatické vyrobení ikony obsahující zmenšený obraz jí odpovídajícího prvku. Očakávám další nápady. Způsob uvedení použitých vzorkovníků v dokumentu byl popsán výše ve specifikaci formátu slidu. Zde je popsán formát souboru obsahujícího vzorkovník.
Jedná se o textový soubor, jehož jméno určuje iživatel při vytvoření vzorkovníku (kromě jména vzorkovníku, které může být jiné). Jeho formát je odvozen z HTML, nebo spíš z formátu, v jakém ukládáme slidy. Struktura je následující: Na začátku je tag oznamující název vzorkovníku a dále je seznam jeho prvků. Celý soubor je zakomentovaný, až na první řádek, kde informace pro člověka, který si soubor náhodou otevře HTML prohlížečem. V jednom souboru se nachází právě jeden vzorkovník. <BODY>
This file contains LeNoLin patterns definition.
<!--
<PATTERNS TITLE=pt>
  <PATTELEMENT TITLE=et>
    tady je definice 1. prvku
  </PATTELEMENT>

  <PATTELEMENT TITLE=et>
    tady je definice 2. prvku
  </PATTELEMENT>

  ...

-->
</BODY>

pt    název vzorkovníku (patterns title)
pe   název prvku (element title)