コード例 #1
0
ファイル: plot3d.cpp プロジェクト: piotrbetlej/hexplorer
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();

}
コード例 #2
0
ファイル: measmodel.cpp プロジェクト: adhoc2/HEXplorer
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();
}
コード例 #3
0
ファイル: foo.cpp プロジェクト: adhoc2/HEXplorer
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;
}