Qt Data Visualization построение фигуры

Хочу построить c помощью QtDataVisualization куб в пространстве. Строю из отдельных плоскостей Q3DSurface (квадратов из 4 точек)

Код для двух плоскостей:

{
    ////First side////
    side_1.setX( -100 );
    side_1.setY( 0 );
    side_1.setZ( 100 );

    side_2.setX( 100 );
    side_2.setY( 0 );
    side_2.setZ( 100 );

    side_3.setX( -100 );
    side_3.setY( 100 );
    side_3.setZ( 100 );

    side_4.setX( 100 );
    side_4.setY( 100 );
    side_4.setZ( 100 );

    createSurface( graph,  side_1, side_2, side_3, side_4, Qt::blue );

    /////Second side////
    side_5.setX( -100 );
    side_5.setY( 0 );
    side_5.setZ( 100 );

    side_6.setX( -100 );
    side_6.setY( 0 );
    side_6.setZ( 200 );

    side_7.setX( -100 );
    side_7.setY( 100 );
    side_7.setZ( 100 );

    side_8.setX( -100 );
    side_8.setY( 100 );
    side_8.setZ( 200 );

    createSurface( graph, side_5, side_6, side_7, side_8, Qt::blue );
};
void createSurface( Q3DSurface *graph, QVector3D point_1, QVector3D point_2, QVector3D point_3, QVector3D point_4, QColor color )
{
        QLinearGradient data_gradient( 0, 0, 1, 100 );
        data_gradient.setColorAt( 1.0, color );
        QSurface3DSeries *series = setSeries( data_gradient );

        series->dataProxy()->resetArray( createSurfaceSide( point_1, point_2, point_3, point_4 ) );
   
        graph->addSeries( series );
}
QSurface3DSeries *setSeries( QLinearGradient data_gradient )
{
    QSurface3DSeries *series = new QSurface3DSeries;

    series->setBaseGradient( data_gradient );
    series->setColorStyle( Q3DTheme::ColorStyleObjectGradient );
    series->setMesh( QAbstract3DSeries::MeshCylinder );

    return series;
}
QSurfaceDataArray *createSurfaceSide( QVector3D point_1, QVector3D point_2,
                                                    QVector3D point_3, QVector3D point_4 )
{
    QSurfaceDataArray *side = new QSurfaceDataArray;
    QSurfaceDataRow *dataRow1 = new QSurfaceDataRow;
    QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;

    *dataRow1 << point_2 << point_1;
    *dataRow2 << point_3 << point_4;

    *side << dataRow1 << dataRow2;

    return side;
}

При добавлении нового квадрата, если он не лежит на одной прямой по оси Z софт крашится.

То есть, если две плоскости __ __ , то все ок.

Если две плоскости |_ , то софт крашится.

Что делаю не так? И может есть другой более простой способ построения, чем строить из квадратов?


Ответы (0 шт):