1 3D Modellierung Im 2D gibt es folgende Objekte: • 0-dim.: Punkte (x, y) • 1-dim.: Geraden (ax+by=c), Linien (x1,y1,x2,y2) , Kreise (xm,ym,r), Kurven (f(x,y)=0) • 2-dim.: Flächen Die Flächen können beschrieben werden durch die Umrandung (1-dim. Objekte) oder durch eine oder mehrere Ungleichungen f(x,y)>=0. Flächen werden relativ selten gebraucht, z.B. bei der Schraffur oder bei der Flächenberechnung. Daher sind die primären Objekte im 2D die 1-dim. Objekte. Ein 2D Modellierer stellt nur selten die reale Welt dar, z.B. bei der Leiterplattenentflechtung. Die reale Welt ist jedoch 3- dimensional. Im 3D existieren: • 0-dim.: • 1-dim.: • 2-dim.: • 3-dim.: Punkte (x, y, z) Linien (x1,y1,z1,x2,y2,z2) , Kreise (Mittelpunkt, Radius, Senkrechte) Kurven (x=f(t), y=g(t), z=h(t)) Geraden r=r0+λ*u ,wobei r,r0 und u 3 dimensionale Vektoren sind oder eine Gerade als Schnitt zweier Ebenen (s.u.) Flächen f(x,y,z)=0 oder x=x(u,v), y=y(u,v), z=z(u,v) Ebenen im Raum (ax+by+cz=d) Kugeloberfläche Zylindermantel Volumen, Solids f(x,y,z)>=0 Kugel Zylinder Quader Halbraum (ax+by+cz>=d) 2 Gerade im Raum Geraden im Raum lassen sich nicht in der Normalenform darstellen, da sie weder Achsenabschnitte noch einen eindeutig bestimmten Normalenvektor besitzen (zu einer Geraden im Raum gibt es unendlich viele auf ihr senkrecht stehende Richtungen). Gebräuchlich ist die oben vorgestellte Parameterform wobei , und nun Vektoren im Raum sind. Mit Hilfe des Vektorprodukts lässt sich noch eine andere, parameterfreie Geradenform konstruieren, die Determinantenform ist wiederum der Ortsvektor eines fixen Punktes und der Richtungsvektor. Da die des Ortsvektors jedes beliebigen Punktes der Geraden und dem Differenz Stützvektor kollinear zum Richtungsvektor sein muss (also in dieselbe oder in die Entgegengesetzte Richtung zeigt), ergibt das Vektorprodukt der beiden immer den Nullvektor: Ausmultipliziert erhält man die obige Geradenform. Für jeden Vektor , der Ortsvektor eines Punktes der Geraden ist, trifft die Gleichung zu, in allen anderen Fällen ergibt sich nicht der Nullvektor. Ist ein Einheitsvektor, so entspricht genau dem Abstand der Geraden vom Ursprung (Länge der kürzesten Verbindung zwischen Ursprung und Gerade). 3 Bei der 3D Modellierung werden also Körper in einem 3 dimensionalen Raum modelliert. Die drei Modellklassen sind • Drahtmodelle Hier betrachtet man nur 0-dim. Objekte (Punkte) und 1.dim. Objekte z.B. Linien zwischen den Punkten • Flächenmodelle Hier betrachtet man nur 2-dim. Objekte, z.B. Flächen • Volumenmodelle Hier werden alle Dimensionen betrachtet. Für die verschiedenen Modelle werden unterschiedliche rechnerinterne Repräsentationen genutzt. Auch die Anwendungsbereiche sind verschieden. Drahtmodelle C:\CadVorlesung\drahtmodell.PIC k7 P8 P7 k11 k10 k3 P4 P3 k6 k8 k2 k4 P5 k5 k12 P1 k1 P6 k9 P2 3D Drahtmodelle sind die informationsärmsten Darstellungen. Beschrieben werden 3D Punkte und Kanten zwischen diesen Punkten. Die Kanten sind i.A. gerade Linien, sie können aber auch Kreisbögen oder Splines sein. Bilden mehrere Kanten einen geschlossenen Kantenzug, ist in dem Modell nicht ersichtlich ob dies eine Fläche ist oder ein Loch in einer Fläche. Auch ist nicht sichergestellt, dass die Punktes eines geschlossenen Kantenzuges alle in einer Ebene liegen, d.h. sie können auch windschief sein. Ein Punkt kann natürlich in mehreren Kantenzügen enthalten sein. Die entsprechende Datenstruktur ist: 4 C:\CadVorlesung\drahtm2.K OG Zu einem Drahtmodell kann es mehrere mögliche Körper geben. Ein Drahtmodell verlangt auch nicht, dass alle Kanten auf einem geschlossenen Kantenzug liegen und so entweder die Begrenzung einer Fläche oder einer Öffnung bilden. Daher existiert zu einem Drahtmodell erst durch Interpretation des Benutzers ein realer Körper, wenn dies überhaupt möglich ist. Zu einem Drahtmodell können auch keine Darstellungen mit verdeckten Kanten (Hidden-line Darstellung) erzeugt werden, da keine Flächen existieren. Anwendungsbereiche für Drahtmodelle sind hauptsächlich solche, die keine Flächen benötigen. Das z.B. der Fall bei Rohrleitungen im Anlagenbau. 5 Ferner eignen sich Drahtmodelle als Eingabeformat für die Finite-Element-Analyse und für die NC-Teileprogrammierung, da es hier in wesentlichen nur auf die Geometrie der Kanten ankommt. Würde man in einem Drahtmodell lediglich von Hand Flächeninformationen einfügen, so wären die oben genannten Probleme nicht generell behoben, da nicht sichergestellt ist, dass die Flächen tatsächlich einen sinnvollen Körper ergeben. 6 Flächenmodelle Mit den Flächenmodellen wird die Außenhaut von Körpern, wie Fahrzeuge oder Schiffskörper beschrieben. Dazu werden so genannte Freiformflächen benutzt. Diese Flächen können nicht mit den Methoden der analytischen Geometrie beschrieben werden. Sie lassen sich nicht durch Ebenen oder Quadriken beschrieben werden. Daher werden mathematische Verfahren zur Approximation oder Interpolation von mehrfach gekrümmten Flächen benutzt. Dies kann sein Bezierapproximation, Coons’sche Flächenpatches, Spline- oder B-Spline-Interpolation und auch rationale B-Spline Techniken bzw. Non-Rational-Unifined-B-Splines (NURBS). Anwendungen sind der Schiffs- oder Karosseriebau. Hier gibt es auch eine Norm (VDAFS) zum Datenaustausch. Die Flächen haben i.A. keine Beziehungen untereinander. Es kann jedoch festgestellt werden, ob sich 2 Flächen schneiden, d.h. gemeinsame Punkte haben, etwa für Kollisionsprüfungen. Volumenmodelle Hier sollen vollständige und eindeutige Modelle erzeugt werden können. • Vollständig: Kein Körper mit fehlenden Flächen oder Kanten. Keine Flächen oder Kanten, die nicht zu einem Körper gehören. • Eindeutig: Für jeden Punkt des Raumes kann berechnet werden, ob er in einem Körper liegt oder nicht, bzw. auf der Oberfläche. Mit den Volumenmodellen können 3D Körper komplett beschrieben werden. Dies ist einmal möglich durch die Beschreibung von Körpern durch Flächen. Die Technik nennt man die B-Rep (Boundary Representation) Darstellung. Durch bestimmte Operationen, die Euler-Operationen, wird sichergestellt, dass nur sinnvolle Körper erzeugt werden können. Auch bei der Modifikation bleibt dies erhalten. 7 Die andere Methode ist die Constructive Solid Geometry (CSG). Hier werden die Körper durch Boolesche Operationen aus primitiven Grundkörpern erzeugt. Die benutzten Booleschen Operationen sind: • Vereinigung C:\CA DV orlesung\boolverein.P IC • Durchschnitt • Differenz C:\CA DV orlesung\boolschnitt.P IC 8 C:\CA DV orlesung\boolminus.P IC A minus B 9 Wie man sieht ist die Konstruktion eines Körpers (a) oft durch verschiedene Operationen möglich. Bei (b) werden zwei Quader vereinigt, bei (c) wird ein Quader von einem anderen abgezogen, bei (d) wird die Grundfläche mit 2 verschiedenen Höhen extrudiert, bei (e) wird die Seitenfläche extrudiert. Von dem Ergebnis wird dann jeweils der Zylinder abgezogen. Der Vorteil der BRep Darstellung ist, dass daraus relativ leicht eine Darstellung des Körpers abgeleitet werden kann. Dafür enthält das BRep Modell nicht die 10 Entstehungsgeschichte. Es eignet sich daher nicht besonders für parametrische Systeme. Bei der CSG Darstellung ist es genau umgekehrt. Daher werden in der Praxis häufig hybride Systeme benutzt. Die eine Möglichkeit ist ein CSG Modellierer, wobei bei jeder Operation ein BRep Facettenmodell erzeugt wird. Dies ist möglich, da für die BRep Modelle ebenfalls die Booleschen Operationen implementiert werden können. Die andere Möglichkeit ist ein BRep Modellierer mit einem CSG Backup. Daneben gibt es noch ein Zellmodell (Voxels). Hier wird für jeden Punkt des dreidimensionalen Pixelraumes (Voxel) festgehalten, ob der Punkt in einem Körper liegt bzw. in welchem Körper. Mit dieser Darstellung sind Boolesche Operationen und visuelle Darstellung sehr einfach. Nachteil ist der große Speicherbedarf. Zur Lösung dieses Problems benutzt man eine Darstellung durch Octrees. Hier wird der betrachtete Raum, ein Würfel, jeweils rekursiv in 8 Oktanten unterteilt. Dies geschieht solange, bis entweder der betrachtete Oktant ganz gefüllt ist oder ganz leer ist, oder die maximale Tiefe erreicht ist. Die Darstellung durch Octrees lässt bei der Berechnung von Volumen und Trägheitsmomenten, aber auch bei den mengetheoretischen Operationen und bei der Berechnung der Sichtbarkeit, einfache und effiziente Operationen zu. Dies auch deswegen, weil zur Darstellung der Octrees nur Integer- Werte benötigt werden. Allerdings gehen bei diesem Modell alle Strukturinformationen, wie Flächen, Kanten und Punkte des Körpers verloren. 11 BRep Darstellung Die BRep Darstellung arbeitet mit einer Hierarchie von Datenstrukturen. Die hier benutzte Darstellung orientiert sich an dem Modellierer ACIS. Die BRep Systeme sollen i.A. jeweils Manifolds erzeugen. Ein Manifold ist ein Körper, der physikalisch realisierbar ist. Ein Würfel ist ein Manifold, jedoch bilden 2 Würfel, die sich nur an einer Kante oder einem Punkt berühren keinen Manifold. Allerdings ist es praktisch, wenn das BRep System auch Non-Manifolds behandeln kann, da bei einem Zwischenschritt auch ein Non-Manifold entstehen kann, der später in mehrere Körper zerfällt. Auf oberster Ebene hat man einen oder mehrere Body. Der Body besteht aus einem oder mehreren nicht verbundenen Körpern, den Lumps. Die Lumps haben eine oder mehrere Oberflächen (Shells). Ein Würfel, der innen ausgehöhlt ist hat z.B. 2 Shells. Eine Shell besteht aus einer oder mehreren verbundenen Flächen (Faces). Die Faces sind i.A. definiert durch eine oder mehrere Umrandungen (Loops). Eine Oberfläche kann aber auch keine Umrandungen haben, z.B. hat die Oberfläche einer Kugel keine Umrandung. Die erste Umrandung ist die äußere Umrandung, die weiteren definieren Löcher in der Fläche. Die Umrandungen bestehen aus einer Folge von Kanten. Diese Kanten können zur Umrandung von 2 oder mehr Flächen gehören. Bei einem Manifold gehört eine Kante zu genau 2 Flächen bzw. deren Umrandungen. Die Kanten sind ungerichtet, die Umrandungen werden jedoch gebildet durch gerichtete Kanten, den Coedeges. Die Coedeges eines Loops bilden einen geschlossenen Kantenzug. Die Coedge wird dabei so orientiert, dass die Fläche jeweils in Kantenrichtung links liegt. Der Anfang und das Ende jeder Kante wird repräsentiert durch einen Punkt (Vertex). 12 C:\CadVorlesung\brep2.KOG Das bisherige Model spiegelt nur die Topologie der Körper wieder. Zusätzlich werden aber auch Datenelemente benötigt, die die Geometrie wiedergeben. Zunächst müssen die Flächen geometrisch definiert werden. Die Fläche kann zunächst beschrieben werden durch eine Ebenengleichung oder durch eine Gleichung für eine Fläche zweiter Ordnung, eine Quadrik. Kugeln, Zylinder, Kegel, Ellipsoide, Paraboloide bilden jeweils Quadriken. Daneben können die Flächen aber auch durch Approximation oder Interpolation beschrieben werden. 13 Die durch die Geometrie beschriebenen Flächen haben keine Begrenzungen. Die Geometrie der Grenzen der Flächen wird den Kanten zugeordnet. Dies kann zunächst eine Linie zwischen zwei Knoten sein oder ein Linie zweiter Ordnung, ein Kegelschnitt. Darunter fallen Kreise, Kreisbögen, Ellipsen, Parabeln und Hyperbeln. Daneben aber auch Kurven, die durch Approximation (Bezier Kurven) oder Interpolation (Splines) definiert werden. Zuletzt müssen auch für die Knoten jeweils die Koordinaten festgelegt werden. Dies geschieht durch ein Tripel (x,y,z). 14 Insgesamt ergibt sich folgendes Schema: 15 Alle Datenelemente sind dann z.B. bei dem Modellierer ACIS folgendermaßen verknüpft: 16 Beipiel: Kugel -0 body $-1 $1 $-1 $2 # -1 lump $-1 $-1 $3 $0 # -2 transform $-1 1 0 0 0 1 0 0 0 1 2.0 2.0 -2.0 1 no_rotate no_reflect no_shear # -3 shell $-1 $-1 $-1 $4 $-1 $1 # -4 face $5 $-1 $-1 $3 $-1 $6 forward single # -5 fmesh-eye-attrib $-1 $-1 $-1 $4 # -6 sphere-surface $-1 0 0 0 1 1 0 0 0 0 1 forward_v I I I I # C:\CA DV orlesung\acisK ugel.K OG 0 Body 2 1 Lump 3 Attribute 5 Shell 4 6 Face Kugeloberfläche (Mittelp., Radius) 17 Beispiel: Zylinder -0 body $-1 $1 $-1 $2 # -1 lump $-1 $-1 $3 $0 # -2 transform $-1 1 0 0 0 0 -1 0 1 0 0 1.5 0 1 rotate no_reflect no_shear # -3 shell $-1 $-1 $-1 $4 $-1 $1 # -4 face $5 $6 $7 $3 $-1 $8 forward single # -5 fmesh-eye-attrib $-1 $-1 $-1 $4 # -6 face $9 $10 $11 $3 $-1 $12 forward single # -7 loop $-1 $13 $14 $4 # -8 cone-surface $-1 0 0 0 0 0 1 1 0 0 1 I I 0 1 1 forward I I I I # -9 fmesh-eye-attrib $-1 $-1 $-1 $6 # -10 face $15 $-1 $16 $3 $-1 $17 forward single # -11 loop $-1 $-1 $18 $6 # -12 plane-surface $-1 0 0 -1.5 0 0 -1 -1 0 0 forward_v I I I I # -13 loop $-1 $-1 $19 $4 # -14 coedge $-1 $14 $14 $18 $20 reversed $7 $-1 # -15 fmesh-eye-attrib $-1 $-1 $-1 $10 # -16 loop $-1 $-1 $21 $10 # -17 plane-surface $-1 0 0 1.5 0 0 1 1 0 0 forward_v I I I I # -18 coedge $-1 $18 $18 $14 $20 forward $11 $-1 # -19 coedge $-1 $19 $19 $21 $22 reversed $13 $-1 # -20 edge $23 $24 0 $24 6.2831853071796004 $18 $25 forward 7 unknown # -21 coedge $-1 $21 $21 $19 $22 forward $16 $-1 # -22 edge $26 $27 0 $27 6.2831853071796004 $21 $28 forward 7 unknown # -23 ptlist-eye-attrib $-1 $-1 $-1 $20 # -24 vertex $-1 $20 $29 # -25 ellipse-curve $-1 0 0 -1.5 0 0 -1 1 0 0 1 I I # -26 ptlist-eye-attrib $-1 $-1 $-1 $22 # -27 vertex $-1 $22 $30 # -28 ellipse-curve $-1 0 0 1.5 0 0 1 1 0 0 1 I I # -29 point $-1 1 0 -1.5 # -30 point $-1 1 0 1.5 # 18 C:\CA DVorlesung\acisZylinder.KOG 0 Body Transfo. 2 1 Lump 3 1.Fläche 6 10 Ebene Zylindermantel 12 8 1.Loop 7 Edge 2.Loop 13 Coedge Loop 11 Coedge 18 19 Coedge 21 Edge 22 20 Vertex 24 Vertex 25 Kreis 29 30 Point Point C:\CadVorlesung\acisZylinderBild.PIC 6 20 18 14 4 19 21 10 3. Fläche 2.Fläche 4 Coedge 14 Shell 22 27 28 Kreis Loop 16 Ebene 17 19 Mathematisches Modell von soliden Körpern (Solids) Definition: Ein Körper ist eine beschränkte abgeschlossene Teilmenge des E3 Um zu soliden Körpern zu kommen, wird gefordert dass die Teilmenge unter Lagetransformationen invariant bleibt. Definition: Seien A, B Є E3 und о eine Äquivalenzrelation, die wie folgt definiert ist: A о B ↔A kann auf B mit einer endlichen Folge von Translationen und Rotationen abgebildet werden. Ein starres Objekt (Rigid) ist die von о aufgespannte Äquivalenzklasse von Punktmengen des E3. Weiter sollen für solide Körper Strukturen wie Punktwolken oder isolierte Kanten, die von keinem Körpermaterial umgeben sind nicht zugelassen werden. Definition: Eine Regularisierung r(A) einer Punktmenge A ist definiert durch: R(a):= c(i(A)), wobei c(A) den Abschluss und i(a) das Innere einer Menge A beschreibt. Eine Menge A ist regulär, wenn r(a)=A ist. Durch die Regularisierung werden alle isolierten Teile einer Punktmenge weggenommen. Definition: Eine beschränkte reguläre Menge heißt r-Menge. Die r-Mengen entsprechen einem soliden, also mit endlichem Volumen behafteten dreidimensionalen Körper. Eine geschlossene Oberfläche eines soliden Körpers wird abstrakt als 2Mannigfaltigkeit bezeichnet. Definition: Eine 2-Mannigfaltigkeit M ist ein topologischer Raum, in dem jeder Punkt p Є M eine Nachbarschaft besitzt, die topologisch äquivalent zu einer offenen Kreisscheibe des E2 ist. 20 Die Oberfläche einer Kugel ist z.B. eine 2-Mannigfaltigkeit. Definition: Eine r-Menge A heißt die Realisierung einer 2-Mannigfaltigkeit M, falls die Begrenzung b(A) topologisch äquivalent zu M ist. Eine 2-Mannigfaltigkeit, die mindestens eine Realisierung hat, wird realisierbar genannt. Nicht alle r-Mengen sind Realisierungen von 2-Mannigfaltigkeiten. Beispiele: 21 Für den Punkt bzw. die Kante, wo sich die beiden Quader berühren gilt nicht, dass die Nachbarschaft zu einer offenen Kreisscheibe äquivalent ist. Die Kante, wo sich die beiden Quader berühren ist auch eine Begrenzung von mehr als 2 Flächen. 22 Euler Charakteristik Ein Würfel hat 8 Ecken ( v ), 12 Kanten (e) und 6 Flächen (f). Es gilt: v-e+f= 8-12+6=2 Diese Konstante wird als Euler Charakteristik bezeichnet. Teilt man eine Fläche des Würfels durch eine zusätzliche Kante so erhöht man die Anzahl der Kanten und die der Flächen jeweils um 1. Die Euler-Summe bleibt als erhalten. Bei einem Tetraeder hat man: 4 Ecken, 6 Kanten und 4 Flächen v-e+f= 4-6+4=2 Für konvexe Polyeder gilt der Eulersche Polyedersatz: f-k+e=2 Definition: Eine Oberfläche O eines Körpers hat das Geschlecht g, falls O topologisch äquivalent zu der Oberfläche einer Kugel mit h Henkeln ist. Ein Körper mit der einer Oberfläche vom Geschlecht g hat g Durchbohrungen. Das Geschlecht g eines Körpers entspricht der Anzahl h der Löcher (Durchbohrungen) eines Körpers. Definition: Schalen eines Körpers sind die Anzahl der Oberflächen die nicht miteinander verbunden sind. 23 Hat man beliebige Körper mit Höhlungen, mehrfach zusammenhängenden Seitenflächen (Löchern in einer Fläche) und Durchbohrungen so bezeichnet man mit: X=f-k+e die Euler-Charakteristik. Für konvexe Körper ist X=2, d.h. der Körper hat eine Schale. Für einen Körper mit mehreren Schalen s gilt: v -e + f = 2 s Für einen Körper mit h Höhlungen und s Schalen gilt: v -e + f = 2 ( s -h) Hat der Körper auch noch r Ringe, d.h. Löcher in einer Fläche gilt die allgemeine Formel (Euler-Poincare): v -e + f = 2 ( s -h) +r Beispiele: Würfel mit Höhlung: v=16 e=24 f=12 s=2 16-24+12=2*2 24 Würfel mit aufgesetztem Würfel: v=16 e=24 f=11 s=1 r=1 16-24+11=2*1+1 Würfel mit Durchbohrung: v=16 e=24 f=10 s=1 r=2 h=1 16-24+10=2*(1-1)+2 25 Würfel mit Höhlung und Durchbohrung v=24 e=36 f=17 s=2 r=2 h=1 24-36+16=2*(2-1)+2 26 Euler Operatoren Die Euler Operatoren sind Operationen, die die Euler Charakteristik erhalten. Beispiel: Erzeugen eines Würfels Die Euler Poincare Formel v -e + f = 2 ( s -h) +r kann man auch schreiben: v -e + f -2s +2h –r =0 Zunächst wird mit der Operation: MVFS ein Knoten V eine Fläche F und eine Shell S erzeugt. Dann wird dreimal mit MEV eine Kante und ein Knoten hinzugefügt. Mit MEF wird eine Kante hinzugefügt und eine Fläche erzeugt. Dann noch viermal MEV. Am Ende noch viermal MEF zur Erzeugung der restlichen Flächen. Jede der Operationen erhält die Summe der Euler Poincare Formel. MVFS = MEF = MEV = v+f-2*s=0 -e+f =0 v-e =0 Dazu gehören die inversen Operationen: LVFS Lösche Knoten, Fläche und Shell LEF Lösche Kante und Fläche LEV Lösche Kante und Knoten Will man beliebige Polyeder mit Durchbrüchen und Ringen erzeugen so werden einige zusätzliche Operatoren benötigt. KEMR Lösche Kante Erzeuge Ring Die inverse Operation ist: MEKR Erzeuge Kante Lösche Ring +e–r=0 -e+r=0 27 Um Durchbohrungen zu erzeugen bzw. zu schließen gibt es: KFMRH: MFKRH Lösche Fläche, Erzeuge Ring und Loch. -f-r+2h Erzeuge Fläche, Lösche Ring und Loch +f+r-2h Zusammenfassung der Euler-Operatoren: 28 Die Euler Operatoren werden mit Hilfe der folgenden Halbkanten-Datenstruktur implementiert. B-Rep Darstellung mit Halbkanten Datenstruktur Die Darstellung eines B-Rep Modells erfolgt mit Hilfe der Halbkanten-Datenstruktur Zwei unterschiedliche Modellarchitekturen werden in der Halbkanten-Datenstruktur vereinigt, das hierarchische und das lineare Modell. Kanten eines festen Körpers, dessen Oberfläche eine 2-Mannigfaltigkeit ist, sind zu genau 2 Flächen adjazent. Daher wird eine Kante im hierarchischen Modell durch 2 Halbkanten repräsentiert. Hierarchisches Modell Das hierarchische Modell besitzt einen Schichtenweisen Aufbau. Diese Schichten sind die Flächen- Berandungs-, Halbkanten- und Knotenschicht. Jedes Element der oberen Schicht wird durch ein oder mehrere Elemente der unteren Schicht repräsentiert. 29 In jeder Schicht sind die einzelnen Elemente durch eine doppelt verkettete Liste verknüpft (prev*, next*). Ferner enthält jedes Element einen Zeiger auf Element der oberen Schicht, das es darstellt. Von der oberen Schicht zeigt ein Zeiger auf das erste Element der unteren Schicht, das dieses Element darstellt. Die im ACIS System vorkommenden Ebenen der Lumps und Shells wird hier weggelassen. Es werden also nur Körper betrachtet, die aus einem Teil bestehen und keine Aushöhlungen haben. 30 Die Flächenschicht (Face) enthält für jeden Körper (Solid) genau eine Flächenliste, die alle Flächen des Körpers darstellt. Die Berandungsschicht (Loop) enthält eine Liste der Berandungen einer Fläche. Die Halbkantenschicht (HalfEdge) enthält für jede Berandung eine Liste der Halbkanten. Für jede Halbkante gibt es einen Zeiger auf den Startknoten in der Knotenschicht (Vertex). Jeder Knoten enthält einen Zeiger auf eine Halbkante, deren Startknoten der Knoten ist. 31 Von dieser Halbkante können die übrigen mit dem Knoten adjazenten Halbkanten ermittelt werden. Lineares Modell In einer Instanz des hierarchischen Modells der Halbkanten-Datenstruktur sind alle geometrischen Informationen des repräsentierten Körpers gespeichert. Durch eine Instanz des linearen Modells wird die Halbkanten-Datenstruktur vervollständigt. Eine Kante der Winged-Edge-Datenstruktur tritt in einer Instanz des linearen Modells genau zweimal auf. Die Eigenschaft eines Ebenenmodells, zwei Kanten als genau eine Kante zu identifizieren, ist in der Winged-Edge-Datenstruktur somit implizit gespeichert. In einer Instanz der Halbkanten-Datenstruktur wird diese Eigenschaft dadurch gewährleistet, dass genau zwei Halbkanten als eine Kante identifiziert werden. Für die neue Datenstruktur Kante wird gefordert, dass • jede Kante genau einmal im gesamten Modell aufgeführt ist, • jede Kante auf genau zwei Halbkanten unterschiedlicher Orientierung verweist, • und genau zwei Halbkanten unterschiedlicher Orientierung auf dieselbe Kante zeigen. Zwei Halbkanten werden durch den Verweis auf dieselbe Kante als genau eine Kante identifiziert. Eine Kante verweist auf genau zwei Halbkanten. Bei dieser Modellierungsmethode nimmt die Datenstruktur Kante eine Sonderstellung ein, da für sie nur eine Adjazenz bezüglich zweier Halbkanten definiert wird. Es fehlt 32 die Definition einer Adjazenz zu einer über der Halbkante liegenden Schicht. Daher können Kanten nicht in eine Instanz des hierarchischen Modells eingeordnet werden. Sie werden in einer doppelt verketteten linearen Liste in einer Instanz des linearen Modells abgespeichert. In einem komfortablen CAD-System sollte es einem Benutzer möglich sein, Knoten eines Körpers ohne lange Verzögerungszeiten zu selektieren. Über das hierarchische Halbkantenmodell einen Knoten zu lokalisieren, ist äußerst aufwendig. Zuerst muss die Fläche gefunden werden, in der der selektierte Punkt liegt und anschließend alle Halbkantenlisten der äußeren und inneren Schleifen nach einem Knoten durchsucht werden, dessen Koordinaten den Koordinaten des selektierten Punktes entsprechen. Eine Instanz des linearen Modells wird aus diesem Grunde durch eine Knotenliste, in der alle Knoten des Körpers gespeichert sind, ergänzt. Aus Speichereffizienzgründen werden für Elemente der Knotenliste keine neuen Instanzen angelegt, da alle Knoten schon in der Knotenschicht des hierarchischen Modells gespeichert sind. Vielmehr werden diese Knoten als doppelt verkettete Liste in einer Instanz des linearen Modells abgelegt. Die Knotenliste spielt somit eine Sonderrolle, da sie sowohl einer Instanz des hierarchischen als auch einer Instanz des linearen Modells zugeordnet werden kann. Wie die Angliederung einer Instanz des linearen Modells an ein Element der Körperliste durch entsprechende Verweise realisiert wird, zeigt die folgende Abbildung. 33 Eine mögliche Datenstruktur in Pascal kann wie folgt aussehen: tsolid = record color:integer; bbox : tbox; solidno : id; sfaces : pface; sedges : pedge; sverts : pvertex; nexts : psolid; prevs : psolid; end; { Körper } { Farbe des Körpers } { boundarybox eines Körpers } { bezeichner des Körpers } { Zeiger auf Flächenliste } { Zeiger auf Kantenliste } { Zeiger auf Knotenliste } { Zeiger auf Nachfolger } { Zeiger auf Vorgänger } tface = record { Fl„che } color:integer; { Fl„chenfarbe } BS:boolean; { Markierung von Vorder- und Rückseiten (BackSide) } bbox:tbox; { boundary-box des Körpers } mark:boolean; { Markierung von sich selbstber hrenden Berandungen einer Fläche } dist:rtp; { definiert Abstand zum Augpunkt } faceno : id; { Flächenbezeichner } fsolid : psolid; { Zeiger auf Vorgänger } flout : ploop; { Zeiger auf äußere Flächenberandung, gespeichert in floops } floops : ploop; { Berandungsliste } feq : vector; { Flächennormale } nextf : pface; { Zeiger auf Nachfolger } prevf : pface; { Zeiger auf Vorgänger } end; tloop = record { Schleife } ledge : phalfedge; { Zeiger auf erste Halbkante des Halbkantenrings } lface : pface; { Zeiger auf adj. Fläche } nextl : ploop; { Zeiger auf Nachfolger } prevl : ploop; { Zeiger auf Vorgänger } end; tedge = record mark:boolean; { markiert Flatterkanten } bbox :tbox; { bbox einer Kante } ne:integer; { Verweis auf Nullkante, falls Halbkanteninstanz Nullkante ist. } he1 : phalfedge; { Zeiger auf erste Halbkante } he2 : phalfedge; { Zeiger auf zweite Halbkante } nexte : pedge; { Zeiger auf Nachfolger } preve : pedge; { Zeiger auf Vorgänger } end; thalfedge = record { Halbkante } konv : boolean; { Marke zur Unterscheidung von konvexen und konkaven Startknoten der Halbkante } neighb : phalfedge; { zeigt auf den Nachbarn der Halbkante } mark : boolean; { Markierung eines Nullkantenclusters } edg : pedge; { Zeiger auf adj. Kante } vtx : pvertex; { Zeiger auf Startknoten der Halbkante } wloop : ploop; { Zeiger auf adj. Schleife } nxt : phalfedge; { Zeiger auf Nachfolger } prv : phalfedge; { Zeiger auf Vorgänger } end; tvertex = record mark:boolean; { Zum Erzeugen eines linearen Modells } vertexno : id; { Knotenbezeichner } vedge : phalfedge; { Zeiger Halbkante, die den Knoten als Startknoten besitzt } vcoord : vector; { 3D-Koordinaten } vcoord2d :vector2d; { 2D-Koordinaten, werden in zur Projektion berechnet} nextv : pvertex; { Zeiger auf Nachfolger } prevv : pvertex; { Zeiger auf Vorgänger } end; 34 Die Funktionen traverse und mate Die Funktionen traverse und mate untersuchen die Nachbarschaften einer Kante und eines Knotens. Ein wichtiger begriff ist der Genosse (buddy) einer Halbkante. Die Halbkanten die eine Kante identifizieren sind Genossen. function mate(h:phalfedge) :phalfedge; begin If h=h^.edg^.he1 then mate:=h^.edg^.he2; else mate:=h^.edg^.he1; end; Die Prozedur traverse untersucht die Umgebung eines Knotens. Ausgehend von einer zu v adjazenten Halbkante start, werden die Nachfolger h des Genossen einer Halbkante an die Prozedur work übergeben. In der Abbildung ist der Nachfolger des Genossen von beispielsweise hl die Halbkante h2. procedure traverse(v: pvertex); var h:phalfedge; begin start:=v^.edge; h:=start; repeat h:=mate(h)^.nxt; work(h); until h=v^.vedge; end;