- Szczegóły
- Kategoria: Kurs LISP
Twórcom ZWCADa nie udało się dotychczas opracować środowiska programistycznego dla LISP. O ile jest mi wiadomo, prace takie trwają, niestety przewidywany czas realizacji nie jest mi znany, do czasu wydania takiego środowiska musimy więc radzić sobie ogólnie dostępnymi narzędziami. Dobra wiadomość jest taka, że wystarczy zwykły podstawowy edytor tekstu np. Notatnik. Ja używam programu Notepad++ (do pobrania poniżej) z kilku powodów:
- Kolorowanie składni. Dzięki temu łatwo jest czytać kod, wiemy co jest nazwą funkcji, a co jej parametrami. Można też w łatwy sposób sprawdzić które nawiasy są pozamykane (a to bardzo ważne a można się w tym pogubić, po kliknięciu nawiasu podświetla nam się odpowiadający mu nawias otwierający lub zamykający.
- Kolorowanie wystąpień wyrazów. Dzięki temu łatwiej jest odnaleźć te same funkcje, zmienne itp
- Autouzupełnianie. Domyślnie jest to wyłączone, ale można ustawić podpowiedzi czyli zaczynamy pisać np. nazwę funkcji, a program podpowiada resztę. Mała rzecz a cieszy, zwłaszcza, gdy trzeba napisać np. vlax-ename->vla-object.
- Makra. Istnieje możliwość nagrywania makr i przypisywania im skrótów klawiaturowych.
- Zwijanie wierszy. Przy większych plikach znalezienie np. określonej funkcji może być uciążliwe, dzięki tej opcji możemy zwinąć wiele wierszy i widoczna będzie tylko pierwsza linia.
- Program jest darmowy.
Debugowanie możemy wykonać jedynie w ZWCAD (do pobrania poniżej) przez wykonanie programu i sprawdzanie zachowania.
- Szczegóły
- Kategoria: Kurs LISP
W pewnym sensie ta część naszego kursu LISP może być najtrudniejsza, jest to rozdział dla początkujących. Chciałbym w nim omówić najbardziej podstawowe wyrażenia. dla osób niemających wcześniej styczności z programowaniem, opanowanie tej części jest konieczne dla zrozumienia sensu kolejnych części. Osoby, które poznały wcześniej jakieś języki programowania również znajdą tu coś dla siebie, czyli syntezę składni wyrażeń używanych w LISPie.
Podstawowe pojęcia LISPa:
- ; (średnik) - oznacza komentarz, to co jest w linii za znakiem komentarza nie będzie interpretowane przez program. Jeśli chcemy skomentować więcej niż jedną linię, możemy posłużyć się znakami ;| aby rozpocząć komentarz. Znacznik ten musi być zakończony znakami |;
- nil – oznacza nic, (dla znających C, to jest to to samo co null W lispie null znaczy coś innego, o tym później) . Można by zadać sobie pytanie po co komu nic czyli nil. A nil jest bardzo ważnym wyrażeniem, najważniejszą jego funkcją jest sprawdzenie warunków (o warunkach niżej). Nil jest wartością zmiennych, którym nie są przypisane wartości. Wiele funkcji zwraca nil jeśli nie zostało poprawnie wykonanych, część funkcji zwraca nil zawsze np. command. Jeśli natomiast analizujemy typy danych, to nil jest równoważne wartości false w zmiennej typu logicznego (boolean). Przeciwieństwem do nil jest t. t jest równoznaczne wartości true zmiennej typu logicznego.
- listy – są podstawowym elementem używanym w programach lispowych. Można nawet zaryzykować stwierdzenie, że wszystko w LISPie oparte jest na listach. Listą jest każde wyrażenie, nawet znane nam już
(command ”Line” P1 P2 ””)
- Szczegóły
- Kategoria: Kurs LISP
Nawet najprostsze rzeczy można skomplikować, tak też jest w LISPie. Prostą kreskę można narysować na trzy sposoby, każdy z nich ma swoje wady, niektóre mają nawet zalety. A sposoby są następujące:
- Używając funkcji command
- AutoLISP
- VisualLISP
COMMAND
Używanie funkcji command jest najprostszym sposobem tworzenia obiektów. Nazwę funcji wpisujemy command, następnie nazwę polecenia ZWCADa np. "_LINE" a dalej parametry typowe dla wywołanego polecenia ZWCADa, w przykładzie linii, jako kolejne parametry wpisujemy współrzędne punktów jako listy, żeby zakończyć polecenie konieczne jest dodanie na końcu pustego tekstu co będzie równoznaczne z naciśnięciem [ENTER] czyli zakończeniem działania funkcji.
W podobny sposób możemy utworzyć np. warstwę
Na przykładzie tym zobaczyć możemy, że command może zawierać całą sekwencję czynności, tutaj wywołane jest polecenie -layer, a kolejne wywoływane opcje powodują:
"n" - utworzenie nowej warstwy, po czym wpisujemy nazwę naszej nowej warstwy
"c" - kolor warstwy, której nazwę podajemy dalej
"s" - ustawia jako aktualną warstwę, której nazwę podajemy po opcji s
"" - konieczne jest jeszcze tylko zamknięcie polecenia, i nasza warstwa jest utworzona i ustawiona jako aktualna
Jak już wspomniałem, każde rozwiązanie ma swoje wady i zalety, wśród zalet tworzenia elementów przez command wyróżnić należy prostotę tego rozwiązania. Jeśli znamy polecenia ZWCADa, nie ma problemu, z tworzeniem funkcji automatyzującej rysowanie.
Wadą tego rozwiązania jest brak kontroli nad tym co się dzieje w czasie wykonywania skryptu. Command zawsze zwraca nil, niezależnie od tego, czy uda się poprawnie wykonać polecenie, czy nie. Dodatkowo, w historii poleceń wyświetlane są wszystkie polecenia, które się wykonuje, co w pewnym sensie ujawnia strukturę naszego programu, a to prowokuje do dłubania w naszym kodzie osoby, które niekoniecznie powinny to robić.
Czytaj więcej: Kurs LISP część 3 - Tworzenie i modyfikacja obiektów
- Szczegóły
- Kategoria: Kurs LISP
Instrukcje warunkowe
if
If to podstawowa instrukcja warunkowa. Służy do podejmowania decyzji np. wykonywania kodu po zaistnieniu określonych warunków. Jej konstrukcja jest następująca
(polecenie1)
(polecenie2)
)
Jeśli warunek jest spełniony wykonywane jest polecenie1. Jeśli natomiast warunek nie jest spełniony, wykonywane jest polecenie2 Więcej o samych warunkach na końcu tej części
(if (> SelDist 10)
(progn
(print "Wartość jest większa niż progowa")
(setq OutVal SelDist )
)
(progn
(print "Wskazałeś wartość mniejszą nież progowa")
(setq OutVal 0)
)
)
(print OutVal)
Czytaj więcej: Kurs LISP część 4 - Instrukcje warunkowe i pętle
- Szczegóły
- Kategoria: Kurs LISP
Wskaż punkt: getpoint, getcorner
(getpoint [Punkt] [Wiadomość])
(getcorner [Punkt] [Wiadomość])
Funkcja getpoint pozwala użytkownikowi na wskazanie punktu. Może on być podany klikając myszką w punkt, lub wpisując na klawiaturze współrzędne.
Istnieje też możliwość, że wyświetlona będzie dodatkowo pomocnicza linia łącząca inny punkt z aktualnym położeniem myszki.
Ostatni parametr to podpowiedź. Jest ona wyświetlana w linii poleceń i pod wskaźnikiem myszki jeśli włączona jest opcja [DYN]
Przykłady:
getcorner Jest to funkcja podobna do getpoint z tą różnicą, że jako linię pomocniczą nie rysuje linii od punktu początkowego do wskaźnika myszki, a prostokąt, gdzie punkty początkowy i wskaźnik myszki są narożnikami tymczasowego prostokąta.
Podaj liczbę - getreal, getint, getdist
(getreal [Wiadomość])
(getint [Wiadomość])
(getdist [Wiadomość])
Czytaj więcej: Kurs LISP część 5 - Interakcja z użytkownikiem, zbiory wskazań
- Szczegóły
- Kategoria: Kurs LISP
Przykład 1
Koniec tego teoretyzowania :-). W tej "lekcji" zrobimy coś praktycznego. Przykład, którym się posłużę, będzie prosił użytkownika o wskazanie punktu, a następnie w miejscu wskazanym wstawiony zostanie krzyżyk opisujący współrzędne, X i Y.

Kod rysujący taki znaczek wyglądałby następująco:
- Szczegóły
- Kategoria: Kurs LISP
Okienka dialogowe
W programach, nawet najprostszych nakładkach potrzebne są okienka dialogowe. W LISP okienka dialogowe można tworzyć za pośrednictwem mechanizmów DCL. DCL pozwala na tworzenie jedynie bardzo prostych okienek. Możliwe jest użycie pól tekstowych, przycisków, list, opcji, suwaków i tekstów. Wszystkie są szczegółowo opisane w helpie, więc nie będę się tu skupiał nad dokładnym opisaniem każdego elementu okienka (czasem można się spotkać z określeniem, że są to "wycinki", ja może zostanę przy określeniu "elementy" albo "kontrolki"). Chciałbym opisać zasadę działania okienek, jak zacząć pracę z nimi, kilka interesujących możliwości, które nie są oczywiste przy pierwszym spotkaniu z DCL. W poszukiwaniu szczegółów zapraszam do lektury helpa lub dyskusji na forum.
Opinie na temat DCL są ogólnie podzielone. Wielu twórców nakładek ma złe zdanie na temat DCL, ja też się ku temu zdaniu przychylam. DCL ma wiele ograniczeń, które powodują, że jeśli mam do stworzenia nakładkę z okienkami, wybieram VBA.
Kilka właściwości, które powodują, że DCL nie jest zbyt poręczy w użyciu:
- Trudności w ustawieniu kontrolek w okienku
- Brak możliwości tworzenia okienek niemodalnych
- Brak możliwości dodawania innych kontrolek
- Brak obiektowości elementów
- Brak możliwości zmian dynamicznych (w czasie działania programu])
Istnieją środowiska pozwalające na rozszerzenie możliwości DCL, jest to OpenDCL i ObjectDCL. Dają one o wiele większe możliwości, jak np.: Tworzenie okienek niemodalnych, Okienka podobne do okna właściwości, Dodatkowe konktolki jak np. zakładki, kalendarz, kontrolki obiektowe, podgląd bloków i inne. Ten kurs ma być jednak poświęcony podstawom LISP, a ja nie znam tych rozszerzeń na tyle, żeby móc doradzać którekolwiek z nich, więc nie będę się więcej wgłębiał w dodatkowe DCLe.