Razvoj naprednih dinamičkih PostScript procedura Klaudio Pap Sažetak U ovom članku se prikazuje novi način stvaranja dinamičkih procedura baziranih na PostScript jeziku koje ne postoje u konvencionalnim grafičkim programima. U klasičnom PostScript programiranju često se gubi upravljivost nad ciljnom grafikom koja se u svom razvoju mora cijelo vrijeme mijenjati, naknadno dizajnirati, dodatno redimenzionirati i kolorirati. Na poseban način se ugrađuje korisnička interaktivna kontrola nad izlaznom rezolucijom rezultata kao i dinamička izgradnja korisničkog upravljačkog sučelja za svaki željeni dizajnerski paramatar za dotičnu vrstu grafičkog rješenja. Na taj način su se stvorile potpuno nove mogućnosti stvaranja originalnih dizajnerskih rješenja. Ključne riječi: PostScript, dinamička grafika, računarska grafika, grafička tehnologija Uvod Direktnim programiranjem u PostScript jeziku moguće je dobiti puno složenije, bogatije i naprednije grafike [1] nego u klasičnim dizajnerskim programskim paketima. Naredbe PostScript jezika [2] su u potpunosti orijentirane na grafičke oblike i atribute svih vrsta. Programiranje se mora posebno učiti jer je zbog stogovne definicije jezika slaganje programskih naredbi i njihovih parametara potpuno drugačije nego kod mnogih drugih viših programski jezika. Definicija varijabli, programskih polja, procedura, funkcija i mnogih drugih programskih struktura se potpuno razlikuje od uobičajenih postupaka u svijetu programiranja. Na slici 1 prikazana su dva minimalna primjera klasičnog PostScript programa. Za definiciju konstante potrebno je samo napisati njen iznos i iza nje ugraditi razmak između riječi (kod 32) što će uzrokovati stavljanje konstante na vrh operativnog stoga.
Slika 1. Dva minimalna primjera klasičnog PostScript programa
Naredbe uzimaju svoje parametre u obliku konstanti sa stoga. Svaka naredba je mikrokodirana tako da »zna« koliko parametara mora uzeti sa stoga. Ukoliko na stogu nema priređenog parametra PostScript interpreter objavljuje grešku. Nakon što naredba uzme parametar sa stoga, vrh stoga se pomiče za jednu adresu niže jer se parametar briše s vrha stoga. U drugom primjeru na slici 1 se vidi isti primjer s upotrebom stoga rječnika. U PostScript jeziku nema uobičajene definicije varijable već se upotrebom naredbe def stvara definicija para koji se sastoji od alfanumerika i konstante. Takav se par kopira na stog rječnika. Tako upotrebljena varijabla se koristi tako da se u budućem kodu navede alfanumeričko ime para nakon čega stog rječnika isporuči drugi dio definicije para na operativni stog kojeg PostScript interpreter operativno koristi za izvršavanje. Ista je metodologija stvaranje funkcija i procedura u PostScript jeziku. Stvaranje dinamičke Postscript procedure Da bi se postavio jedan općeniti standard stvaranja interaktivnog sučelja treba prvo definirati varijable koje će biti programsko sučelje između samog PostScript programa i interaktivne korisničke maske preko koje će se vršiti izravan utjecaj na izvršavanje programa u skladu s dizajnerskim zahvatima nad originalnim programom. Definirano je da to bude deklarirano na početku programskog koda unutar znakovnih nizova % var begin% i % var end (Slika 2).
Slika 2. Priprema ulaznih varijabli za dinamičku izgradnju interaktivnog sučelja pomoću tehnologije regularnih izraza Tu se upotrijebila tehnologija regularnih izraza koja se pokazala dovoljna za razvoj kvalitetnih dinamičkih PostScript procedura. Najčešći regularni izrazi koji su se koristili su:
Na slici 3 se vidi direktna veza definicija sučeljskih varijabli i pripadna konstrukcija interaktivnog sučelja za korisnika. Prvo se iza riječi var navede željena PostScript varijabla koja će biti kontrolirana preko sučelja, a potom se u uglatoj zagradi definira željeni početni iznos u programu, a vidljiv je u korisničkom sučelju. U vitičastoj zagradi se definira željeno ime na korisničkoj masci uz početnu vrijednost koje može, ali ne mora biti jednako imenu programske varijable. U okrugloj zagradi se navodi u matričnij formi željena pozicija sučeljske varijable na ekranskoj masci u donjem djelu u redak i stupac formi. Tako se na primjer sučeljska varijabla y2 nalazi na poziciji u drugom retku i drugom stupcu na korisničkoj masci što se dobilo s navođenjem (2,2) u deklarativnom djelu programa. Pomoću navođenja regularnih izraza u deklarativnom dijelu se bilo koji korisnički upis filtrira da se ne bi događale neželjene PostSript greške.
Slika 3. Konstrukcija korisničkog sučelja pomoću sučeljskih varijabli u PostScript jeziku Na korisničkom sučelju je postavljena početna rezolucija rezultata na 300 dpi što je dovoljna rezolucija za startna eksperimentiranja prije finalizacije dizajna. Početna širina i visina digitalnog platna je postavljena na 500 odnosno 600 tipografskih točaka (point), a tipografska točka je i po definiciji mjerna jedinica u PostScript koordinatnom prostoru.
Slika 4. Postupak dodavanja novih dizajnerskih grafičkih varijabli na korisničko sučelje Eksperimentalni rezultati razvijenih dinamičkih PostScript procedura Pomoću navedene metodologije za dinamičku izgradnju dizajnerskog korisničkog sučelja napravljeni su eksperimentalna sučelja za neke primjere iz knjige PostScript [3]. Prvo sučelje (Slika 4) kontrolira repetiranje zadanog grafičkog oblika preko tri varijable: broj ponavljanja, sukcesivni relativni pomak po horizontali i posebno po vertikali.
Slika 5. Repetiranje zadanog grafičkog oblika preko varijabli broj ponavljanja, relativni pomak po horizontali i relativni pomak po vertikali Na slici 5 se dizajnerski kontrolira samo izbor znakova u dizajnerskom grafičkom rješenju. To znači da se cijelo vrijeme kroz isprogramiranu masku vidi linijska struktura što se kroz sučelje ne mijenja.
Slika 6. Sučelje za dinamičku promjenu izbora znakova u dizajnerskom rješenju Neki puta se želi intervenirati na grafičko rješenje zbog promjene različitih uvjeta aplikacije zbog tehnologije tiska i različitih materijala. Na slici 6 je prikazan primjer indirektne kontrole svetline cijele slike preko gustoće linije. Na korisničkom sučelju se upravlja faktorski preko pojma svjetline koji utječe na broj ponavljanja crtanja Bezier linija u for programskoj petlji.
Slika 7. Indirektno upravljanje nad svjetlinom objekta preko gustoće linija Na slici 7 se vidi primjer upravljanja bojom lika preko parametara CMYK kolor sustava. Također se upravlja indirektno s gustoćom grafike preko svjetline koja se može kontrolirati u intervalu od 0 do 1. Prikazana grafika se kontrolira preko eofill naredbe (even-odd fill) gdje se ispuna i praznina kontrolira preko parnog odnosno neparnog prelazaka granica zrake iz promatrane površine prema beskonačnosti.
Slika 8. Upravljanja bojom lika preko parametara CMYK kolor sustava i indirektno preko svjetline od 0 do 1 Zaključak U ovom radu je prikazana nova metoda dinamičke izgradnje korisničkog sučelja za grafičko dizajnersko upravljanje stvaranju PostScript grafika. Ugrađen je poseban standard deklaracija željenih upravljačkih varijabli koje direktno utječu na stvaranje korisničke maske i definiciju početnih vrijednosti. Upravljivost nad željenim dizajnom se može postići direktno i indirektno. Direktni način koristi sučeljske varijable tako da upisane vrijednosti preko sučelja nemaju dodatnu programsku korekciju ili konverziju. Za takvo korištenje se moraju poznavati osnove PostScripta jer se prilikom unosa moraju poštivati domene parametara određenih PostScript naredbi koje doživljavaju promjenu. U indirektnom načinu korisnik ne treba poznavati detalje već samo način upotrebe indirektno preko na primjer pojmova svjetline, debljine i slično. Ovdje se upisana vrijednost preko sučelja konvertira ili faktorizira za željenu naredbu ili programsku funkciju koja je ključna za prikaz lika i njegovih svojstava. Na taj način su se stvorile potpuno nove mogućnosti stvaranja originalnih dizajnerskih rješenja koja se uvijek mogu redizajnirati, redimenzionirati odnosno oblikovati po korisničkoj želji. References 1. Foley, J. D.; Van Dam A.; Feiner S. K. & Hughes J. F., (1997). Computer Graphics Principles and Practice, Addison-Wesley, ISBN 0-321-21056-5
|