All Classes Functions Variables Enumerations Pages
User Guide

Einführung FaceCenterPoints Zyklenberechnung VESTA-Zyklen Triangulierung Abstandsgesetz Ergebnisse Ausblick Anwendung Quellennachweise


Die Klasse surfaceExtraction wurde in der Programmiersprache C++ geschrieben. Um mithilfe dieser Klasse eine Oberfläche zu erzeugen, ist es zwingend erforderlich, dass die Bibliothek OpenMesh in das Programm eingebunden wird. Außerdem muss das struct MyTraits definiert sein sowie das struct volume_parameters .

Dann geht man wie folgt vor:
Als erstes legt man ein struct-Objekt vom Typ volume_parameters an und legt dort die Daten des Skalarfeldes in dem std::vector<double> densities ab. Ferner übergibt man dem std::vector<double> dimSize die Abmessungen des Skalarfeldes: dimSize[0] = Kantenlänge in x-Richtung, dimSize[1] = Kantenlänge in y-Richtung, dimSize[2] = Kantenlänge in z-Richtung.
Dann ist es auch zwingend notwendig, den Abstand zwischen den Voxeln in x-,y- und z-Richtung (das Spacing) zu definieren und im std::vector<double> elementSpacing abzulegen: elementSpacing[0] = Spacing in x-Richtung, elementSpacing[1] = Spacing in y-Richtung, elementSpacing[2] = Spacing in z-Richtung. Wenn keine bestimmten Werte vorgegeben sind, empfiehlt es sich, alle drei Werte auf 1 zu setzen.
Als nächstes legt man ein Objekt des Typs MyMesh an - MyMesh ist hierbei nur ein Aliasname für OpenMesh::TriMesh_ArrayKernelT<MyTraits> - ferner ein Objekt des Typs surfaceExtraction.

Jetzt kann man an diesem Objekt die Funktion createSurface aufrufen. Ihr übergibt man neben den beiden Objekten des Typs volume_parameters und MyMesh den Isowert (=threshold) und die drei boolsche Variablen, die angeben, ob die Oberfläche im connected mode (connected=true), im mixed mode (mixedMode=true) gezeichnet werden soll und ob dazu der High Resolution Mode oder der Low Resolution Mode (extraPoints=false) verwendet werden soll.
Die Isofläche, die von der Funktion generiert wird, wird in dem Objekt des Typs MyMesh abgelegt.

Nun lassen sich noch eine Vielzahl von Parametern einstellen, von der die Gestalt und das Aussehen der Oberfläche abhängen. Zum Beispiel kann man festlegen, dass die Face Center Points, sofern sie am Rand des Skalarfeldes liegen, einen bestimmten Abstand zur Außenseite des Skalarfeldes haben; dazu benutzt man die Methode setBorderOffset. Oder man legt fest, dass die Oberfläche in einem medium mode gezeichnet werden soll, was bedeutet, dass die VESTA-Zyklen der Länge 3,4,5,6 und 7 im Low Resolution Mode, die Zyklen der Länge 8,9 und 12 hingegen im High Resolution Mode gezeichnet werden sollen. Dazu verwendet man die Methode setMediumMode. Ferner kann man die Farbe der Oberfläche mit setSurfaceColor festlegen und mit setFeatureEdges die VESTA-Zyklen sichtbar machen.

Alle diese Methoden müssen aufgerufen werden, bevor die Methode createSurface aufgerufen wird.

Eine typischer Codeabschnitt könnte so aussehen (das Skalarfeld liegt hier in dem std::vector< double> scalarfield, seine Abmessungen in den Variablen xEdgeLength, yEdgeLength und zEdgeLength vor):

settings.dimSize.push_back(xEdgeLength);
settings.dimSize.push_back(yEdgeLength);
settings.dimSize.push_back(zEdgeLength);
settings.elementSpacing.resize(3, 1.0);
settings.densities = scalarfield;
testObj.setBorderOffset(0.5);
testObj.setMediumMode();
double threshold = 50;
bool connection = false;
bool mixed = true;
bool extraPoints = false;
MyMesh surface;
testObj.createSurface(settings, surface, threshold, connection, mixed, extraPoints);

Die Oberfläche würde danach in der Variablen surface vorliegen.

Falls man mit demselben surfaceExtraction-Objekt (hier: testObj) eine weitere Oberfläche erzeugen will, müssen bei diesem Objekt mit der Methode clear4refresh die privaten Member-Variablen auf Null gesetzt werden. Also zum Beispiel so:

MyMesh surface;
testObj.createSurface(settings, surface, threshold, connection, mixed, extraPoints);
testObj.clear4refresh();
MyMesh surface2;
testObj.createSurface(settings, surface2, threshold2, false, false, false);

weiter


Einführung FaceCenterPoints Zyklenberechnung Vesta-Zyklen Triangulierung Abstandsgesetz Ergebnisse Ausblick Anwendung Quellennachweise