Cíl lekce
V této lekci vytvořím ze skupiny vrstev dané uživatelem jeden inteligentní objekt v prostředí programu Adobe Photoshop. Z prvu zajistím výjimky, které mohou nastat, jako je neotevřený soubor, či existence samotného setu vrstev. Uživatel má navíc možnost pomocí dialogového okna, zadat název skupiny vrstev, kterou chce převést do inteligentního objektu.
Původní obrázek - obrázek 9.1
Obrázek při zadávání do dialogového okna - obrázek 9.2
Výsledný inteligentní objekt z vrstev - obrázek 9.3
Využité třídy v této lekci
- Application: pro práci s atributy dokumentu.
- Konstanty: konstanty typu event ID.
- Descriptor: pro popis prováděných akcí z rozhraní.
- Reference: pro zadání objektů do ActionDescriptoru.
Vytvoření dialogu a dosazeních do proměnných
Metoda prompt() slouží jako dialogové okno s dvěma tlačítky a textboxem do kterého uživatel může psát vstup. Samotná metoda poté vrací textový řetězec a v případě prázdného pole hodnotu null. První parametr této metody je zpráva hlavního okna, druhý parametr označuje již předvyplněné textové pole (v tomto případě nastavím první nalezenou skupinu vrstev, aby bylo zřejmé, co má uživatel zadat) a třetí je titulek dialogového okna. Celou metodu poté přiřadím pomocí rovná se do proměnné jelikož metoda má návratovou hodnotu. Obsah lze jednoduše vypsat pomocí alertu, pro kontrolu, že přiřazení je funkční viz. zakomentovaný příkaz. Dále do proměnné layerSet přiřadím všechny skupiny vrstev v aktivním dokumentu.
var placeHolder;
//získej skupiny vrstev
var layerSet = activeDocument.layerSets;
//pokud existuje více skupin vrstev než 0, nastavím předvyplněné pole prvním
//názvem nalezené skupiny vrstev
layerSet.length > 0 ? placeHolder = layerSet[0].name : placeHolder = "";
//přiřaď název skupiny vrstev
var nameOfSet = prompt("Zadejte název skupiny, který chcete převést na inteligentní objekt.\n" +
"Zamčené vrstvy budou odemčeny a také převedeny.", placeHolder, "Výběr");
Vytvoření funkce pro kontrolu skupiny vrstev
Jako další krok potřebuji zkontrolovat zda-li uživatelem zadaný název existuje jako skupina vrstev a
skript se může provést.
To ošetřím jednoduchou podmínkou (if), kde v cyklu procházím všechny skupiny vrstev a ptám
se, či se jejich atribut name rovná názvu, který zadal uživatel. V tomto případě
se jedná o funkci s dvěmi parametry, tedy skupinou a názvem. Při nalezení zadané skupiny vrstev je třeba také ošetřit zamčení jednotlivých vrstev.
Proto si nalezenou skupinu vrstev vložím jako parametr do funkce, která ošetří zamčení vrstev.
function doesExist(layerSet, nameSet){
for (var i = 0; i < layerSet.length; i++) {
if(layerSet[i].name == nameSet){
unlockLayers(layerSet[i]);
return true;
}
}
return false;
}
Ošetření zamčených vrstev
Na ošetření zamčených vrstev vytvořím jednuduchou funkci unlockLayers,
která bude mít za úkol jen projít vrstvy skupiny a nastavit atribut allLocked, na false.
Nastavaním tohoto atribut odemknu vrstvu a vyhnu se případným výjimkám u dalšího zpracování vrstev. Tuto funkci ilustruje zdrojový kód níže.