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(); }
QVariant MeasModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); int row = index.row(); int column = index.column(); if (0 <= row && row < nRow) { MEASUREMENT *label = (MEASUREMENT*)listMeas.at(row); switch (role) { case Qt::DisplayRole : { QString compu_method = label->getPar("Conversion"); Node * node = label->getParentNode()->getParentNode(); COMPU_METHOD *cmp = (COMPU_METHOD*)node->getNode("COMPU_METHOD/" + compu_method); if (column == 0) { return label->name; } else if (column == 1) { QString str = label->fixPar("LongIdentifier").c_str(); return str; } else if (column == 2) { if (cmp) return cmp->getPar("Unit"); } else if (column == 3) { ECU_ADDRESS *ecuAddress = (ECU_ADDRESS*)label->getItem("ecu_address"); if (ecuAddress) { return ecuAddress->getPar("Address"); } return QVariant(); } else if (column == 4) { QString str = label->fixPar("DataType").c_str(); return str; } else if (column == 5) { QString str = label->fixPar("Conversion").c_str(); return str; } else if (column == 6) { QString str = label->fixPar("Resolution").c_str(); return str; } else if (column == 7) { QString str = label->fixPar("Accuracy").c_str(); return str; } else if (column == 8) { QString str = label->fixPar("LowerLimit").c_str(); return str; } else if (column == 9) { QString str = label->fixPar("UpperLimit").c_str(); return str; } else return QVariant(); } break; case Qt::DecorationRole: // The data to be rendered as a decoration in the form of an icon. break; case Qt::EditRole: { } break; case Qt::ToolTipRole: { } break; case Qt::StatusTipRole: // The data displayed in the status bar. break; case Qt::WhatsThisRole: // The data displayed for the item in "What's This?" mode. break; case Qt::SizeHintRole: // The size hint for the item that will be supplied to views. break; case Qt::FontRole : // The font used for items rendered with the default delegate. { if (column == 0) { QFont font; font.setBold(true); return font; } } break; case Qt::TextAlignmentRole: break; case Qt::BackgroundRole: { } break; case Qt::ForegroundRole: // the foreground brush (text color, typically) used for items rendered with the default delegate. { if (column == 0) { QColor color = Qt::blue; return color; } } break; } } return QVariant(); }
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; }