LISP-intro – del 1

Brug det i AutoCAD

Nu vil vi bruge det, vi gennemgik i del 1, 2 og 3 til at gøre noget konkret i AutoCAD. Til det formål vil vi benytte funktionen getpoint.

(getpoint [pt] [msg])

getpoint = funktionens navn
[pt] er en liste med to eller tre elementer. x, y og x. Dette input kan undlades
[msg] er en meddelelse til brugeren. Denne kan også undlades

Funktionen returnerer en liste eller nil, hvis brugeren afbryder.

Her er nogle forskellige eksempler på brug af getpoint:

(getpoint)
(getpoint “\nAngiv et punkt: “)
(getpoint ‘(0 0 0) “\nAngiv et punkt: “)
Bemærk, at meddelelsen til brugeren indledes med \n. Dette sikrer, ar der laves et linjeskift på AutoCADs kommandolinje, inden meddelelsen vises. Prøv evt. selv at se forskellen med og uden \n.
Bemærk også. at meddelelsen afsluttes med et mellemrum (efter kolonnet). Dette sikrer, at der bliver en pæn afstand mellem meddelelsen og et evt. indtastet brugerinput. Prøv evt. også selv at se forskellen med og uden mellemrum.
Der er et par andre måder, hvorpå man kan give input til getpoint, men det kan du evt. slå op på Autodesks hjemmeside.

I Visual LISP Console skriver vi …

of taster Enter.
Herefter skifter det aktive vindue til AutoCADs brugerflade, hvor vi fra kommandolinjen bliver bedt om at angive Punkt og Punkt 2. På afbildningen her har jeg markeret, hvor jeg har udpeget Punkt 1 og Punkt 2.

Når det er gjort, skifter det aktive vindue tilbage til Visual LISP Console, hvor vi får returneret værdien af den sidst angivne værdi i setq:


Hermed har vi gemt to punktværdier i variablerne P1 og P2. Både P1 og P2 er lister, men hvor indholdet i tidligere eksempler har være tekststrenge som “Hund”, “Kat”, “Hest” etc., består elementerne i listerne nu af talværdier … nærmere betegnet en x-, y- og z-værdi.

Vi kan, som vi så tidligere, let få vist værdierne af P1 og P2 i Console-vinduet. Vi skriver blot P1 eller P2, og vi får returneret værdierne.

Vi kunne faktisk også få vist værdierne på AutoCADs kommandolinje, hvis vi der havde tastet !P1 eller !P2. Prøv det selv.

Lad os få AutoCAD til at tegne en linje fra P1 til P2.
Almindeligvis vil vi tegne en linje ved. f.eks. at kalde kommandoen “line” på kommandolinjen, hvorefter AutoCAD vil bede os om at angive to eller flere punkter. Sådan her:

Vi vil i dette tilfælde benytte os af LISP-funktionen Command, der simpelthen kalder en almindelig AutoCAD-kommando.

(command [arguments …])

command = funktionens navn
[arguments] = en række elementer, som de ville være kommet, hvis vi havde tastet den valgte kommando normalt på kommandolinjen

Når vi nu vil tegne en linje fra P1 til P2, ser det sådan her ud:

(command ”line” P1 P2 ””)

I LISP-funktionen Command gælder hvert mellemrum for et Enter på kommandolinjen. Vi beder her funktionen Command om at kalde kommandoen “line”, og på det sted, hvor AutoCAD normalt beder os om at angive punkter, indsætter vi i stedet vores variabler P1 og P2. Herefter afslutter vi med “” for at fortælle AutoCAD, at vi ikke vil angive flere punkter.

Vi skriver (command “line” P1 P2 “”) i Console-vinduet og taster Enter.


Derefter skifter vi til AutoCADs brugerflade, for at konstatere, at AutoCAD helt som ønsket har tegnet en linje fra P1 til P2.

Det kan kræve lidt øvelse at få command til at virke, for funktionen kræver, at du indtaster EKSAKT den samme sekvens, som hvis du havde kaldt kommandoen normalt på kommandolinjen.
Lige lidt mere vedr. funktionen command

Visse kommandoer, som f.eks. LAYER, viser som standard slet ikke noget kommandolinje-input, I stedet åbner kommandoen AutoCADs Layer-dialogboks.

Hvis vi på forhånd ønsker at teste en sådan kommandosekvens, kan vi gøre det ved i stedet at taste -LAYER. Dette aktiverer AutoCAD kommandolinje-version og åbner ikke dialogboksen.

Her er et eksempel på dette:
Command: -LAYER
Current layer: “Viewports”
Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/
MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]:

Hvis vi tænker os, at …

  • det aktive lag er lag “0”
  • og vi ved at der findes et lag, der hedder “Hjælpelag”
  • og vi gerne vil skifte til laget “Hjælpelag”

kan vi først afprøve kommandosekvensen sådan her:

Command: -LAYER
Current layer: “0”
Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/
MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]:
Set
Enter layer name to make current or :
Hjælpelag
Enter an option [?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/TRansparency/MATerial/Plot/Freeze/Thaw/LOck/Unlock/stAte/Description/rEconcile/Xref]:
Enter (afslutter LAYER-kommandoen)

Vores LISP-kode skal derfor se sådan her ud:

(command ”layer” “Set” “Hjælpelag” ””)