Einstieg in AutoLISP
Die ersten Schritte mit AutoLISP werden wir auf dem Gebiet der Mathematik gehen.
Dabei lernen Sie die Syntax besser kennen und können die Ergebnisse relativ gut
nachvollziehen. AutoLISP-Programme bestehen (wie alle anderen Programme) aus
Folgen von Ausdrücken. Im folgenden werden die Grundform des Funktionsaufrufs
und Beispiele dargestellt:
(function Argument1 Argument2 ...)
(alert "Hello World!")
(+ 10 50)
(sin (/ pi 2))
Kommentar: Jeder Ausdruck ist eine Liste, die mit einer öffnenden Klammer
beginnt und mit einer schließenden Klammer endet. Später werden wir Ausdrücke
kennenlernen, die in mehreren Ebenen geschachtelt sind (drittes Beispiel !).
Der Funktionsname ist das erste Element in der Liste. AutoLISP verwendet die
umgekehrte polnische Notation (oder auch Präfix-Notation), um mathematische
Operationen auszuführen. Dabei wird immer zuerst der Operator geschrieben, dann
folgen die Argumente.
Die Argumente lauten im ersten Beispiel "Hallo World" und
im zweiten Beispiel 10 und 50. Die meisten AutoLISP-Funktionen haben mehrere Argumente, es gibt aber auch eine Reihe von Funktionen,
die ohne Argumente arbeiten.
Für die ersten Beispiele benötigen wir nur AutoCAD und wir geben alle Ausdrücke
über die Kommandozeile ein. Unter AutoCAD 14/2000 hat man es dabei sehr einfach,
weil man jeweils die vorangegangenen Eingaben mit der Pfeiltaste (wie früher mit DOSKEY)
aufrufen kann. Dann kann man die Eingabe in der Kommandozeile gegebenenfalls
leicht modifizieren.
Geben Sie das Beispiel: (+ 10 50) bitte in AutoCAD auf der Kommandozeile
ein. Als Rückgabewert erhalten Sie sofort das richtige Ergebnis. Nun sollen die
Ergebnisse aber meist einer Variablen zugewiesen und weiterverwendet werden.
Das geschieht über die Zuweisung mit setq . Die Anweisung
(setq k (+ 10 50))
weist der Variablen k das Ergebnis der Addition zu. Auf das Zwischenergebnis k
kann man bereits in der nächsten Zeile Bezug nehmen :
(setq m (* k 3)).
AutoCAD gibt auch hier das zuletzt berechnete Ergebnis zurück.
Später kann man
mit dem vorangestellten Ausrufungszeichen den Wert von k oder m erhalten. Probieren
Sie bitte die Anweisungen !k und !m, sie sollten die oben berechneten Ergebnisse
zurückgeben, solange die Variablen nicht mit anderen Werten überschrieben wurden.
Im folgenden werden also zunächst die Grundrechenarten in AutoLISP beschrieben.
Damit die Beschreibungen möglichst allgemeingültig sind, wird immer angenommen,
daß das Ergebnis weiterverwendet werden soll. An der Stelle von Summe, Differenz
etc. steht dann in Ihrem Programm eine Variable.
AutoCAD-Befehle in AutoLISP
Eine der Hauptaufgaben für AutoLISP ist das Konstruieren von geometrischen Objekten
in AutoCAD.
Bevor man jedoch AutoCAD-Befehle in AutoLISP anwenden kann, benötigt man Zugriff auf
AutoCAD-Punkte. Diese sind als Listen definiert. Eine Liste kann man sehr einfach mit der Funktion
(list x y z)
definieren. Punkte sollten immer als Listen aus (x y z) definiert sein, da AutoCAD in bestimmten Fällen die
z-Koordinate benötigt. Testen Sie auf der Kommandozeile folgende Eingaben (hier sind auch die Rückgaben
mit dargestellt):
Befehl: (setq P1 (list 0 0 0))
(0 0 0)
Befehl: (setq P2 (list 100 100 0))
(100 100 0)
Befehl: (command "_line" P1 P2 "")
_line Von Punkt:
Nach Punkt:
Nach Punkt:
Befehl: nil
Die Funktion soll mit Hilfe des AutoCAD-Kommandos _line eine diagonale Linie zwischen den beiden Punkten P1 und P2 zeichnen und dann
den Linienzug beenden. Für das Beenden sorgt die leere Zeichenkette "" (anstelle der Leer- oder Enter-Taste)
Zum nächsten Beispiel: Die Punkte P1 und P2 haben ihre Werte behalten. Sie wurden nur der Vollständigkeit
halber noch einmal notiert. Definieren Sie bitte die Punkte P3 und P4 neu. Der Befehl _pline
(Polylinie) zeichnet dann ein Parallelogramm aus diesen vier Punkten. Es wird durch die
Option _close geschlossen.
Befehl: (setq P1 (list 0 0 0))
(0 0 0)
Befehl: (setq P2 (list 100 100 0))
(100 100 0)
Befehl: (setq P3 (list 0 100 0))
(0 100 0)
Befehl: (setq P4 (list -100 0 0))
(-100 0 0)
Befehl: (command "_pline" P1 P2 P3 P4 "_close")
Wenn diese Polylinie noch zu einem Festkörper extrudiert werden soll, wenden Sie
den Befehl _extrude an. Im folgenden Beispiel wird dieser Befehl einfach mit dem
letzten gezeichneten Element (also dem Parallelogramm) aufgerufen:
Befehl: (command "_extrude" "_last" "" 20 0)
_extrude
Objekte wählen: _last 1 gefunden
Objekte wählen:
Pfad/<Extrusionshöhe>: 20
Extrusions-Verjüngungswinkel <0>: 0
Der Festkörper sollte mit der ISO-Ansicht Süd-Ost oder mit Hilfe der Orbit-Funktion gut erkennbar sein.