本文整理汇总了C++中Interpolator::setMode方法的典型用法代码示例。如果您正苦于以下问题:C++ Interpolator::setMode方法的具体用法?C++ Interpolator::setMode怎么用?C++ Interpolator::setMode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Interpolator
的用法示例。
在下文中一共展示了Interpolator::setMode方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: process
void MeshProcessor::process(ObjectData* object) {
//Statusinformationen ausgeben
cout << "calculating temperature distribution for \"" << object->getName()
<< "\"..." << endl;
//Für alle Materialien...
for (unsigned int i = 0; i < object->getMaterials()->size(); i++) {
ObjectData::MaterialData* mat = &object->getMaterials()->at(i);
tetgenio* io = mat->tetgenoutput;
//ist es nötig, die Punktattributliste freizugeben?
if (mat->tetgenoutput->numberofpointattributes != 0) {
delete mat->tetgenoutput->pointattributelist;
}
//ist es nötig, die Extrapolationsstatusliste freizugeben?
if (mat->extrapolated != NULL) {
delete[] mat->extrapolated;
}
//Extrapolationsstatusliste neu erstellen
mat->extrapolated = new bool[mat->tetgenoutput->numberofpoints];
//Punktattributliste neu erstellen
mat->tetgenoutput->numberofpointattributes = NUMBEROFSENSORATTRIBUTES;
mat->tetgenoutput->pointattributelist =
new REAL[NUMBEROFSENSORATTRIBUTES
* mat->tetgenoutput->numberofpoints];
Interpolator interpolator;
interpolator.setMode(mat->interpolation_mode);
//Ermitteln der Werte für alle Punkte...
for (int j = 0; j < io->numberofpoints; j++) {
//Statusinformationen ausgeben
cout << "\rmaterial " << i + 1 << ": " << j + 1 << "/"
<< io->numberofpoints << endl;
SensorData* sd = &object->getSensorDataList()->at(
object->getCurrentSensorIndex());
interpolatePoint(mat, &sd->data.at(sd->current_time_index), j,
&interpolator);
}
cout << endl;
}
}
示例2: render_thread
/**
* Funktion zum verteilten berechnen der 2D-Temperaturverteilung.
* @param status_flag Zeiger auf Variable, die enthält ob der Thread beendet ist. (0 = Beendet)
* @param value_img Liste für die Daten der Temperaturverteilung.
* @param image Grafik für die Temperaturverteilung.
* @param width Breite der Temperaturverteilungsgrafik.
* @param height Höhe der Temperaturverteilungsgrafik.
* @param startheight Starthöhe für diesen Thread in der Grafik.
* @param delta_h Höhe des von diesem Thread zu berechnenden Streifens.
* @param info Informationen über die Eigenschaften der zu berechnenden Ebene.
* @param xvec X-Achse der Ebene.
* @param yvec Y-Achse der Ebene.
* @param v0 Mittelpunkt der Ebene.
* @param bases Möglichst einfache Geometrien Geometrien der Materialien.
* @param obj Das aktuelle Objekt.
* @param sensor_data Die zu verwendenden Sensordaten.
* @param use_last_tet Versuchen, die Interpolation durch vorgezogenes Testen des zuletzt verwendeten Tetraeders zu beschleunigen.
* Diese Option ist verursacht Ungenauigkeiten und bietet zumeist wenig Performancegewinn.
*/
void render_thread(bool* status_flag, float* value_img, wxImage* image,
int width, int height, int startheight, int delta_h,
CutRender_info* info, Vector3D* xvec, Vector3D* yvec, Vector3D* v0,
vector<tetgenio*>* bases, ObjectData* obj,
vector<SensorPoint>* sensor_data, bool use_last_tet) {
Interpolator interpolator;
//Referenz auf den letzten für die Interpolation gewählten Tetraeder
vector<SensorPoint*>* last_tet = new vector<SensorPoint*>;
//Referenz auf den aktuell für die Interpolation gewählten Tetraeder
vector<SensorPoint*>* new_tet = new vector<SensorPoint*>;
//Die Visualisierungsinformationen
Visualization_info* vis_info = wxGetApp().getVisualizationInfo();
//Wurde der zuletzt verwendete Tetraeder initialisiert?
bool last_tet_init = false;
//Für alle Pixel im zu berechnenden Streifen...
for (int x = 0; x < width; x++) {
for (int y = startheight; y < startheight + delta_h; y++) {
//Position des Pixels im 3D-Raum
Vector3D* p = v0->copy();
//Verschiebung auf der X-Achse der Ebene im vergleich zum Ebenenmittelpunkt
Vector3D* part_x = xvec->copy();
part_x->mult(
x * info->mmperpixel / 1000.
- width * info->mmperpixel / 2000);
//Verschiebung auf der Y-Achse der Ebene im vergleich zum Ebenenmittelpunkt
Vector3D* part_y = yvec->copy();
part_y->mult(
y * info->mmperpixel / 1000.
- height * info->mmperpixel / 2000);
//Berechnen der Position des Pixels im 3D-Raum
p->add(part_x);
p->add(part_y);
delete part_x;
delete part_y;
//Initialisieren des Pixels
image->SetAlpha(x, y, 0);
image->SetRGB(x, y, 0, 0, 0);
value_img[y * width + x] = -300;
//Für alle Materialien des objekts...
for (unsigned int m = 0; m < obj->getMaterials()->size(); m++) {
//Das aktuelle Material
ObjectData::MaterialData* mat = &obj->getMaterials()->at(m);
//Befindet sich der Punkt im aktuellen Material?
if (pointInsideMesh(p, bases->at(m),
info->in_volume_algorithm)) {
//Ermitteln des Wertes für den Punkt
int status = 0;
interpolator.setMode(mat->interpolation_mode);
float value = (float) getPointValue(status, sensor_data,
p->getXYZ(), &interpolator,
(last_tet_init && use_last_tet) ? last_tet : NULL,
use_last_tet ? new_tet : 0);
//Tausch der Speicherorte des Tetraeders, in dem sich der Punkt in diesem und im vorherigen Durchlauf befand
vector<SensorPoint*>* temp;
temp = last_tet;
last_tet = new_tet;
new_tet = temp;
last_tet_init = true;
//Speichern des Wertes in der Temperaturverteilung
value_img[y * width + x] = value;
//Berechnen der Farbe zum Temperaturwert
float inverse_hue = (value
- vis_info->min_visualisation_temp)
/ (vis_info->max_visualisation_temp
+ vis_info->min_visualisation_temp);
float* color = hsvToRgb(
(1.0 - clampHue(inverse_hue)) * .666, 1, 1);
//.........这里部分代码省略.........