Aus mir unerfindlichen Gründen verwenden nur wenige CAD-Anwender GeomCAL oder CADCAL, obwohl die Produktivität damit enorm gesteigert werden kann. Man spart sich damit jede Menge aufwendige Hilfskonstruktionen. Nur wenige Anwender wissen deshalb auch, dass man GeomCAL und CADCAL auch in Lisp verwenden kann, beispielsweise wie hier, um einen Punkt zu finden, der auf 1/3 der Verbindung zwischen zwei Punkten PT1 und PT2 liegt:
Code:
(cal "PLT(PT1,PT2,1/3)")
PLT ist eine in GeomCAL und CADCAL vordefinierte Funktion. Man kann das auch mathematisch ausführlicher so schreiben:
Code:
(cal "PT1+(PT2-PT1)/3")
In Worten: zum Punkt PT1 wird ein Drittel des Vektors von PT1 nach PT2 addiert.
Mit CADCAL und GeomCAL können also auch viele Lisp-Anwender mathematische Ausdrücke berechnen lassen, auch wenn sie von Mathematik eher wenig Ahnung haben. Das Fehlen von Mathematikkenntnissen dürfte einer der Gründe dafür sein, warum viele CAD-Anwender vor Lisp zurückschrecken. GeomCAL und CADCAL könnten das vielleicht ändern.
Ein kleines Problem dabei ist der Performanceverlust, der dadurch entsteht, dass jeder mathematische Ausdruck in einer (CAL <Ausdruck>) Funktion immer erst mal durch einen Parser laufen muss, der diesen Ausdruck in eine für Computer nutzbare Form übersetzt. Sowas wie "1+2" ist für den Computer eben erst mal nur eine sinnfreie Zeichenkette. Insbesondere wenn CAL-Aufrufe in Schleifen stehen und eventuell tausende Male aufgerufen werden, stellt sich doch ein spürbarer Performanceverlust ein.
Nun ist CADCAL anders als GeomCAL vollständig in Lisp geschrieben, und es übersetzt die in Zeichenketten stehenden mathematischen Ausdrücke erst mal in Lisp-Ausdrücke, die es dann auswertet. Und diese Übersetzungsfunktion CC-STR->LISP steht auch dem CADCAL Anwender zur Verfügung.
Mit dem Lisp-Aufruf
Code:
(CC-STR->LISP "PLT(PT1,PT2,1.0/3.0)")
erhält man dann den Funktionsaufruf in Lisp:
Code:
(§§PLT (LIST PT1 PT2 (§§/ 1.0 3.0)))
Analog erhält man für
Code:
(CC-STR->LISP "PT1+(PT2-PT1)/3.0")
als Ergebnis den Lisp-Ausdruck
Code:
[(§§+ (LIST PT1 (§§/ (§§- (LIST PT2 PT1)) 3.0)))
Die hierfür notwendigen Funktionen wie §§+ usw sind in CADCAL enthalten. Anders als mit dem in Lisp eingebauten + kann §§+ auch Vektoren addieren.
Man kann diese von CC-STR->LISP zurückgegebenen Lisp-Ausdrücke dann anstelle der CAL-Aufrufe in seinem eigenen Lisp-Code vewenden, und damit erhebliche Performancegewinne erzielen.
GeomCAL liegt der AutoCAD Distribution bei, CADCAL ist für BricsCAD von http://www.archtools.de/cadcal.zip frei downloadbar. Eine Kurzanleitung für CADCAL ist enthalten, aber auch direkt unter http://www.archtools.de/cadcal.html zugänglich. Wer CADCAL für andere Lisp-basierte CAD-Programme benötigt, kann mir gerne eine private Nachricht senden.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP