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.
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.
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
GROUP_DEL expr: Löscht eine Gruppe aus dem Speicher.
expr: Gruppenname oder Variable die das Ergebnis einer Gruppenoperation enthält
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
GROUP_UNION (expr1, expr2): Vereint zwei Gruppen zu einer einer neuen Gruppe.
GROUP_DIFF (expr1, expr2): zieht (=herausfräsen) Gruppe expr2 von der Gruppe expr1 ab.
GROUP_ISECT (expr1, expr2): Erzeugt den Schnittkörper aus Gruppe expr1 und Gruppe expr2.
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.0s2 = size / 2GROUP "cube1"COLOR cube1_colorTRANS s2, s2, s2BOX size, size, sizeRESTORE 1GROUP_ENDGROUP "cube2"COLOR cube2_colorBOX size, size, sizeGROUP_ENDCOLOR 1GROUP_PLACE (GRUPPIERUNGSBEFEHL)ENDAusgangsbasisGROUP_UNION("cube1", "cube2")GROUP_DIFF("cube1", "cube2")GROUP_ISECT("cube1", "cube2")GROUP_SWEEP("cube1", 3, 3, 3)