Budowa systemu

 
 

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.