|
Lösungen zu den Übungsaufgaben
-
Kann man mit (ssadd) - ähnlich wie man mit (append)
zwei Listen zusammenfügt - auch zwei Auswahlsätze
zusammenfügen? Bitte ausprobieren!
Nein, es geht leider nicht, obwohl es gehen könnte.
Man muss eine Schleife bauen und jedes Element einzeln
hinzufügen.
-
Welche der folgenden Aussagen sind richtig?
-
Wenn man nur (ssadd ent ss) schreibt, verpufft die
Rückgabe, man muss also die Rückgabe mit setq wieder
zuweisen: (setq ss(ssadd ent ss))
Nein, muss man nicht! (ssadd) ist eine der wenigen
Funktionen, die Daten im Speicher direkt ändern.
Auch (ssdel) arbeitet so.
-
Wenn man einem Auswahlsatz Entities hinzufügt, muss
man vorher mit (ssmemb) testen, ob das Entity
nicht bereits enthalten ist.
Nein, diese Arbeit nimmt uns AutoLisp ab. Doppelte
Einträge werden von (ssadd) nicht erzeugt.
-
Ein Auswahlsatz kann maximal so lang sein, wie es
Elemente in der Zeichnung gibt.
Das ist richtig, da es keine Doppeleinträge gibt.
-
(sslength) gibt bei einem leeren Auswahlsatz 0
zurück.
Tja, das war eine gemeine Frage: Das ist richtig!
Leere Auswahlsätze kann man aber nur durch einen
Aufruf von (ssadd) ohne Argumente erzeugen. Die Funktion
(ssget) gibt jedoch, wenn 0 Objekte gewählt wurden, nicht
einen leeren Auswahlsatz zurück, sondern nil. Der Fehler,
der genauso lange existiert wie (ssget), und den AutoDesk
wohl auch nie beheben wird, liegt also bei (ssget) -
und wir müssen immer unser Workaround darumbauen.
-
Bei (ssname) beginnt die Zählung genau wie bei (nth)
und (substr) bei 0, d.h. das erste Element eines
Auswahlsatzes erhalten wir mit (ssname 0 ss).
Der zweite Teil der Aussage ist richtig, nicht aber der
erste: Bei (substr) hat AutoDesk beschlossen, die
Zählung zur Abwechslung mal bei 1 beginnen zu lassen, was
für Einsteiger sehr verwirrend ist.
-
Schreiben Sie eine Funktion, die den Benutzer auffordert,
einige Entities zu wählen. Den Auswahlsatz legen Sie in
einer globalen Variablen namens *ss* ab. Probieren
Sie aus, ob Sie dann in AutoCAD innerhalb eines Befehls
mit !*ss* den Auswahlsatz in eine Objektwahl (z.B. bei
LÖSCHEN) 'einfüttern' können.
Das geht durchaus, und es geht auch mit einem einzelnen
ENAME. Wenn Sie irgendwann an einem Programm verzweifeln
und nicht wissen, welche Entities gewählt wurden, können
Sie sich eine solche globale Variable zu Debugging-Zwecken
erzeugen und den Auswahlsatz kontrollieren.
|
|
|