Skoro jest przynajniej jeden zainteresowany to warto się podzielić.
Oto więc opis i sam program.
Cechy
Poniższe rozwiązanie nie wymusza na nas używania pirackiego oprogramowania oraz działa praktycznie w dowolnym systemie operacyjnym.
Rozdzielczość wydruku zależy jedynie od parametrów urządzenia, na którym będziemy drukować. Jeżeli potrzebujemy 1200dpi wystarczy jedynie znaleźć odpowiednią drukarkę, a nie zmieniać coś w w rysunku.
Co będzie potrzebne?
Potrzebne będą trzy rzeczy: dowolny edytor tekstowy (np. Notepad), drukarka z obsługą PostScript'u oraz papier lub folia do drukowania. Jeżeli nie mamy drukarki z obsługą PostScript'u, wystarczy program mogący odczytywać i drukować pliki w tym formacie, może to być na przykład darmowy
GhostScript. Dla osób, które chciały by się pobawić PostScript'em polecam edytor z możliwością kolorowania składni.
Kilka uwag technicznych
- Podstawowa jednostka miary to punkt (1 punkt = 1/72 cala).
- Punkt o współrzędnych (0,0) początkowo znajduje się w lewym dolnym rogu kartki.
- Komentarze w PostScript zaczynają się od znaku procent
% i kończą znakiem nowej linii.
- PostScript rozróżnia wielkość liter, zatem
zmienna,
Zmienna i
ZMIENNA to trzy różne rzeczy.
Program enkoder
Postaram się krótko opisać podstawowe elementy, z których będziemy później składać nasze tarcze enkoderów. Parametry przekazywane do funkcji ujęte są w nawiasach ostrych: <zmienna>.
Jednostki miary
Dostępne są trzy funkcje umożliwiające określenie rozmiarów w bardziej użytecznych jednostkach niż punkt. Są to
inch,
cm i
mm. Stosuje się je w sposób naturalny, podając przed nazwą jednostki odpowiednią wartość. Istotna jest spacja pomiędzy wartością a jednostką miary!
Kierunek obrotu
Do dyspozycji mamy dwie stałe określające kierunek obrotu:
CW i
CCW. Stałe te są wykorzystywane przy wywoływaniu funkcji
qrotate.
Funkcja ring
Służy do rysowania czarnego okręgu o podanym promieniu.
Sposób wywołania: <promień> ring
Funkcja mask
Służy do rysowania białego koła o podanym promieniu.
Sposób wywołania: <promień> mask
Funkcja circle
Rysuje obwiedzione na czarno białe koło o podanym promieniu.
Sposób wywołania: <promień> circle
Funkcja cross
Rysuje czarny krzyż wpisany w niewidoczny okrąg o podanym promieniu.
Sposób wywołania: <promień> cross
W przykładzie rozmiar podano w punktach.
Funkcja wheel
Rysuje okrąg składający się z podanej ilości segmentów.
Sposób wywołania: <promień_wewnętrzny> <promień_zewnętrzny> <segmenty> wheel
Parametr <segmenty> określa ilość białych i czarnych segmentów, przy czym rysowane są tylko czarne.
Funkcja qrotate
Obraca układ współrzędnych o 1/2 segmentu w kierunku określonym przez <kierunek>. Parametr <segmenty> podajemy aby było wiadomo jaki kąt ma jeden segment.
Sposób wywołania: <kierunek> <segmenty> qrotate
Funkcja userwheel
Jest to jedyna funkcja, którą zalecam modyfikować. W miejscu pomiędzy liniami zawierającymi %begin i %end możemy wstawić wywołania wyżej opisanych funkcji w celu stworzenia odpowiedniego koła enkodera.
Sposób wywołania: <x> <y> userwheel
Parametry <x> i <y> określają położenie środka rysowanego koła na kartce. Znając rozmiar kartki, marginesy przy drukowaniu oraz rozmiar naszego koła, z łatwością możemy określić wartości tych parametrów.
Code: /userwheel {
gsave
translate
%twoj kod
%begin
...
%end
grestore
} def
Na dołączonym rysunku przedstawiono działanie funkcji składowych. Kolor szary odpowiada niezadrukowanej powierzchni papieru. Przykład e) pokazuje działanie funkcji wheel wywołanej z następującymi parametrami: 0.5 cm 1 cm 16 wheel.
Jak rysować?
Do tej pory opisałem jedynie funkcje. Sama obecność ich definicji w pliku nie spowoduje jeszcze, że zostaną wykonane, jak zresztą w większości języków programowania. Aby coś się narysowało powinniśmy:
- wypełnić funkcję userwheel odpowiednimi wywołaniami funkcji składowych
- przynajmniej raz wywołać naszą funkcję pisząc na przykład 10 cm 10 cm userwheel
- wreszcie na samym końcu napisać polecenie showpage, które powoduje zamknięcie bieżącej strony i wysłanie jej do drukarki.
W programie na samym końcu jest przykładowy fragment rysujący dwa identyczne koła na jednej kartce.
Code: %%main program
10 cm 7.5 cm userwheel
10 cm 20 cm userwheel
%%main program end
showpage
Przykłady
Poniżej zamieszczono przykładowe kody odpowiedzialne za wyrysowanie kół z pierwszego postu w tym wątku.
Wybrany kod należy wstawić pomiędzy %begin i %end w funkcji
userwheel.
Code: .5 cm .7 cm 2 wheel
.7 cm .9 cm 4 wheel
.9 cm 1.1 cm 8 wheel
1.1 cm 1.3 cm 16 wheel
1.3 cm 1.5 cm 32 wheel
1.5 cm 1.7 cm 64 wheel
1.7 cm 1.9 cm 128 wheel
1.9 cm 2.1 cm 256 wheel
2.15 cm ring
.45 cm ring
.3 cm cross
Code: 1 cm 1.5 cm 32 wheel
CW 32 qrotate
1.5 cm 2 cm 32 wheel
2.1 cm ring
.9 cm ring
.7 cm cross
.2 cm mask
Uwagi
- Jeżeli rysowane linie okażą się za cienkie (dotyczy funkcji
ring,
circle i
cross), można zmienić wartość w linii 10:
0.1 setlinewidth na większą.
- Wywołanie funkcji
qrotate spowoduje obrócenie układu współrzędnych na stałe (patrz drugi przykład). Można to zignorować lub wywołać funkcję
qrotate z przeciwnym kierunkiem obrotu i taką samą ilością segmentów.
I to tyle na temat programu.
W razie pytań jestem do dyspozycji.
Owocnego użytkowania.