Ok.
Im wesentlichen sehe ich zwei Möglichkeiten:
1. Du nimmst einen Standardalgorithmus, der auch Ei mit Kuh mit Schaf mit Sau vereinigen könnte
. Der ist zwar wahrscheinlich komplexer, aber es gibt dazu Literatur. Als ich mirs mal Anno Dazumal angeschaut habe, war ein Artikel von einem Herrn Laidlaw am besten. 632 Google hits für
"CSG laidlaw"
bedeuten, dass andere offensichtlich auch so denken und auf seiner Arbeit aufsetzen. Grob gesagt werden die Möglichkeiten, wie sich zwei Polygone schneiden können vollständig aufgezählt und implementiert. Du wirst sicher nicht alle haben, aber rauszusuchen welche bei Dir nicht vorkommen können (und dabei auch 100% sicher sein!) ist sicher aufwendiger als "einfach" alle einzubauen. Ich weiss nicht, inwieweit es fertigen Code gibt, den Du nehmen kannst. Du kannst auch mal auf www.sf.net schauen. Es gibt auch ein Buch zu dem Thema.
2. Du baust eine spezielle Lösung. Deine Anforderungen sind IMHO speziell genug, dass es eine einfachere (sagen wir, weniger Code Zeilen) Lösung für Dein Problem als das allgemeine gibt. Allerdings müsstest Du Dir den Algorithmuss selber zusammenstellen und das "können sich überschneiden" macht das glaub ich zur schlechteren Wahl. Ganhz grob wie ich ohne lang zu überlegen vorgehen würde:
- Deckelfläche rein 2D mäßig machen, dazu All Löcher daring bestimmen und den Rest tesselieren. Hierfür gibt es fertigen Code, z.B. in Mesa. Ob fertigen, guten Code, weiss ich nicht. Die Bodenfläche macht man mit der selben Funktion.
- Den Boden jeden Loches (was nicht durchgeht) machen. Solange es keine Überschneidungen gobt, ist dies der leichteste Schritt.
- Die Seitenwände machen, also normalerweise 4ecke vom Boden der Platte oder des Loches zur Deckelfläche.
Die große Unbekannte sind die Überscheidungen.
Die Quader könntest Du übrigens als Zylinder mit 4 Seiten ansehen.