void Plot3D::setData() { int dimX = data->getX().count(); int dimY = data->getY().count(); //create Triples triple = new Qwt3D::Triple * [data->getX().count()]; double maxX = data->getX().at(0).toDouble(); double maxY = data->getY().at(0).toDouble(); double maxZ = data->getZ().at(0).toDouble(); double minX = data->getX().at(0).toDouble(); double minY = data->getY().at(0).toDouble(); double minZ = data->getZ().at(0).toDouble(); double dblX, dblY, dblZ; for (int i = 0; i < dimX; i++) { dblX = data->getX(i).toDouble(); if (dblX > maxX) maxX = dblX; if (dblX < minX) minX = dblX; triple[i] = new Qwt3D::Triple[dimY]; for (int j = 0; j < dimY; j++) { if (i == 0) { dblY = data->getY(j).toDouble(); if (dblY > maxY) maxY = dblY; if (dblY < minY) minY = dblY; } dblZ = data->getZ(i * dimY + j).toDouble(); if (dblZ > maxZ) maxZ = dblZ; if (dblZ < minZ) minZ = dblZ; triple[i][j] = Qwt3D::Triple(data->getX(i).toDouble(), data->getY(j).toDouble(), data->getZ(j,i).toDouble()); } } //calculate scaling factors double rangeX = abs(maxX - minX); double rangeY = abs(maxY - minY); double rangeZ = abs(maxZ - minZ); double facX = 1; double facY = 1; double facZ = 1; if (rangeX > rangeY && rangeX > rangeZ) { if (rangeY > 0) facY = rangeX / rangeY; if (rangeZ > 0) facZ = rangeX / rangeZ; } else if (rangeY > rangeX && rangeY > rangeZ) { if (rangeX > 0) facX = rangeY / rangeX; if (rangeZ > 0) facZ = rangeY / rangeZ; } else if (rangeZ > rangeX && rangeZ > rangeY) { if (rangeX > 0) facX = rangeZ / rangeX; if (rangeY > 0) facY = rangeZ / rangeY; } //create surface surface = new Qwt3D::SurfacePlot; setCentralWidget(surface); surface->setTitle(data->getName() + " [" + data->getUnit() + "]"); surface->loadFromData(triple, dimX, dimY); surface->setCoordinateStyle(Qwt3D::BOX); surface->setRotation(15,0,20); surface->setScale(facX, facY, facZ); surface->setZoom(0.6); surface->setPlotStyle(Qwt3D::FILLEDMESH); surface->setMeshColor(Qwt3D::RGBA(0.2f,0.7f,0.3f)); QFont font; font.setItalic(true); for (unsigned i=0; i!=surface->coordinates()->axes.size(); ++i) { surface->coordinates()->axes[i].setMajors(7); surface->coordinates()->axes[i].setMinors(4); surface->coordinates()->axes[i].setLabelFont(font); } // Set axisX titles AXIS_DESCR *axisX = data->getAxisDescrX(); COMPU_METHOD *cpmX = data->getCompuMethodAxisX(); QString name = ""; if (axisX) name.append(axisX->fixPar("InputQuantity").c_str()); QString unit = ""; if (cpmX) unit.append(cpmX->fixPar("Unit").c_str()); QString titleX = name + " - " + unit; surface->coordinates()->axes[Qwt3D::X1].setLabelString(titleX); // Set axisY titles AXIS_DESCR *axisY = data->getAxisDescrY(); COMPU_METHOD *cpmY = data->getCompuMethodAxisY(); name = ""; if (axisY) name.append(axisY->fixPar("InputQuantity").c_str()); unit = ""; if (cpmY) unit.append(cpmY->fixPar("Unit").c_str()); QString titleY = name + " - " + unit; surface->coordinates()->axes[Qwt3D::Y1].setLabelString(titleY); //surface->coordinates()->axes[Qwt3D::Z1].setLabelString("z-axis"); surface->coordinates()->setTicLength(0 , 0); surface->updateData(); surface->updateGL(); surface->show(); }
int Foo::Draw(mglGraph *gr) { int dimX = data->getX().count(); mglData x(dimX); int dimY = data->getY().count(); mglData y(dimY); mglData z(dimX,dimY); //create datas for mathGL double maxX = data->getX().at(0).toDouble(); double maxY = data->getY().at(0).toDouble(); double maxZ = data->getZ().at(0).toDouble(); double minX = data->getX().at(0).toDouble(); double minY = data->getY().at(0).toDouble(); double minZ = data->getZ().at(0).toDouble(); //added for flap map to be displayed if (maxZ == minZ) { minZ -= 10; maxZ += 10; } double dblX, dblY, dblZ; for (int i = 0; i < dimX; i++) { dblX = data->getX(i).toDouble(); if (dblX > maxX) maxX = dblX; if (dblX < minX) minX = dblX; x.a[i] = dblX; } for (int j = 0; j < dimY; j++) { dblY = data->getY(j).toDouble(); if (dblY > maxY) maxY = dblY; if (dblY < minY) minY = dblY; y.a[j] = dblY; } for(long i=0;i<dimX;i++) { for(long j=0;j<dimY;j++) { dblZ = data->getZ(i * dimY + j).toDouble(); if (dblZ > maxZ) maxZ = dblZ; if (dblZ < minZ) minZ = dblZ; z.a[i+dimX*j] = dblZ; } } QString title = data->getName() + " [" + data->getUnit() + "]"; title.replace("_", "_-"); gr->SetFontSize(2); gr->Title(title.toLocal8Bit(), ""); gr->SetRange('x', minX, maxX); gr->SetRange('y',minY ,maxY); gr->SetRange('z',minZ,maxZ); gr->SetRange('c',minZ,maxZ); gr->Light(true); gr->Rotate(70,30); gr->Axis(); gr->Box(); // Set axisX titles AXIS_DESCR *axisX = data->getAxisDescrX(); COMPU_METHOD *cpmX = data->getCompuMethodAxisX(); QString name = ""; if (axisX) name.append(axisX->fixPar("InputQuantity").c_str()); QString unit = ""; if (cpmX) unit.append(cpmX->fixPar("Unit").c_str()); QString titleX = name + " - " + unit; gr->Label('x',QString(titleX).toLatin1(),0); // Set axisY titles AXIS_DESCR *axisY = data->getAxisDescrY(); COMPU_METHOD *cpmY = data->getCompuMethodAxisY(); name = ""; if (axisY) name.append(axisY->fixPar("InputQuantity").c_str()); unit = ""; if (cpmY) unit.append(cpmY->fixPar("Unit").c_str()); QString titleY = name + " - " + unit; gr->Label('y', QString(titleY).toLatin1(),0); //gr->Label('z',"AxisY description \\i{cm}",0); gr->Colorbar(); gr->Mesh(x,y,z); gr->Surf(x,y,z); return 0; }