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)