Q3DScatter - >如何将不同颜色的点添加到点云

时间:2017-06-02 12:34:45

标签: c++ qt

我在Qt中编写了一个程序,它使用Q3DScatter可视化处理过的pointcloud(3D点)。 现在我想添加不同颜色的计算关键点。 那可能吗? anyboy有经验吗? 您可以在下面看到代码的一部分,其中点云被添加到数据数组中。

QScatterDataArray * dataArray = new QScatterDataArray;
dataArray->resize(vector_seg_x->size());
QScatterDataItem * ptrToDataArray = &dataArray->first();

for(int i = 0; i < vector_seg_x->size();i++){

    ptrToDataArray->setPosition(QVector3D(
                                    (double)(iter_seg_x[i]),
                                    (double)(iter_seg_y[i]),
                                    (double)(iter_seg_z[i])));
    ptrToDataArray++;

}

m_graph_seg->seriesList().at(0)->dataProxy()->resetArray(dataArray);

1 个答案:

答案 0 :(得分:1)

您只能为整点列表设置颜色/渐变:

Q3DScatter scatter;
scatter.setFlags(scatter.flags() ^ Qt::FramelessWindowHint);

scatter.addSeries(new QScatter3DSeries);
scatter.addSeries(new QScatter3DSeries);

{
    QScatterDataArray *data = new QScatterDataArray;
    *data << QVector3D(0.5f, 0.5f, 0.5f) << QVector3D(-0.3f, -0.5f, -0.4f) << QVector3D(0.0f, -0.3f, 0.2f);

    scatter.seriesList().at(0)->dataProxy()->resetArray(data);

    QLinearGradient linearGrad(QPointF(100, 100), QPointF(200, 200));
    linearGrad.setColorAt(0, Qt::blue);
    linearGrad.setColorAt(1, Qt::red);

    scatter.seriesList().at(0)->setBaseGradient(linearGrad);
    scatter.seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyle::ColorStyleObjectGradient);
}

{
    QScatterDataArray *data = new QScatterDataArray;
    *data << QVector3D(0.f, 0.f, 0.f);

    scatter.seriesList().at(1)->dataProxy()->resetArray(data);
    scatter.seriesList().at(1)->setBaseColor(Qt::green);
}

scatter.show();