Przejdź do głównej treści

LISP - przegląd dostępnych artykułów:

LISP to język programowania, dzięki któremu można w prosty sposób dodać do programu CAD dodatkowe funkcjonalności. Dobrze napisany skrypt po dodaniu do ZWCADa rozszerzy jego funkcjonalność o nowe polecenia albo np. wykona szereg poleceń by użytkownik nie musiał za każdym razem powtarzać tych samych funkcji. 

Skrypt pozwala na szybcie opisanie arkuszy ich aktualnymi numerami. Wystarczy wstawić odpowiedni blok do każdego arkusza, a po wczytaniu skryptu LISP i użyciu odpowiedniego polecenia, wszystkie arkusze zostaną ponumerowane. Należy pobrać oba pliki, nastepnie wypakować Numer Arkusza. Następnie możn…
Od ZWCADa 2020 dostępny jest nowy edytor LISPów oraz debugger, którego zadaniem jest sprawdzanie poprawności składni. Jest to świetne narzędzie do analizowania własnych skryptów Debugger jest dostępny z poziomu ZWCADa poprzez polecenia VLIDE oraz VLISP. Po uruchomieniu zostanie otwarty program Vis…
LISP Jest to popularny język programowania obsługiwany przez ZWCADa i pozwala na poszerzenie funkcjonalności programu o dodatkowe narzędzia. W swojej budowie jest bardzo podobny do AutoLISP, co umożliwia wykorzystywanie większości aplikacji napisanych właśnie w AutoLISP.
Pomimo, że język skryptowy LISP nie jest jeszcze w pełni funkcjonalny, dokonaliśmy małego wydajności silnika LISP w ZWCAD 2017. Utworzyliśmy prosty LISP, który w pętli wykonuje obliczenia trygonometryczne oraz z wyników tworzy listę.
Lispowa choinka przykładem użycia generatora liczb losowych w programie CAD. Dziś w przypływie entuzjazmu przedświątecznej atmosfery chciałbym przedstawić funkcję rysującą choinkę. Sama choinka nie jest oczywiście celem, ale na jej przykładzie można pokazać np losowanie liczb, tworzenie bloków, tw…
W ZWCAD w wersjach wcześniejszych niż ZWCAD+ 2014 funkcja pedit pozwalała na wskazanie okręgu i zamieniała go automatycznie na polilinię. W wersji 2014 programu CAD zaznaczenie okręgu nie jest możliwe, ograniczenie to zostało wprowadzone dla uzyskania zgodności z AutoCADem, gdzie w obecnej wersji d…
| Przykłady LISP
Użytkownik ZWCADa zasugerował nam, że przydatnym narzędziem w ZWCAD mogłaby być funkcja, która po zaznaczeniu elementów w rysunku, utworzy polilinię - prostokąt, obejmujący wszystkie te elementy. ZWCAD posiada LISPową funkcję, która pozwala na odczytanie wierzchołków przekątnej takiego prostokąta d…
Otrzymaliśmy zapytanie od klienta o możliwość wykonania skryptu, który rozbije projekt na wiele plików DXF, gdzie w każdym z nich będzie tylko jeden element z pliku źródłowego. Skrypt taki może być użyty np. do generowania ścieżek dla maszyn numerycznych. Skrypt może być interesującym przykładem wy…
Na naszym forum CAD pojawiło się zapytanie o funkcję opisującą współrzędną wskazanego punktu. Opracowałem taką funkcję i chciałbym się nią podzielić:
Przykład ten będzie kontynuacją poprzedniego, w którym przedstawiłem zliczanie elementów zaznaczonych w rysunku. Teraz takie dane wyświetlimy w oknie.
Zestawienie zaznaczonych elementów. W poniższym przykładzie przedstawię jak można zliczyć elementy zaznaczone w rysunku. Wygenerowana lista będzie zawierała nazwę typu obiektu oraz ilość elementów tego typu. Dla bloków oddzielne wpisy powstawną dla każdego typu bloku.
W tym przykładzie chciałbym pokazać jak można usprawnić ZWCADową funkcję przerwij w dwóch punktach. Domyślna funkcja ZWCADa prosi o wskazanie obiektu i punktu przerwania. Jako pierwszy punkt domyślnie jest przyjmowany punkt kliknięty przy wskazywaniu obiektu, jednak ten punkt nie uwzględnia pu…
Standardowe funkcje ZWCADA pozwalają na narysowanie okręgu stycznego do trzech obiektów. Wykorzystanie ich w LISP jest nieco skomplikowane, dodatkowo jeśli chcemy narysować okrąg styczny do linii 'wirtualnych' np zdefiniowanych w bloku konieczne jest opracowanie własnej funkcji definiującej okrąg w…
Poniższy przykład prezentuje jak podzielić listę na mniejsze listy o określonej długości.
 Tym skryptem mozna bardzo łatwo stworzyć kreskowanie dowolnego elementu.
Celem tego przykładu jest stworzenie funkcji ułatwiającej wstawianie rymiaru liniowego z dodatkowym symbolem średnicy. 
Okno do otwarcia i zapisu plików. LISP zawiera funkcję, proszącą użytkownika o wskazanie pliku. Funkcja ta to: (getfiled). Dzięki parametrom wywołania funkcji możemy określić, czy okno, które się otworzy, będzie prosiło Użytkownika o wskazanie pliku do otwarcia, czy do zapisu.
Przykład zmiany koloru wybranego elementu przez nadanie składowych RGB wpisanych przez użytkownika lub nadanie koloru o okreśonym indeksie.
| Przykłady LISP
Poniższy przykład zilustruje w jaki sposób można przyciąć bryłę oraz jak uzyskać przekrój z wybranej bryły (bez jej modyfikacji) Jeśli uruchomiona zostanie funkcja testowa: Przekroj, jedna bryła zostanie podzielona na dwie i dodatkowo utworzony zostanie przekrój płaszczyzną zdefiniowaną przez 3 pun…
Głównym tematem tego przykładu jest dodawanie punktów do polilinii. Być może nie jest to rozwiązanie kompleksowe pozwalające na dodawanie punktów do wszystkich polilinii, problematycze będzie np dodanie punktu do odcinków łukowych. Chciałbym raczej pokazać tutaj użycie kilku funkcji np: eval, comma…
Funkcja, którą prezentuje poniżej jest podobna do standardowej fukcji kopiującej, z tą różnicą, że obiekty pozostają w orginalnym położeniu i pozostają zaznaczone, dzięki czemu można wykonywać dowolne operacje jedynie na grupie obiektów nowo utworzonych, nie zmieniając orginałów.
Przykład pokazuje w jaki sposób można zmienić kolejność wyświetlania obiektów.  W przykładzie posłużymy się poleceniem _ai_draworder, które zmienia kolejność wyświetlania obiektów. 
| Przykłady LISP
ZWCAD 2012+ umożliwia tworzenie brył przez operacje na modelu obiektowym. W poprzednich wersjach tworzenie brył było dostępne jedynie przez używanie funkcji command, w poniższym przykładzie utworzymy bryłę ze wskazanego obiektu.
Ten skrypt pozwala łatwo sumować elementy na rysunku.
W tym przykładzie zajmiemy się kontrolowaniem sposobu wyświetlania obiektów w ZWCAD. Każdy utworzony obiekt w ZWCAD wyświetlany jest normalnie czyli zgodnie z jego właściwościami. Po wybraniu obiektu zostanie on podświetlony, czyli linia będzie wyświetlana jak przerywana, nawet kiedy właściwości ob…
Poniżej przedstawiam przykład procedury wykonującej drukowanie.  Drukowane bedzą wszystkie arkusze aktualnego rysunku. W ostatniej linii na stałe wpisane jest urządzenie drukujące. Może w ramach ćwiczeń ktoś dopisze procedurę wyboru drukarki spośród zainstalowanych w systemie.
| Przykłady LISP
W tym przykładzie chciałbym przedstawić w jaki sposób można obracać przestrzenią widoczną w arkuszu. Przykładowy program poprosi użytkownika o wskazanie pary punktów, a następnie wyrówna widok tak, by linia łącząca wskazane punkty była równoległa do krawędzi kartki.
Jedną z cech języka LISP jest odzielność przestrzeni pamięci dla zmiennych w różnych rysunkach. Przez to, jeśli ustawimy wartość zmiennej w jednym rysunku. A następnie Użytkownik zmieni aktualny rysunek, oddczytanie wartości tych zmiennych nie będzie możliwe.
| Przykłady LISP
Za pośrednictwem LISP w ZWCAD możliwe jest manipulowanie zmiennymi systemowymi ZWCADa a nawet samego systemu operacyjnego. Większość ustawień rysunku i całego środowiska ZWCAD można zmienić własnie przez zmienne systemowe.
Ten skrypt pozwala załadować warstwy do projektu z innego pliku.
Przykład prazy z oknami dialogowymi. W LISP okna dialogowe można tworzyć korzystając z mechanizmów DCL. Do wyświetlenie okna konieczne jest utworzenie dwóch plików. pierwszy z rozszerzeniem DCL zawiera strukturę okna. W drugim, czyli pliku LSP zdefiniowana jest cała obsługa okna.
Ta funkcja pozwala na łatwe przekształcenie prędkości obrotowej na prędkość liniową. Wystarczy uruchomić LISP a następnie podać wartości, dzięki czemu prędkość liniowa zostanie obliczona.
Dzięki temu narzędziu można w łatwy sposób opisywać wierzchołki obiektów albo dowolne punkty w projekcie.
Dzięki temu skryptowi można zapisać dowolne teksty z projektu do zewnętrznego pliku .txt.
Ten skrypt pozwala na przenoszenie obiektów po osi X, z zablokowaną współrzędną Y.
Ten skrypt pozwala na prostą edycje dowolnych bloków.
Ten skrypt pozwala na rysowanie linii o długości równiej długości zaznaczonego obiektu.
Kilka przykładów użycia funkcji obliczających punkty przecięcia linii i obiektów.
| Przykłady LISP
W tym przykładzie zajmiemy się bliżej przedstawieniem kilku podstawowych możliwości funkcji ssget, która pozala na pracę ze wskazaniami elementów. Mechanizm zbiorów wskazań służą łatwej manipulacji większą liczbą obiektów, pozwalają np. wybrać z rysunku elementy spełniające określone kryteria.
LISP ten pozwala na narysowanie kopii zaznaczonych elementów o określonym odstępie po obu stornach wybranych obiektów. 
Ten skrypt pozwala zmieniać właściwości obiektów na rysunku w wygodny sposób. Za pomocą poniższych komend można ustawiać takie rzeczy jak np. szerokośc i typ linii albo kolor.
Ten LISP pozwala na proste numerowanie wierszy w tekście. Taka numeracja jest wprowadzona do tekstu i może być równie łatwo edytowana.
| Kurs LISP
Od wersji 2020 w ZWCAD jest dostępny edytor LISP, jednak ten kurs powstał kilka lat przed jego wprowadzeniem. W tym kursie LISP wykorzystamy więc ogólnie dostępne narzędzia. Wystarczy nam zwykły podstawowy edytor tekstu np. Notatnik. Ja używam programu Notepad++ z kilku powodó…
Ten LISP pozwala na zaznaczenie pozostałych elementów rysunku za pomocą prostej funkcji. Cokolwiek jest zaznaczone w rysunku, po uruchomienie skryptu zostanie odznaczone, a każdy inny element zostanie zaznaczony.
Ten prosty skrypt pozwala na dokonanie pomiaru kątowego w środowisku 3D.
Ten skrypt pozwala na szybkie tworzenie bloków z dowolnych elementów na rysunku.
Ten skrypt pozwala na wstawienie do rysunku aktualnej godziny wraz z datą. 
Wyjątki to sytuacje gdzie zachowanie odbiega od przewidywanego przez programistę.
W przypadku, gdy chcemy narysować prostokąt lub równoległobok ale nierównoległy do osi układu współrzędnych musimy wykonać trzy operacje: narysować prostokąt, obrócić i rozciągnąć. Dzięki temu skryptowi proces ten staje się znacznie prostszy, wystarczy uruchomić LISP i podać 3 wierzchołki figury.
Ten LISP pozwala łatwo przenieść początek układu współrzędnych do nowego miejsca na rysunku.
Skrypt LISP posłuży do rysowaniu spirali Archimedesa Po wczytaniu skryptu do programu CAD należy wpisać polecenie Spirala ZWCAD narysuje spiralę składającą się z punktów. W przykładzie posłużymy się parametrami ustawionymi na stałe, oczywiście można je modyfikować i dodać możliwość określania pa…
W tym skrypcie LISP odczytamy stan warstw oraz przeniesiemy obiekty pomiędzy warstwami.
Program wpisuje zawartość pliku tekstowego do aktualnego rysunku DWG w programie CAD.
Rysowanie prostych elementów na przykładzie symbolu gwintu, wystarczy postępować według poniższej procedury:
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…
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.
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…
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
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  
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…
(getvar "zmienna" ) funkcja pozwala sprawdzić stan zmiennych systemowych
(setvar "zmienna" nowa_wartość) ustawia wartość zmiennej systemowej
Sprawdza czy zmienna ma wartość nil