//---------------------------------------- // callback function for redraw events //---------------------------------------- // void QFunctionEditor:: paintEvent( QPaintEvent *e) { QWidget::paintEvent( e ); QRect region = e->rect(); QPainter painter(this); painter.fillRect(region, m_brushBG); drawFrame(&painter); drawTicks(&painter); if(m_nInternalMode == INTERNAL_MODE_COLOR_TABLE) { drawHistogram(&painter, 0, 255); drawColorTable(&painter,region.x()-2, region.x() + region.width()+5); } else { drawHistogram(&painter, 0, 255); drawColorMap(&painter,region.x()-2, region.x() + region.width()+5); } drawLimits(&painter); }
int spadAction (void) { int code, viewCommand; float f1, f2, f3; int i1, i2, i3; if (viewAloned==yes) { close(0); return(-1); } readViewman(&viewCommand, intSize); switch (viewCommand) { case rotate: readViewman(&f1, floatSize); readViewman(&f2, floatSize); viewport->theta = f1; viewport->phi = f2; while (viewport->theta >= two_pi) viewport->theta -= two_pi; while (viewport->theta < 0.0) viewport->theta += two_pi; while (viewport->phi > pi) viewport->phi -= two_pi; while (viewport->phi <= -pi) viewport->phi += two_pi; viewport->axestheta = viewport->theta; viewport->axesphi = viewport->phi; spadDraw=yes; rotated=yes; viewport->yzOn = viewport->xzOn = viewport->xyOn = no; break; case zoom: readViewman(&f1, floatSize); viewport->scale = f1; if (viewport->scale > maxScale) viewport->scale = maxScale; else if (viewport->scale < minScale) viewport->scale = minScale; spadDraw=yes; zoomed = yes; break; case zoomx: readViewman(&f1, floatSize); readViewman(&f2, floatSize); readViewman(&f3, floatSize); viewport->scaleX = f1; viewport->scaleY = f2; viewport->scaleZ = f3; if ((viewport->scaleX == 1.0) && (viewport->scaleY == 1.0) && (viewport->scaleZ == 1.0)) { viewport->zoomXOn = viewport->zoomYOn = viewport->zoomZOn = yes; } else { if (viewport->scaleX == 1.0) viewport->zoomXOn = no; else { if (viewport->scaleX > maxScale) viewport->scaleX = maxScale; else if (viewport->scaleX < minScale) viewport->scaleX = minScale; } if (viewport->scaleY == 1.0) viewport->zoomYOn = no; else { if (viewport->scaleY > maxScale) viewport->scaleY = maxScale; else if (viewport->scaleY < minScale) viewport->scaleY = minScale; } if (viewport->scaleZ == 1.0) viewport->zoomZOn = no; else { if (viewport->scaleZ > maxScale) viewport->scaleZ = maxScale; else if (viewport->scaleZ < minScale) viewport->scaleZ = minScale; } } spadDraw=yes; zoomed = yes; break; case translate: readViewman(&(viewport->deltaX),floatSize); readViewman(&(viewport->deltaY),floatSize); if (viewport->deltaX > maxDeltaX) viewport->deltaX = maxDeltaX; else if (viewport->deltaX < -maxDeltaX) viewport->deltaX = -maxDeltaX; if (viewport->deltaY > maxDeltaY) viewport->deltaY = maxDeltaY; else if (viewport->deltaY < -maxDeltaY) viewport->deltaY = -maxDeltaY; spadDraw=yes; translated = yes; break; case modifyPOINT: readViewman(&i1,intSize); i1--; readViewman(&(refPt3D(viewData,i1)->x),floatSize); readViewman(&(refPt3D(viewData,i1)->y),floatSize); readViewman(&(refPt3D(viewData,i1)->z),floatSize); readViewman(&(refPt3D(viewData,i1)->c),floatSize); scalePoint(refPt3D(viewData,i1)); spadDraw=yes; break; case hideControl: readViewman(&i1,intSize); if (i1) { /* show control panel */ if (viewport->haveControl) XUnmapWindow(dsply,control->controlWindow); putControlPanelSomewhere(someInt); } else { /* turn off control panel */ if (viewport->haveControl) { viewport->haveControl = no; XUnmapWindow(dsply,control->controlWindow); } } break; case axesOnOff: readViewman(&i1,intSize); viewport->axesOn = i1; spadDraw=yes; if (viewData.style == smooth) { if (multiColorFlag) redoDither = yes; else redoColor = yes; } if (viewport->haveControl) drawControlPanel(); break; /* Non-uniform scaling is not in AXIOM yet. */ /* Neither is object or origin rotation. */ case perspectiveOnOff: readViewman(&i1,intSize); viewData.perspective = i1; switchedPerspective = yes; spadDraw=yes; break; case region3D: readViewman(&i1,intSize); viewport->regionOn = i1; viewData.box = i1; spadDraw=yes; if (viewport->haveControl) drawControlPanel(); redoSmooth = yes; break; case clipRegionOnOff: readViewman(&i1,intSize); viewData.clipbox = i1; spadDraw=yes; break; case clipSurfaceOnOff: readViewman(&i1,intSize); viewData.clipStuff = i1; spadDraw=yes; break; case eyeDistanceData: readViewman(&f1,floatSize); viewData.eyeDistance = f1; if (viewData.eyeDistance > maxEyeDistance) viewData.eyeDistance = maxEyeDistance; else if (viewData.eyeDistance < minEyeDistance) viewData.eyeDistance = minEyeDistance; spadDraw=yes; changedEyeDistance = yes; break; case hitherPlaneData: readViewman(&f1,floatSize); viewData.clipPlane = f1; spadDraw=yes; changedEyeDistance = yes; break; case queryVIEWPOINT: f1 = viewport->deltaX; code = check(write(Socket, &f1, floatSize)); f1 = viewport->deltaY; code = check(write(Socket, &f1, floatSize)); f1 = viewport->scale; code = check(write(Socket, &f1, floatSize)); f1 = viewport->scaleX; code = check(write(Socket, &f1, floatSize)); f1 = viewport->scaleY; code = check(write(Socket, &f1, floatSize)); f1 = viewport->scaleZ; code = check(write(Socket, &f1, floatSize)); f1 = viewport->theta; code = check(write(Socket, &f1, floatSize)); f1 = viewport->phi; code = check(write(Socket, &f1, floatSize)); break; case changeVIEWPOINT: readViewman(&f1, floatSize); readViewman(&f2, floatSize); viewport->deltaX = f1; viewport->deltaY = f2; if (viewport->deltaX > maxDeltaX) viewport->deltaX = maxDeltaX; else if (viewport->deltaX < -maxDeltaX) viewport->deltaX = -maxDeltaX; if (viewport->deltaY > maxDeltaY) viewport->deltaY = maxDeltaY; else if (viewport->deltaY < -maxDeltaY) viewport->deltaY = -maxDeltaY; translated = yes; readViewman(&f1, floatSize); viewport->scale = f1; if (viewport->scale > maxScale) viewport->scale = maxScale; else if (viewport->scale < minScale) viewport->scale = minScale; zoomed = yes; readViewman(&f1, floatSize); readViewman(&f2, floatSize); readViewman(&f3, floatSize); viewport->scaleX = f1; viewport->scaleY = f2; viewport->scaleZ = f3; if ((viewport->scaleX == 1.0) && (viewport->scaleY == 1.0) && (viewport->scaleZ == 1.0)) { viewport->zoomXOn = viewport->zoomYOn = viewport->zoomZOn = yes; } else { if (viewport->scaleX == 1.0) viewport->zoomXOn = no; else { if (viewport->scaleX > maxScale) viewport->scaleX = maxScale; else if (viewport->scaleX < minScale) viewport->scaleX = minScale; } if (viewport->scaleY == 1.0) viewport->zoomYOn = no; else { if (viewport->scaleY > maxScale) viewport->scaleY = maxScale; else if (viewport->scaleY < minScale) viewport->scaleY = minScale; } if (viewport->scaleZ == 1.0) viewport->zoomZOn = no; else { if (viewport->scaleZ > maxScale) viewport->scaleZ = maxScale; else if (viewport->scaleZ < minScale) viewport->scaleZ = minScale; } } readViewman(&f1, floatSize); readViewman(&f2, floatSize); viewData.theta = f1; viewData.phi = f2; while (viewport->theta >= two_pi) viewport->theta -= two_pi; while (viewport->theta < 0.0) viewport->theta += two_pi; while (viewport->phi > pi) viewport->phi -= two_pi; while (viewport->phi <= -pi) viewport->phi += two_pi; viewport->axestheta = viewport->theta; viewport->axesphi = viewport->phi; spadDraw=yes; rotated=yes; break; case colorDef: readViewman(&(viewport->hueOffset),intSize); readViewman(&(viewport->numberOfHues),intSize); /* spadcolors is indexed by 0 */ viewport->hueOffset --; viewport->numberOfHues --; viewport->hueTop = viewport->numberOfHues; if (viewport->hueOffset < 0) viewport->hueOffset = 0; if (viewport->hueTop < 0) viewport->hueTop = 0; if (viewport->hueOffset >= totalHues) viewport->hueOffset = totalHues-1; if (viewport->hueTop >= totalHues) viewport->hueTop = totalHues-1; viewport->numberOfHues = viewport->hueTop - viewport->hueOffset; if ((viewport->hueTop == viewport->hueOffset) && (!viewport->monoOn)) redoColor = yes; else { redoColor = no; redoDither = yes; } if (viewport->haveControl) drawColorMap(); break; case closeAll: code = check(write(Socket,&ack,intSize)); goodbye(-1); case moveViewport: readViewman(&i1,intSize); readViewman(&i2,intSize); XMoveWindow(dsply,viewport->titleWindow,i1,i2); XSync(dsply,0); break; case resizeViewport: readViewman(&i1,intSize); readViewman(&i2,intSize); XResizeWindow(dsply,viewport->titleWindow,i1,i2+titleHeight); XResizeWindow(dsply,viewport->viewWindow,i1,i2); spadDraw=yes; redoSmooth =yes; break; case transparent: case opaqueMesh: case render: case smooth: viewData.style = viewCommand; spadDraw=yes; redoSmooth =yes; break; case lightDef: readViewman(&(viewport->lightVector[0]),floatSize); readViewman(&(viewport->lightVector[1]),floatSize); readViewman(&(viewport->lightVector[2]),floatSize); normalizeVector(viewport->lightVector); movingLight = yes; drawLightingAxes(); XSync(dsply,0); break; case translucenceDef: readViewman(&backLightIntensity,floatSize); tempLightIntensity = backLightIntensity; lightIntensity = tempLightIntensity; changedIntensity = yes; drawLightTransArrow(); XSync(dsply,0); break; case changeTitle: readViewman(&i1,intSize); readViewman(viewport->title,i1); viewport->title[i1] = '\0'; writeTitle(); switch (doingPanel) { case CONTROLpanel: case CONTOURpanel: writeControlTitle(control->controlWindow); break; case VOLUMEpanel: writeControlTitle(volumeWindow); break; case LIGHTpanel: writeControlTitle(lightingWindow); break; } /* switch */ XFlush(dsply); break; case writeView: readViewman(&i1,intSize); readViewman(filename,i1); filename[i1] = '\0'; sprintf(errorStr,"writing of viewport data"); i3 = 0; readViewman(&i2,intSize); while (i2) { i3 = i3 | (1<<i2); readViewman(&i2,intSize); } if (writeViewport(i3) < 0) fprintf(stderr," Nothing was written\n"); break; case diagOnOff: readViewman(&i1,intSize); if (viewData.outlineRenderOn) { viewport->diagonals = i1; spadDraw=yes; } else { strcpy(control->message," Use this option with Outline "); writeControlMessage(); } break; case outlineOnOff: readViewman(&i1,intSize); if (viewData.style == render) { viewData.outlineRenderOn = i1; spadDraw=yes; if (viewport->haveControl) drawControlPanel(); } else { strcpy(control->message," Use this option in Shaded mode "); writeControlMessage(); } break; case spadPressedAButton: readViewman(&i1,intSize); buttonAction(i1); break; default: return(-1); } /* switch */ ack++; code = check(write(Socket,&ack,intSize)); return(0); }
int main() { // importation des donnees Csv_meteoFranceParser* csvPoste = new Csv_meteoFranceParser(pathPoste); Csv_meteoFranceParser* csvDatas = new Csv_meteoFranceParser(pathDatas); Csv_meteoFranceParser* csvJoin = csv_join_force(csvPoste, csvDatas, std::string("ID"), std::string("numer_sta"), std::string("Id_Fusion")); // selection des donnes requises (latitude, longitude, temperature, ...) std::vector<std::string>* cities = (*csvJoin)[std::string("Nom")]; std::vector<std::string>* latitude = (*csvJoin)[std::string("Latitude")]; std::vector<std::string>* longitude = (*csvJoin)[std::string("Longitude")]; std::vector<std::string>* kelvin = (*csvJoin)[std::string("t")]; float minT, maxT; findExtrema(minT, maxT, kelvin); float minLat, maxLat; float minLong, maxLong; findExtrema(minLat, maxLat, latitude); findExtrema(minLong, maxLong, longitude); ////////////////////////////// Instanciation ////////////////////////////// std::vector< std::vector< float >* >* interpoleShepard = new std::vector< std::vector< float >* >(resolution); for (int i = 0; i < resolution; ++i) { (*interpoleShepard)[i] = new std::vector<float>(resolution); } std::vector< std::vector< float >* >* interpoleHardy = new std::vector< std::vector< float >* >(resolution); for (int i = 0; i < resolution; ++i) { (*interpoleHardy)[i] = new std::vector<float>(resolution); } int resoSquare = resolution-1; std::vector< std::vector< short >* >* square = new std::vector< std::vector< short >* >(resoSquare); for (int i = 0; i < resoSquare; ++i) { (*square)[i] = new std::vector<short>(resoSquare); } ////////////////////////////// Interpolation ////////////////////////////// // interpolation des temperatures computeShepard(interpoleShepard, latitude, longitude, kelvin); computeHardy(interpoleHardy, latitude, longitude, kelvin); std::vector< std::vector< float >* >* interpoleData = interpoleHardy; ////////////////////////////// Creation des images ////////////////////////////// QImage *imgSquare = new QImage(resoSquare * RESO, resoSquare * RESO, QImage::Format_ARGB32); int count = 1; // calcul des isolignes avec le marching square for (float isoLine = minT; isoLine < maxT; isoLine += 1) { computeMarchingSquare(square, interpoleData, isoLine); drawMarchingSquare(imgSquare, square, interpoleData, isoLine); imgSquare->save(QString("../Images/anim" + QString::number(count) + ".png")); std::cout << "n° : " << count << " --> " << isoLine << std::endl; count++; } // creation de la colormap Colormap *colorMap = createColorMap(minT, maxT); // calcul de la map des couleurs QImage *imgColor = new QImage(resoSquare, resoSquare, QImage::Format_ARGB32); imgColor->fill(qRgba(0,0,0,0)); drawData(imgColor, colorMap, interpoleData); // dessine la colormap QImage *imgColormap = new QImage(50, 200, QImage::Format_RGB32); drawColorMap(imgColormap, colorMap, minT, maxT); // ecriture dans les fichiers de sorties imgColormap->save(QString("../Images/colorMap.png")); imgColor->save(QString("../Images/colorData.png")); writeKmlInfoFile(QString("../cities.kml"), cities, latitude, longitude); writeKmlImgFile(QString("../colorData.kml"), latitude, longitude, QString("colorData.png")); writeKmlImgFile(QString("../isoLine.kml"), latitude, longitude, QString("anim4.png")); ////////////////////////////// Free Memory ////////////////////////////// std::cout << "Delete memory" << std::endl; delete csvPoste; delete csvDatas; delete csvJoin; delete cities; delete latitude; delete longitude; delete kelvin; delete imgSquare; delete imgColor; delete colorMap; delete imgColormap; std::cout << "Fin" << std::endl; return 0; }