Jakiś czas temu, gdy bawiłem się PostScript'em
napisałem mały programik przydatny przy robieniu tarcz enkoderów.
Jeśli było by zainteresowanie z Waszej strony, mógł bym ten programik tu umieścić wraz ze stosownym opisem.
Na rysunku próbka możliwości
Załączniki:
enkoder.gif(18.27 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
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!
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.
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.
%%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.
.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
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.
Załączniki:
podstawowefigury.gif(7.5 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
encoder300.ps(2 KB)
Musisz być zalogowany, aby pobrać ten załącznik.