Dit is een crash-course om je zo snel en goed mogelijk op weg te helpen…. De bladzijde is waardevol maar voorlopig quick&dirty. Aan de slag met CAD-Lisp. Uitgangsbasis: nul ervaring.
Table of Contents
Over CAD-Lisp
Lisp is een algemene programmeertaal. Er is ook een dialect CAD-Lisp. Deze taal is bedoeld om handelingen in CAD-systemen te automatiseren. Daar gaat deze bladzijde over.
Al in een vroeg stadium (1986) integreerde Autodesk Lisp in hun software. Dit was AutoLISP. Kenmerkend was het puur functionele karakter. Door derden werd Vital Lisp ontwikkeld met een meer objectgeorienteerd karakter. Later werd dit als Visual LISP toegevoegd. Het is dus lastig om een algemene naam te geven aan Lisp voor CAD-toepassingen. Bricsys heeft immers ook een Lisp-versie geïntegreerd in haar CAD-systemen. Omdat Lisp voor CAD op punten flink afwijkt van gewone Lisp spreken we van CAD-Lisp.
Aan de slag, rugleuning naar achter
Je kunt programma-statements in een bestand stoppen en die uitvoeren tijdens jouw CAD-sessie. Zo kun je nieuwe commando’s maken en die bijvoorbeeld op de commandoregel aanroepen. Uiteraard kun je die commando’s ook koppelen aan knoppen of het lint. Die programma-statements kan je ook op de commandoregel uitvoeren. Op die manier kan je snel kijken en bestuderen of een reeks statements naar wens werkt.
Als het je begint te duizelen… Geen probleem, loop door de volgende zes video’s en probeer zo goed mogelijk te begrijpen wat er gebeurt. Met een CAD-systeem ernaast wat oefenen en proberen is helemaal een goed idee.
- https://www.youtube.com/watch?v=YIG_v7pxpXg
- https://www.youtube.com/watch?v=8iStzIHj7os
- https://www.youtube.com/watch?v=xV-TrwM1J7w
- https://www.youtube.com/watch?v=lQtcLBSYBlM
- https://www.youtube.com/watch?v=bxLcKo9K7ZY
- https://www.youtube.com/watch?v=PnSPIJRy5Dw
Je bent nu een uur verder en heel wat wijzer! Tijd voor koffie en laat de kennis even bezinken.
Nu zelf aan de slag, rugleuning recht
Je hebt een beeld van wat kan, mogelijk heb je ideetjes over hoe je dingen slimmer op je werk kan doen.
We gaan een werkomgeving maken. Wat vooral belangrijk is is dat je geen syntaxis-fouten maakt. Een goede editor of een goede ontwikkelomgeving kan daarbij enorm behulpzaam zijn. Voor BricsCAD zou je bijvoorbeeld Blade kunnen gebruiken. Wat meer basic is alle code in Notepad++ maken. Die kan je alvast installeren. Voor Notepad++ bestaat een syntaxis-omgeving die speciaal gemaakt is voor CAD-Lisp. Meer informatie vind je hier, die zou je ook aan de praat moeten zien te krijgen. Nogmaals, als je verder wil gaan op deze bladzijde dan is het ten sterkste aanbevolen deze omgeving te installeren op je computer.
Waar vind je informatie voor leerdoeleinden?
Allereerst is het van belang de taal goed te doorgronden. Er staat enorm veel informatie op het net maar een zeer bondige en duidelijke introductie is de oude handleiding van Autodesk. Die vind je hier. Aan de ene kant is dit droge kost maar aan de andere kant is het noodzakelijke informatie om goed te doorzien hoe dingen werken en opgebouwd zijn. Je komt er niet omheen om hier globaal doorheen te spitten.
Dan is er een Lisp reference guide. Je vindt de link hier. Daar vind je de meeste statements terug. Je zult merken dat je dit document altijd open wilt hebben als je gaat coden (dit is een belangrijke tip).
Veelal zoek je een statement met een functie. Om te voorkomen dat je iedere keer een enorme zoektocht moet afleggen: Dit is ook een fijn document.
Als je gaat programmeren dan is het niet zo’n gek idee om gebruik te maken van de enorme hoeveelheden voorbeelden die her en der verspreid staan op het net. Je kan klakkeloos kopiëren en plakken maar daarmee doe je jezelf tekort. Met andere woorden, zorg dat je goed begrijpt wat je plakt en gebruik de Lisp reference guide om te doorgronden hoe dingen werken.
Goed kunnen werken met Notepad++ is een vereiste. Zorg dat je dit grondig leest.
Als je een site zoekt met prima voorbeelden en duidelijke, goede uitleg: https://www.afralisp.net/. Wel oud maar dat is de taal zelf ook 😉
Valkuilen
Een aantal valkuilen zijn meteen te benoemen…
CAD-Lisp kent diverse data types. Net zoals bij andere talen zie je dingen terug zoals de datatype INTeger (1, 2, …), REAL (5.63) en STRing (“hallo”). Vergelijkbaar met datatype array (kent CAD-Lisp niet) is datatype LIST. Bijzonder aan CAD-Lisp zijn datatypen ENAME en PICKSET voor respectievelijk de namen van entities en selectie-sets met entities. Die laatsten zijn wat CAD-Lisp natuurlijk bijzonder maakt. Als je die truc doorziet dan wordt het leven al een heel stuk makkelijker.
Als je hier bent aangeland dan heb je al heel wat constructies met haakjes open en dicht gezien. CAD-Lisp is “interpreteted”. Dat wil zeggen dat de code die je schrijft niet eerst gecompileerd wordt maar direct omgezet wordt voor iets dat begrijpelijk is voor de CPU-instructieset. CAD-Lisp staat heel dicht bij die instructieset daardoor is CAD-Lisp enorm snel.
De opbouw met haakjes laat zich vertalen naar nesting. Bedenk dat altijd van binnen naar buiten gewerkt wordt. Met andere woorden de statements die helemaal binnenin staan, verpakt in tal van haakjes, worden als eerste uitgevoerd. Dus een statement tussen twee haakjes levert een return-waarde op. Er wordt dus een waarde als STR, REAL, PICKSET, enzovoorts geretourneerd. Met andere woorden, er wordt iets geretourneerd en dat wordt aangeboden aan het volgende statement dat tussen haakjes staat. Dat is waarom datatypes zo belangrijk zijn want als je een REAL retourneert terwijl er een INT verwacht wordt, dan gaat het fout.
Gelukkig kun je makkelijk achterhalen wat er fout gaat als je goed de commandoregel (F2) in de gaten houdt. Hiermee is niet alleen die valkuil besproken maar ook het belang van de haakjes-boekhouding. Daarom is bijvoorbeeld Notepad++ zo belangrijk.
Misschien wel de allerbelangrijkste valkuil is niet doorzien wat Lisp is: LISt-Processing. Een programma is op zichzelf ook een datatype: LIST. Een List gebruik je voor data. Met andere woorden, data is programma en programma is data. Dat maakt Lisp best bijzonder (en krachtig). Lisp draait dus om lists. Dat concept is misschien niet al te makkelijk te doorgronden. Echter als je het doorziet, dan gaat er een wereld van mogelijkheden voor je open en kan je complexe dingen vaak makkelijk met relatief weinig code oplossen.