Ein paar Worte vorabHome   Letzte MeldungenNews   Index der Kapitel und der besprochenen FunktionenIndex   Wer ich bin, warum ich diese Seiten mache, KontaktImpressum   Ich freue mich über jeden Eintrag im Gästebuch!Gästebuch   Einige Links zu anderen AutoLisp-SeitenLinks   Copyrights und DisclaimerRechts
Hier können die kompletten Seiten als ZIP-File heruntergeladen werden!

Berechnen von arithmetischen Ausdrücken in der Kommandozeile Sitz!Platz!Fass!
Das Verschachteln von Ausdrücken Alte Schachtel!
Das Speichern von Werten in Variablen Gebunkert
Verhindern der Evaluation mit Quote Bergbäche
Erzeugen von einfachen Listen in AutoLisp Brot,Eier,Käse
Einfache Funktionen zur Listenbearbeitung ...um die Wurst
Funktionen für den Zugriff auf Listenelemente Was ein Salat!
Über Haupt- und Nebeneffekte von Funktionen Schwer schuften
Das Definieren von eigenen Funktionen in AutoLisp Ostfriesischer...
Lokale Variablen und Funktionsargumente in AutoLisp Kondome!
Das Laden von Programmdateien in AutoLisp Banküberfall
Verzweigung in Funktionen aufgrund von Entscheidungen Wenn das Wort...
Zusammenfassen von Entscheidungen mit den Logik-Funktionen Ins Schweinderl
Mehrfach-Verzweigungen in AutoLisp mit Cond 3. Strasse links
Schleifen zum Steuern des Ablaufs in AutoLisp-Funktionen Wie im Fernsehen
Testfunktionen zum Steuern von Schleifen in AutoLisp Schwanger?
Gleichheitstests als Schleifenkriterium in AutoLisp Noch gleicher?
Zeichneketten-Bearbeitung in AutoLisp Rauchzeichen
Funktionen zur Konvertierung von Datentypen in AutoLisp Wasser zu Wein
Komplexere Funktionen für die Bearbeitung von Listen in AutoLisp Nicht arbeiten...
Das Erzeugen von anonymen Funktionen mit lambda Schwarze Kutte
Das Bearbeiten von Listenelementen mit foreach Jedem das Seine
Erzeugen und Verwenden von Assoziationslisten in AutoLisp Beim Psychiater
Zugriff auf Geometriedaten und Erzeugen von Geometrieelementen Ententanz
Der Umgang mit Auswahlsätzen in AutoLisp Jung gefreit, ...
Auswahl von AutoCAD-Zeichnungsgeometrie mit ssget Raffgierig!
Verändern von Zeichnungs-Geometrie mit entmod Flickschusterei
Das Erzeugen von Geometrie mit entmake Houdini
Über Programmierstile in AutoLisp, Teil 1 Emma
Über Programmierstile in AutoLisp, Teil 2 Sti(e)lblüten
Über Programmierstile in AutoLisp, Teil 3 Eingewickelt
Über Programmierstile in AutoLisp, Teil 4 Doofe Frisur?


Zum den Seiten für Fortgeschrittene

Zu den ActiveX-Seiten

Meine Private HP mit Fotos, Gedichten, Musik und Postkartenversand

Mein Online-Lexikon der Fotografie

Mein völlig abgedrehtes Reisebüro










Lösungen zu den Übungsaufgaben

Schauen Sie sich diese Funktion an. Finden Sie heraus, was Sie tut, kritisieren Sie sie, und schreiben Sie dann eine neue Version, die den gleichen Zweck erfüllt (lassen Sie aber das weg, was nicht hineingehört).
(defun abcde(zzz / liste elem pkt1 pkt2 pliste)
  (setq pliste nil)
  (setq elem zzz)
  (command "_UCS" "_W")
  (setq pkt1 (cdr (assoc 10 elem)))
  (setq pkt2 (cdr (assoc 11 elem)))
  (setq pliste (append pliste (list pkt1)))
  (setq pliste (append pliste (list pkt2)))
  (setq ppliste (append ppliste (list pliste)))
)
                  
Vermutlicher Zweck: Diese Funktion soll zu einem gegebenen Entity vom Typ Linie den Anfangs- und den Endpunkt zurückgeben - zusammen in einer Liste. Es wird aber (da kein (entget) vorkommt) nicht der Entityname, sondern die Datenliste als Argument übergeben. Ein Nebeneffekt ist aber auch noch, dass jeder Aufruf dieser Funktion das BKS auf 'Welt' umschaltet.

Kritik: Zunächst einmal gehört die BKS-Umschaltung überhaupt nicht in diese Funktion! Warum sollte man ein BKS umschalten, um die Koordinaten aus der Datenliste eines Entities zu lesen? Dann krankt die Funktion an hochgradiger Setqitis: Nicht eine einzige dieser (setq)-Anweisungen ist von irgendeinem Nutzen. Zum Dritten findet man hier einen Wust von unnötigen Funktionsaufrufen, die offensichtlich auf sehr mangelhafte AutoLisp-Kenntnisse zurückzuführen sind. pliste wird noch einmal auf nil gesetzt, obwohl es das schon ist, das Argument zzz wird nochmal in eine andere Variable umkopiert - warum?

Eine lokale Variable wird zwar deklariert, aber nie benutzt - eine andere Variable wird benutzt, aber nicht lokal deklariert: Globaler Datenmüll? Oder soll hier eine globale Variable verwendet werden? Wenn ja, warum? Das muss offen bleiben. Falls dies der Fall sein sollte, wäre dies auf jeden Fall der falsche Ort: Es muss ja auch möglich sein, die beiden Punkte zu extrahieren, ohne dass gleich eine globale Variable erzeugt wird.

Die letzten Zeilen lassen sich übrigens durch ein einziges (list) zusammenfassen. Und die Namen sind auch nicht deskriptiv!

Verbesserungsvorschlag (Die BKS-Umschaltung ist hier erstmal weggelassen):
(defun linien-endpunkte(daten / )
  (list
    (cdr(assoc 10 daten))
    (cdr(assoc 11 daten))
  )
)
                  
Sollte da wirklich an eine globale Variable angefügt werden, dann sollte der Ablauf jetzt so aussehen:
...
...
(setq *ppliste*
  (append *ppliste*)
  (list(linien-endpunkte(entget...)))
)
...
...
; jetzt soll was gezeichnet werden
(command "_UCS" "_W")
...
...