AutoLISP
AutoLISP
Problemowo Zorientowany
Problemowo Zorientowany
Dialekt języka LISP
Dialekt języka LISP
Komputerowe Wspomaganie
Komputerowe Wspomaganie
Projektowania
Projektowania
AutoLISP
AutoLISP
Zmienne, Stałe
Zmienne, Stałe
typ
INT
:
liczba całkowita
typ
REAL
:
liczba rzeczywista
typ
STR
:
łańcuch alfanumeryczny
typ
LIST
:
lista dynamiczna
typ
FILE
:
deskryptor pliku dyskowego
typ SYM:
identyfikator zmiennej, funkcji
typ SUBR:
deskryptor funkcji predefiniowanej
typ PICKSET:
zbiór selekcji
typ ENAME:
symboliczna nazwa obiektu
stała
T
:
prawda
stała
NIL
:
fałsz lub wskazanie puste
stała
PI
:
3.1415926
Instrukcja
(
type
x)
określa typ zmiennej
lub stałej x
Średnik:
znacznik komentarza
Średnik:
znacznik komentarza
Cudzysłów:
konstruktor łańcucha
Cudzysłów:
konstruktor łańcucha
Apostrof:
skrót funkcji
quote
quote
Apostrof:
skrót funkcji quote
quote
AutoLISP
AutoLISP
Znaki
Znaki
zastrzeżone
zastrzeżone
(
(
)
)
.
.
‘
‘
’’
’’
;
;
!
!
\
\
(
(
)
)
.
.
‘
‘
’’
’’
;
;
!
!
\
\
Nawiasy okrągłe:
konstruktor listy
Nawiasy okrągłe:
konstruktor listy
Kropka: kropka dziesiętna
lub znacznik pary kropkowej
Kropka: kropka dziesiętna
lub znacznik pary kropkowej
Wykrzyknik:
skrót funkcji
eval
eval
Wykrzyknik:
skrót funkcji eval
eval
Backslash:
znaki sterujące (031) np.
\n - przejście do nowej linii
\\ - właściwy backslash
Backslash:
znaki sterujące (031) np.
\n - przejście do nowej linii
\\ - właściwy backslash
AutoLISP
AutoLISP
Operatory
Operatory
Relacji
Relacji
Badanie równości:
Badanie równości:
(
=
arg1 arg2) (
equal
arg1 arg2)
Badanie listy:
Badanie listy:
(
atom
arg)
(
listp
arg)
Badanie liczb:
Badanie liczb:
(
numberp
arg)
(
minusp
arg)
(
zerop
arg)
Badanie wskazania:
Badanie wskazania:
(
null
arg)
Badanie nierówności:
Badanie nierówności:
(
>
arg1 arg2) (
>=
arg1 arg2)
(
/=
arg1 arg2) (
not
(
=
arg1 arg2))
(
<
arg1 arg2) (
<=
arg1 arg2)
AutoLISP
AutoLISP
Funkcje Matematyczne
Funkcje Matematyczne
Funkcje Trygonometryczne:
Funkcje Trygonometryczne:
(
sin
x) (
cos
x) -
x w radianach
(
atan
x [y] )
Inne Funkcje:
Inne Funkcje:
(
max
x y z ...) (
min
x y z ..)
(
abs
x)
- wartość bezwzględna
(
rem
x y)
Funkcje Wykładnicze:
Funkcje Wykładnicze:
(
exp
x)
- e
x
(
expt
x y)
- x
y
(
sqrt
x)
- pierwiastek kwadratowy
(
log
x)
- logarytm naturalny
Reszta z dzielenia
argumentów typu
całkowitego
Reszta z dzielenia
argumentów typu
całkowitego
Maksymalna lub
minimalna
wartość z listy
argumentów
Maksymalna lub
minimalna
wartość z listy
argumentów
Arcus tangens argumentu
x
Jeżeli występuje
opcjonalny
argument y to funkcja
oblicza
arcus ilorazu x / y.
Wynik w radianach
Arcus tangens argumentu
x
Jeżeli występuje
opcjonalny
argument y to funkcja
oblicza
arcus ilorazu x / y.
Wynik w radianach
(setq x 5)
Głowa listy:
funkcja
predefiniowana
Ogon listy:
para argumentów:
identyfikator -
wartość
Pary: Identyfikator Zmiennej - Wartość
Instrukcja Przypisania:
(
setq
x 5 y 1.2 z ’’tekst”)
AutoLISP
AutoLISP
Instrukcja
Instrukcja
przypisania
przypisania
AutoLISP
AutoLISP
Konwersja
Konwersja
Typ całkowityTyp rzeczywisty:
Typ całkowityTyp rzeczywisty:
(
float
arg)
: (
float
12) 12.00
(
fix
arg)
: (
fix
12.45) 12
Typ łańcuchowyTyp numeryczny:
Typ łańcuchowyTyp numeryczny:
(
atoi
tekst)
: (
atoi
’’12.4”) 12
(
atof
tekst)
: (
atof
’’12.4”) 12.40
Typ łańcuchowyTyp dowolny:
Typ łańcuchowyTyp dowolny:
(
read
tekst)
(read ’’12.5”) 12.5
(read ’’(1.5 2)”) (1.5
2) (read ’’Jan Nowak”)
JAN
(read ’’12.5”) 12.5
(read ’’(1.5 2)”) (1.5
2) (read ’’Jan Nowak”)
JAN
(
rtos
liczba [format [dokładność]]
[format [dokładność]]
)
(
itoa
liczba) : (
itoa
12) ’’12’’
Typ numerycznyTyp łańcuchowy:
Typ numerycznyTyp łańcuchowy:
format (opcjonalny):
1 - wykładniczy
2 - dziesiętny
3, 4 - calowy
dokładność (opcjonalna)
format (opcjonalny):
1 - wykładniczy
2 - dziesiętny
3, 4 - calowy
dokładność (opcjonalna)
AutoLISP
AutoLISP
Typ Łańcuchowy
Typ Łańcuchowy
(
strcase
tekst [war] )
(
strlen
tekst)
- długość tekstu
(
substr
tekst start [ile] )
(
strcat
tekst1 tekst2 ..)
Zamienia małe litery na duże
lub odwrotnie. Jeżeli
opcjonalny argument war nie
występuje lub war=Nil
następuje zamiana liter
małych na duże. Jeżeli war=T
następuje zamiana liter
dużych na małe
Zamienia małe litery na duże
lub odwrotnie. Jeżeli
opcjonalny argument war nie
występuje lub war=Nil
następuje zamiana liter
małych na duże. Jeżeli war=T
następuje zamiana liter
dużych na małe
Tworzy złożenie argumentów
tekstowych zawartych w
liście argumentów (suma).
(strcat „Auto” „LISP”)
„AutoLISP”
Tworzy złożenie argumentów
tekstowych zawartych w
liście argumentów (suma).
(strcat „Auto” „LISP”)
„AutoLISP”
Tworzy łańcuch wycinając z argumentu
tekst poczynając od znaku start, określoną
przez opcjonalny argument ile, liczbę
znaków.
Jeżeli ile nie występuje wycina do końca
tekstu.
Tworzy łańcuch wycinając z argumentu
tekst poczynając od znaku start, określoną
przez opcjonalny argument ile, liczbę
znaków.
Jeżeli ile nie występuje wycina do końca
tekstu.
(if warunek (instrukcja1)
(instrukcja2))
AutoLISP
AutoLISP
Instrukcja
Instrukcja
Warunkowa
Warunkowa
(
if
warunek (
Grupa Instrukcji 1
Grupa Instrukcji 1
)(
Grupa
Grupa
Instrukcji 2
Instrukcji 2
))
?
?
?
?
(
progn
(instrukcja1)
(instrukcja2)...)
(if (/= x 0)
(progn
(setq a (/ a x))
(setq lista (append lista (list a)))
)
(setq lista (append lista (list x)))
)
(if (/= x 0)
(progn
(setq a (/ a x))
(setq lista (append lista (list a)))
)
(setq lista (append lista (list x)))
)
Grupa Instrukcji
Grupa Instrukcji
Grupa Instrukcji
Grupa Instrukcji
(while warunek (
Blok Instrukcji
Blok Instrukcji
))
AutoLISP
AutoLISP
Pętle
Pętle
(
repeat
licznik
(
Blok Instrukcji
Blok Instrukcji
)
)
Licznik jest stałą lub zmienną
typu całkowitego określającą
liczbę powtórzeń Bloku
Instrukcji.
Podczas wykonywania pętli
repeat niejawna zmienna
sterująca jest inkrementowana
(powiększana o 1) i
porównywana z wartością
licznika
Licznik jest stałą lub zmienną
typu całkowitego określającą
liczbę powtórzeń Bloku
Instrukcji.
Podczas wykonywania pętli
repeat
niejawna zmienna
sterująca jest inkrementowana
(powiększana o 1) i
porównywana z wartością
licznika
(setq x 0)
(repeat 5
(setq x (+ x 1))
)
(repeat 0
(setq x (+ x 1))
)
(setq x 0)
(repeat 5
(setq x (+ x 1))
)
(repeat 0
(setq x (+ x 1))
)
X = 5
X = 5
X = 5
X = 5
(car lista) (cdr
lista)
AutoLISP
AutoLISP
Dostęp do Listy
Dostęp do Listy
(
nth
nr
lista)
(
last
lista)
(
member
x
lista)
(
subst
new old
lista)
(nth 0 ‘(a b c)) A
(nth 0 ‘(a b c)) A
(
length
lista)
(last ‘(a b c)) C
(last ‘(a b c)) C
(member ‘b ‘(a b c)) (B
C)
(member ‘b ‘(a b c)) (B
C)
(subst ‘x ‘a ‘(a (a b))
(X (X
B))
(subst ‘x ‘a ‘(a (a b))
(X (X
B))
(length ‘(a b c)) 3
(length ‘(a b c)) 3
Elementy listy numerowane są od 0. Kolejno: 0:A, 1:B, 2:C. Długość: 3
Elementy listy numerowane są od 0. Kolejno: 0:A, 1:B, 2:C. Długość: 3
AutoLISP
AutoLISP
Operacje na Listach
Operacje na Listach
(
revers
lista)
(
apply
fun
lista)
(
foreach
x lista (
Blok
Blok
Instrukcji
Instrukcji
))
(revers ‘(a b c)) (C B A)
(revers ‘(a b c)) (C B A)
Stosuje operator lub
funkcję cytowaną przez
argument fun do
wszystkich elementów
listy podanej przez
argument lista.
Stosuje operator lub
funkcję cytowaną przez
argument fun do
wszystkich elementów
listy podanej przez
argument lista.
Swoista pętla, której krotność określa długość
listy. Kolejne elementy listy przypisywane są
w sposób niejawny zmiennej x przetwarzanej
następnie w bloku instrukcji.
Swoista pętla, której krotność określa długość
listy. Kolejne elementy listy przypisywane są
w sposób niejawny zmiennej x przetwarzanej
następnie w bloku instrukcji.
(apply ‘max ‘(1
5)) 5
(apply ‘+ ‘(1 5
4)) 10
(apply ‘max ‘(1
5)) 5
(apply ‘+ ‘(1 5
4)) 10
(foreach e ‘((1 1)(1 5)(2 4))
(setq xx (append xx (list (car
e))))
(setq yy (append yy (cdr e)))
)
(foreach e ‘((1 1)(1 5)(2 4))
(setq xx (append xx (list (car
e))))
(setq yy (append yy (cdr e)))
)
AutoLISP
AutoLISP
Funkcje
Funkcje
Geometryczne
Geometryczne
(
angle
p1 p2)
Oblicza kąt pomiędzy wektorem p1-p2
a dodatnią półosią X układu
współrzędnych
Oblicza kąt pomiędzy wektorem p1-p2
a dodatnią półosią X układu
współrzędnych
(
distance
p1 p2)
(
inters
p1 p2 p3 p4
[tryb])
(
polar
p0 kąt
dystans)
Oblicza odległość pomiędzy punktami
p1 p2
Oblicza odległość pomiędzy punktami
p1 p2
Oblicza współrzędne punktu leżącego
w odległości dystans od punktu p0 pod
kątem kąt [rad] od półosi X.
Oblicza współrzędne punktu leżącego
w odległości dystans od punktu p0 pod
kątem kąt [rad] od półosi X.
Oblicza współrzędne punktu przecięcia odcinków wyznaczonych
parami punktów p1-p2 i p3-p4.
Jeżeli opcjonalny argument tryb występuje i ma wartość T odcinki
muszą się „fizycznie” przecinać. W przeciwnym razie punkty p1-p2
oraz p3-p4 definiują dwie linie, których punkt przecięcia jest
wynikiem funkcji.
Oblicza współrzędne punktu przecięcia odcinków wyznaczonych
parami punktów p1-p2 i p3-p4.
Jeżeli opcjonalny argument tryb występuje i ma wartość T odcinki
muszą się „fizycznie” przecinać. W przeciwnym razie punkty p1-p2
oraz p3-p4 definiują dwie linie, których punkt przecięcia jest
wynikiem funkcji.
Uwaga: punkt w przestrzeni
reprezentowany jest przez
listę zawierającą
współrzędne x,y,z:
(x y z)
Uwaga: punkt w przestrzeni
reprezentowany jest przez
listę zawierającą
współrzędne x,y,z:
(x y z)
12.45
2350
’’Jan
Sebastian’’
(1 5 2.5)
x
12.45
2350
’’Jan
Sebastian’’
(1 5 2.5)
x
Plik:test.dta
Plik:test.dta
AutoLISP
AutoLISP
Plik Dyskowy
Plik Dyskowy
AutoLISP przetwarza jedynie „czyste” pliki tekstowe
tzn. pliki zawierające jedynie kody ASCII
(
open
plik
tryb
)
Argument plik : ścieżka dostępu do pliku. Tekst
zawierający napęd, katalogi, nazwę i
rozszerzenie.
„C:\\KAT\\test.dta” lub „C:/Kat/Test.dta”
Argument tryb : „r”: czytanie (read) „w”: zapis
(write) „a” : dopisanie (append)
Wynik: deskryptor pliku lub NIL.
Argument plik : ścieżka dostępu do pliku. Tekst
zawierający napęd, katalogi, nazwę i
rozszerzenie.
„C:\\KAT\\test.dta” lub „C:/Kat/Test.dta”
Argument tryb : „r”: czytanie (read) „w”: zapis
(write) „a” : dopisanie (append)
Wynik: deskryptor pliku lub NIL.
(
read-line
deskryptor
)
Argument deskryptor : wynik funkcji open
Odczytanie linii pliku w położeniu znacznika
pliku.
Wynik: tekst linii pliku oraz przesunięcie
znacznika pliku do kolejnej linii.
Argument deskryptor : wynik funkcji
open
Odczytanie linii pliku w położeniu znacznika
pliku.
Wynik: tekst linii pliku oraz przesunięcie
znacznika pliku do kolejnej linii.
(
close
deskryptor
)
koniec pliku - NIL
(setq zb (open „test.dta”
„r”))
(setq tx (read-line zb))
(while (not (null tx))
(setq xx (append xx (list
tx)))
(setq tx (read-line zb))
)
(close zb)
(setq zb (open „test.dta”
„r”))
(setq tx (read-line zb))
(while (not (null tx))
(setq xx (append xx (list
tx)))
(setq tx (read-line zb))
)
(close zb)
AutoLISP
AutoLISP
Funkcje współpracy z
Funkcje współpracy z
AutoCAD
AutoCAD
(
command
polecenieAC
lista_argumentów
)
Funkcja realizuje każde polecenie dostępne w środowisku AutoCAD.
• Argument polecenieAC jest typu łańcuchowego i zawiera nazwę
polecenia w języku angielskim. Kompatybilność w wersjach
narodowych zapewnia użycie znaku podkreślenia np. ”_LINE”.
• Argument lista_argumentów jest sekwencją danych wymaganych
przez pole- cenie AC. Wymaga się poprawnej kolejności oraz typu
danych w liście. Deklaracja subopcji jest typu łańcuchowego.
Funkcja realizuje każde polecenie dostępne w środowisku AutoCAD.
• Argument polecenieAC jest typu łańcuchowego i zawiera nazwę
polecenia w języku angielskim. Kompatybilność w wersjach
narodowych zapewnia użycie znaku podkreślenia np. ”_LINE”.
• Argument lista_argumentów jest sekwencją danych wymaganych
przez pole- cenie AC. Wymaga się poprawnej kolejności oraz typu
danych w liście. Deklaracja subopcji jest typu łańcuchowego.
command: _line
command: From point
command: To point
command: To point
command:
Polecenia w AutoCAD:
Polecenie
Polecenie
Punkty
Punkty
Null Input
Null Input
(command „_line” p1 p2 p3
””)
(command „_circle” p1 ”_d”
20)
(command „_line” p1 p2 p3
””)
(command „_circle” p1 ”_d”
20)
Uwaga: punkt w przestrzeni
reprezentowany jest przez listę
zawierającą współrzędne x,y,z:
(x y z)
Uwaga: punkt w przestrzeni
reprezentowany jest przez listę
zawierającą współrzędne x,y,z:
(x y z)
AutoLISP
AutoLISP
Funkcje współpracy z
Funkcje współpracy z
AutoCAD
AutoCAD
(
getvar
zmienna_systemowa
)
(
setvar
zmienna_systemowa
wartość
)
; ...
(setq old (getvar ”osmode”))
(setvar ”osmode” 0)
(command ”_circle” p1 20)
(setvar ”osmode” old)
; ...
; ...
(setq old (getvar ”osmode”))
(setvar ”osmode” 0)
(command ”_circle” p1 20)
(setvar ”osmode” old)
; ...
Funkcja podaje aktualną wartość zmiennej środowiska AutoCAD.
• Argument zmienna_systemowa jest typu łańcuchowego i zawiera
nazwę zmiennej przechowywanej w bazie danych AutoCAD.
Funkcja podaje aktualną wartość zmiennej środowiska AutoCAD.
• Argument zmienna_systemowa jest typu łańcuchowego i zawiera
nazwę zmiennej przechowywanej w bazie danych AutoCAD.
Funkcja zmienia aktualną wartość zmiennej środowiska AutoCAD.
• Argument zmienna_systemowa jest typu łańcuchowego
• Argument wartość musi być odpowiedniego typu
Uwaga: niektóre zmienne są tylko do odczytu (read only)
Funkcja zmienia aktualną wartość zmiennej środowiska AutoCAD.
• Argument zmienna_systemowa jest typu łańcuchowego
• Argument wartość musi być odpowiedniego typu
Uwaga: niektóre zmienne są tylko do odczytu (read only)
Zmienna ”osmode”
przechowuje ustawienia
chwytów obiektu zrealizowane
przez użytkownika polecaniem
OSNAP
Zmienna ”osmode”
przechowuje ustawienia
chwytów obiektu zrealizowane
przez użytkownika polecaniem
OSNAP
AutoLISP
AutoLISP
Funkcje wprowadzania
Funkcje wprowadzania
danych
danych
(
getint
[komunikat]
)
(
getreal
[komunikat]
)
(
getpoint
[[pkt] komunikat]
)
(
getorient
[[pkt] komunikat])
- wprowadzenie kąta w lokalnym
układzie
(
getangle
[[pkt] komunikat])
- wprowadzenie
kąta
(
getcorner
pkt [komunikat])
- wprowadzenie punktu
(
getdist
[[pkt] komunikat])
- wprowadzenie
odległości
(
getstring
[[war] komunikat])
- wprowadzenie
łańcucha
(
getkword
[komunikat])
- wybór wg. listy
warunków
Liczba całkowita
Liczba całkowita
Liczba rzeczywista
Liczba rzeczywista
Punkt: lista (x y z)
Punkt: lista (x y z)
AutoLISP
AutoLISP
Kontrola danych
Kontrola danych
(
initget
kod [tekst]
)
Kod
Ograniczenia
1
Nie pozwala na „Null Input”
2
Nie pozwala wprowadzić 0 (zero)
4
Nie pozwala wprowadzić wartości<0
8
Ignoruje granice rysunku
16
Punkt 3D
32
Linia wodzące kursora - przerywana
64
Ignoruje wsp. Z dla punktu 3D
Funkcja ogranicza zakres
danych wprowadzanych za
pomocą funkcji typu GET...
Zasięg funkcji: do pierwszego
wywołania funkcji typu GET...
Argument kod jest sumą kodów
poszczególnych ograniczeń.
Argument tekst stosuje się do
funkcji GetKWord.
Funkcja ogranicza zakres
danych wprowadzanych za
pomocą funkcji typu
GET...
Zasięg funkcji: do pierwszego
wywołania funkcji typu
GET...
Argument kod jest sumą kodów
poszczególnych ograniczeń.
Argument tekst stosuje się do
funkcji
GetKWord
.
;...
(initget 7)
(setq r (getreal ”Podaj
promień:”))
(initget 1)
(setq p1 (getpoint ”Podaj
punkt:”))
(command ”_circle” p1 r)
; ...
;...
(initget 7)
(setq r (getreal ”Podaj
promień:”))
(initget 1)
(setq p1 (getpoint ”Podaj
punkt:”))
(command ”_circle” p1 r)
; ...
Wartość wprowadzana przez
GET...
(/= r NIL), (/= r 0), (> r 0)
Wartość wprowadzana przez
GET...
(/= r NIL), (/= r 0), (> r 0)
Wartość wprowadzana przez
GET...
(/= p1 NIL)
Uwaga: p1(x y z)
Wartość wprowadzana przez
GET...
(/= p1 NIL)
Uwaga: p1(x y z)
AutoLISP
AutoLISP
Kod źródłowy
Kod źródłowy
(
load
plik)
(defun XX ()
(blok instrukcj
)
(defun YY ()
(blok instruk
)
(defun ZZ ()
(setq p1 (getpoint ”Podaj
punkt:”))
(command ”_circle” p1 r)
; ...
(defun XX ()
(blok instrukcj
)
(defun YY ()
(blok instruk
)
(defun ZZ ()
(setq p1 (getpoint ”Podaj
punkt:”))
(command ”_circle” p1 r)
; ...
Kod źródłowy jest tekstowym plikiem
dyskowym. Domyślnym rozszerzeniem nazwy
jest *.lsp
Kod źródłowy zawiera dowolną liczbę definicji
funkcji użytkownika.
Kod źródłowy utworzyć można za pomocą
dowolnego edytora tekstu, pod warunkiem, że
jest to ”czysty tekst” tzn. zawiera jedynie kody
ASCII.
Kod źródłowy jest tekstowym plikiem
dyskowym. Domyślnym rozszerzeniem nazwy
jest *.lsp
Kod źródłowy zawiera dowolną liczbę definicji
funkcji użytkownika.
Kod źródłowy utworzyć można za pomocą
dowolnego edytora tekstu, pod warunkiem, że
jest to ”czysty tekst” tzn. zawiera jedynie kody
ASCII.
Funkcja ładuje kod źródłowy zawarty w pliku
dysko-wym dokonując kontroli składni
instrukcji zawartych w kodzie.
Argument plik typu łańcuchowego zawiera
pełną ścieżkę dostępu do pliku tzn. napęd,
katalog, nazwa.
Funkcja ładuje kod źródłowy zawarty w pliku
dysko-wym dokonując kontroli składni
instrukcji zawartych w kodzie.
Argument plik typu łańcuchowego zawiera
pełną ścieżkę dostępu do pliku tzn. napęd,
katalog, nazwa.
(load
”c:\\kat\\aplikacja”)
(load ”c:/kat/aplikacja”)
(load
”c:/kat/aplikacja.abc”)
(load ”aplikacja”)
(load
”c:\\kat\\aplikacja”)
(load ”c:/kat/aplikacja”)
(load
”c:/kat/aplikacja.abc”)
(load ”aplikacja”)