Gruppen
Objektgruppierung ist das Zusammenfassen eines oder mehrere Objekte zu einer benannten Gruppe. Diese benannten Gruppen werden benötigt um Volumenkörper-Operationen wie Verschmelzung (Addition), Abzug (Subtraktion) oder Verschneiden (Differenz) auszuführen. Alle Transformationen und Schnittoperationen müssen innerhalb der Gruppe abgeschossen werden. Gruppen können auch nicht verschachtelt werden. Objekteigenschaften können sowohl vor als auch innerhalb der Gruppendefinition erfolgen. Ich weiß zwar nicht ob wirklich nur Volumenkörper in einer Gruppe zulässig sind, aber die unten angeführten Gruppenoperationen sind jedenfalls nur mit Volumenkörper sinnvoll. Materialzuweisungen innerhalb von Gruppen haben keine Auswirkung, es wird immer das aktuelle Material bei GROUP_PLACE
für alle 3D Körper, die innerhalb der Gruppe definiert wurden, verwendet.
Gruppen definieren
GROUP "name":
Beginnt die Gruppendefinition. Alle ab hier erzeugten Objekte bis GROUP_END
gehören zur der Gruppe "name"
. Mit GROUP
wird eine Gruppe nur definiert, aber noch nicht dargestellt, das muss mit dem Befehl GROUP_PLACE
geschehen.
name:
Name der Gruppe, der Name einer Gruppe muss einmalig im Script sein.
GROUP_END:
Beendet die Gruppendefinition.
Gruppen platzieren
GROUP_PLACE expr:
Platziert eine Objektgruppe an der aktuellen Position, alle Transformationen und Schnittoperationen werden ausgeführt.
expr:
Gruppenname oder Variable die das Ergebnis einer Gruppenoperation enthält
Gruppen löschen
GROUP_DEL expr:
Löscht eine Gruppe aus dem Speicher.
expr:
Gruppenname oder Variable die das Ergebnis einer Gruppenoperation enthält
Gruppenoperationen
Aus zwei Gruppen kann mittels einer Gruppenoperation eine neue Gruppe erzeugen, diese neue Gruppe kann entweder mit GROUP_PLACE
platziert werden, oder einer Variable zugewiesen werden und für weitere Gruppenoperationen verwendet werden.
Für alle Operationen gilt:
expr, expr1, expr2:
Gruppenname oder Variable die das Ergebnis einer Gruppenoperation enthält
Gruppen vereinigen (Addition)
GROUP_UNION (expr1, expr2):
Vereint zwei Gruppen zu einer einer neuen Gruppe.
Gruppen abziehen (Subtraktion)
GROUP_DIFF (expr1, expr2):
zieht (=herausfräsen) Gruppe expr2
von der Gruppe expr1
ab.
Schnittkörper zweier Gruppen
GROUP_ISECT (expr1, expr2):
Erzeugt den Schnittkörper aus Gruppe expr1
und Gruppe expr2
.
Translationskörper
GROUP_SWEEP (expr, x, y, z):
Verschiebt den Gruppenkörper expr
entlang des Vektors [x, y, z]
, der dabei passierte Raum beschreibt die neu erzeugte Gruppe. Der Verschiebungsvektor beginnt im aktuellen lokalen Koordiantenursprung der Gruppe.
GROUP_SWEEP_2 (expr, x, y, z):
wie GROUP_SWEEP
, nur beginnt der Verschiebungsvektor im lokalen Koordinatenursprung des Objekts (nicht der Projekt Koodinatenursprung). Ich erkenne keinen Unterschied in den Ergebnissen! (???)
Basis-Skript:
size = 5.0
s2 = size / 2
GROUP "cube1"
COLOR cube1_color
TRANS s2, s2, s2
BOX size, size, size
RESTORE 1
GROUP_END
GROUP "cube2"
COLOR cube2_color
BOX size, size, size
GROUP_END
COLOR 1
GROUP_PLACE (GRUPPIERUNGSBEFEHL)
END
Ausgangsbasis
GROUP_UNION("cube1", "cube2")
GROUP_DIFF("cube1", "cube2")
GROUP_ISECT("cube1", "cube2")
GROUP_SWEEP("cube1", 3, 3, 3)