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.

  © Stefan Lagotzki 2001