Z założeń pracy wynikało również, że program powinien umożliwiać podgląd
plików graficznych w dwóch środowiskach: znakowo-graficznym dla terminali
wektorowych Tektronix oraz w graficznym środowisku XWindow. Naturalnym
rozwiązaniem, było stworzenie dwóch osobnych programów dla obu środowisk.
Przy takim podejściu pojawia się problem takiej organizacji kodu programu,
która pozwoliłaby współużywać w obu programach jak największe jego partie.
Problem ten zaowocował projektem graficznego systemu do podglądu i edycji
rysunków, o modularnej budowie. Przedstawia go poniższy schemat:
Centralnym punktem całego projektu jest jądro graficzne, którego głównymi
zadaniami są:
* Reprezentacja rysunku w pamięci. Idealna reprezantacja powinna być
oszczędna, poza tym, użyte struktury decydują o łatwości implementacji
operacji na poszczególnych obiektach rysunku.
* Mechanizm budowania elementów rysunku, gdzie najistotniej-szym wydaje
się być założenie o ogólności sposobu konstrukcji obiektów tak by edytor
mógł obsługiwać możliwie wiele formatów danych wejściowych.
* Łatwy dostęp do obiektów graficznych, szczególnie ważny dla funkcji
wyświetlających, gdzie potrzebne są często optymalizacje w celu uniknięcia
jałowych operacji graficznych (rysowania poza ekranem) oraz redukcji ilości
danych przesyłanych przez sieć podczas wyświetlania.
* Bogaty zbiór operacji na obiektach. Ten element decyduje o mocy edytora
jako narzędzia.
Kolejnym elementem całego systemu jest warstwa wymiany danych. Stanowi
ją seria modułów obsługujących poszczególne formaty plików graficznych.
Każdy z modułów składa się z dwóch części: interpretera, który wczytuje
poszczególne elementy plików i zamienia je na ciąg wywołań funkcji jądra,
które odpowiadają za tworzenie struktur danych dla rysunku w pamięci jądra,
oraz generatora, który daje użytkownikowi możliwość utrwalenia swojej pracy
w pliku. Wówczas struktury reprezentujące rysunek muszą być przetłumaczone
na format umożliwiający ich późniejsze odtworzenie. Innym momentem, w którym
wykorzystuje się moduł generujący jest wydruk rysunku. Może to narzucać
na generator dodatkowe wymagania związane ze specyfiką urządzenia (np.
minimalizacja trajektorii ruchu pióra plotera) Fakt istnienia w programie
modułów wejścia-wyjścia dla wielu formatów pozwala również na konwertowanie
danych graficznych z jednego formatu na drugi, co podnosi funkcjonalność
systemu.
O obliczu całego systemu najbardziej decyduje moduł interfejsu użytkownika.
On to głównie odpowiada za wygodę użytkowania i funkcjonalność programu.
Kształt samego interfejsu determinują w głównej mierze cechy środowiska
graficznego i inwencja programisty. Minimalnym zbiorem możliwości jakie
powinien użytkownikowi zapewniać, to sprawne i wierne wyświetlanie rysunku
w dowolnych powiększeniach. Możliwości edycyjne systemu, warunkują cechy
środowiska graficznego w jakim działa program. Dla terminali Tektronix
trudno jest wyobrazić sobie wygodną edycje rysunku, W systemie XWindow
natomiast, możliwości te ograniczają jedynie pomysły programistów.
Implementując oba programy staraliśmy się kierować powyższym zarysem
projektu. Zdawaliśmy sobie sprawę, że zdołamy oprogramować tylko część
z przedstawionych na schemacie modułów, mimo to, przez cały czas tworzenia
obu programów, myśleliśmy o rozszerzaniu projektu o kolejne podzespoły
przez innych programistów. Mogły by to być na przykład moduły do wczytywania
i zapisywania rysunków w języku PostScript czy też interfejs graficzny
dla systemu Microsoft Windows.