LINUX.ORG.RU

Помогите получить координатную сетку из QHeightMapSurfaceDataProxy

 


0

1

Всем привет!

Подскажите, пожалуйста, можно ли получить данные координатной сетки из QHeightMapSurfaceDataProxy? Поверхность отрисовывается нормально. Я делал попытки получить данные через const QSurfaceDataArray *array = layerNewProxy->array(); но все что, пробовал возвращает 0 или ASSERT(...).

    Q3DSurface *surface = new Q3DSurface();
    QImage layerOneHMap(":/maps/layer_1.png");
    QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
    QSurface3DSeries *layerOneSeries = new QSurface3DSeries(layerOneProxy);
    layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
    layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
    layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
    layerOneSeries->setFlatShadingEnabled(false);
    surface->addSeries(layerOneSeries);

Благодарю за помощь.


Кажется понял в чем проблема. Я пытался получить значения сразу после создания объекта QHeightMapSurfaceDataProxy *layerOneProxy, а он заполняется позже, после того как сработает таймер вот здесь:

348	QHeightMapSurfaceDataProxyPrivate::QHeightMapSurfaceDataProxyPrivate(QHeightMapSurfaceDataProxy *q)
349	    : QSurfaceDataProxyPrivate(q),
350	      m_minXValue(defaultMinValue),
351	      m_maxXValue(defaultMaxValue),
352	      m_minZValue(defaultMinValue),
353	      m_maxZValue(defaultMaxValue)
354	{
355	    m_resolveTimer.setSingleShot(true);
356	    QObject::connect(&m_resolveTimer, &QTimer::timeout,
357	                     this, &QHeightMapSurfaceDataProxyPrivate::handlePendingResolve);
358	}

Поэтому, я создал обработчик на сигнал arrayReset() и уже в нем данные в массиве готовы к использованию

connect(layerNewProxy, SIGNAL(arrayReset()), this, SLOT(arrayMapDataReset()));

void Foo::arrayMapDataReset()
{
    const QSurfaceDataArray *array = layerNewProxy->array();
    if(array) {
        statusBar()->showMessage(QString::number(layerNewProxy->columnCount())+" x "+
                                 QString::number(layerNewProxy->rowCount()));
    }
}
karak ()