AutoLISP

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

AutoLISP [ˈɑːtoʊˌlɪsp] ist ein Dialekt der Programmiersprache LISP und Bestandteil des verbreiteten CAD-Programmes AutoCAD.

Mit Hilfe von AutoLisp können Funktionen in einem AutoCAD-System hinzugefügt, gelöscht und geändert werden. Um dies zu gewährleisten, gibt es spezielle AutoLisp-Routinen, die direkt auf die AutoCAD-Datenbasis zugreifen können. Das sind im Wesentlichen Funktionen zur Behandlung von Koordinateneingaben, deren zeichnerische Umsetzung in CAD-Elemente, wie Linie, Kreis usw. möglich ist. Mit Hilfe von AutoLISP lassen sich komplexe Umgebungen zur Handhabung von AutoCAD, beispielsweise hinsichtlich der Anwendung von Normteilen, erstellen.

 (defun c:HelloWorld()
     (princ "\nHello World")
 )

Beispiel: zum Zeichnen eines Rechtecks

[Bearbeiten | Quelltext bearbeiten]
  (defun c:recht2 ( / p1 laenge breite w p2 p3 p4)
   (setq p1 (getpoint "\nEinfügepunkt: "))
   (setq laenge (getdist p1 "\nLänge: "))
   (setq breite (getdist p1 "\nBreite: "))
   (setq w (getangle p1 "\nEinfügewinkel: "))
   (setq p2 (polar p1 w laenge))
   (setq p3 (polar p2 (+(/ pi 2)w) breite))
   (setq p4 (polar p3 (+ pi w) laenge))
   (command "linie" p1 p2 p3 p4 "s") 
   (princ)
 )

Beispiel: Ermittlung eines Abstandes in Autolisp

[Bearbeiten | Quelltext bearbeiten]
 (defun c:Distanz()
  (setq old_osmode (getvar "osmode"))
  (setvar "osmode" 1)
  (setq P01 (getpoint    "\nErster  Punkt:"))
  (setq Distanz (getdist P01 "\nZweiter Punkt:" ))
  (princ "\nDistanzwert: ")
  (princ Distanz)
  (princ "\n , zugreifen in AutoCAD mit !DISTANZ ")
  (setvar "osmode" old_osmode)
 )

Beispiel: Drehen von Objekten in Autolisp

[Bearbeiten | Quelltext bearbeiten]
 (defun c:verdreh (/ Drehpunkt Radius Auswahl Erster_Punkt)
  (setq Drehpunkt  (getpoint "\nDrehen mit dem Kreis <Zentrum des Bezugskreis>: "))
 (if Drehpunkt 
  (progn
   (setq Radius (abs (getdist Drehpunkt "\nRadius für den <Bezugskreis>:")))
   (if Radius
    (command "Kreis" Drehpunkt Radius )
   );end if Radius
  );end progn Drehpunkt
 );end if Drehpunkt
 (if Radius  
  (setq Auswahl (ssget  )  ) ;Wählen der Elemente zum Drehen 
 );end if Radius
 (if Auswahl 
  (progn
   (setq Erster_Punkt  (getpoint Drehpunkt "\nAusgangspunkt der Drehung [Schnittpunkt] mit dem <Bezugskreis>:"))
   (if Erster_Punkt
    (progn
     (command "drehen"  (ssget "V") ""  Drehpunkt "B" Drehpunkt Erster_Punkt pause nil)
     (command "Löschen" "L" "" )
     );end progn Erster_Punkt
    );end if Erster_Punkt
   );end progn Auswahl
  ); end if Auswahl
 ); Ende der Funktion verdreh
 (princ "\nVERDREH.LSP wurde geladen.." )
 (princ "\nStarten mit verdreh \n")
 (princ)

Beispiel: setzt Objekte auf den aktuellen Layer in AutoLisp

[Bearbeiten | Quelltext bearbeiten]
 ; Setzt gewählte Objekte auf den aktuellen Layer
 (defun c:selayer(/ ak_layer)
 (setq ak_layer (getvar "clayer"))
 (princ "\nObjekte setzen auf: <")
 (princ ak_layer)
 (princ "> alle Eigenschaften des Layers werden übernommen.")
 (command "_change" (ssget) "" "_p"  "_LA"  ak_layer  "_LT" "_bylayer"  "_C"  "_bylayer" "_S"  "1" "")
 )