3D Modellierung

Werbung
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;
Herunterladen