3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Qt C++ 3Dグラフ表示 QtDataVisualization

Last updated at Posted at 2021-05-15

#実行サンプル
x, y, z の3次元座標のテキストファイルを読み込み
3Dグラフ 散布図(scatter)として表示する。

image.png

※マウス操作でズームのみ可能。
※視点移動(=グラフ回転)はスライダーでする。(マウス操作はできない。)
※今時点のソースコードでは、スライダーを動かすと先にズームしていたのものが
 初期の位置に戻ってしまう。
 これから調べて、方法がわかれば修正するが
 それまでは、まず回転をスライダーでする→ズームするの順番で見たい位置を見る操作になる。

#実行環境
windows10
Qt5.9
VisualStudio2019

#実行手順
通常通り QtCreatorでコード作成して、実行する。

#ソースコード
https://github.com/sakurataiko1/Qt_Cplus_DataVisualization/tree/main/QtDataVisual_my_3Dcsvfile_rotate

#コード作成手順ポイント
■ Qt project 作成は通常通り (Qt Widget)

■ .proファイルに下記記述が必要

QT       += core gui datavisualization qml quick

■ MainWindow.cpp / h ファイルどちらも下記記述を記述する。
※記述する位置は 
・#includeの後 
・MainWindow::MainWindow(QWidget *parent)の手前

using namespace QtDataVisualization;

■ Mainwindow.h ファイルに下記記述が必要

#include <QtDataVisualization/q3dscatter.h>

■ Mainwindow.cpp ファイルに下記記述が必要

#include <QtDataVisualization/QScatter3DSeries>

■ MainWindow.cpp 散布図グラフ表示のため下記記述が必要だった。

    //初期設定 
    QScatter3DSeries *series = new QScatter3DSeries;
    series->setItemLabelFormat(QStringLiteral("@xLabel, @yLabel, @zLabel"));
    series->setMesh(QAbstract3DSeries::MeshCube);
    series->setItemSize(0.15f);
    m_graph->addSeries(series);
    // Add data from the QVector to datamodel 行、データを生成する
    QScatterDataArray *dataArray = new QScatterDataArray;
    dataArray->resize(itemList.count());
    QScatterDataItem *ptrToDataArray = &dataArray->first();
    for (int i = 0; i < itemList.count(); i++) {
        ptrToDataArray->setPosition(itemList.at(i));
        ptrToDataArray++;
    }

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

#参考資料
参考:
■ 3D 立方体の自動回転表示 (マウス操作:ズームあり、視点移動なし)
https://github.com/fengfanchen/Qt/tree/master/3D%20move%20rotation

■ 3D objファイルから散布図でデータ表示(マウス操作:ズームあり、視点移動なし)
https://blog.csdn.net/qq78442761/article/details/103678544
https://github.com/fengfanchen/Qt/tree/master/3DScatter%20Demo

■ 参考:Qt付属のExampleコード
 ・サンプル customplot (マウス操作:ズームあり、視点移動なし?)
 ・サンプル bars (視点移動=グラフ回転)
  ↑スライダーで視点移動(マウス操作ではない。)

#今後の参考予定
・マウス操作での視点移動のサンプルは、見つかっていない。
 これから調べる。

・Qt公式 サンプル surface (グラフ表示を参考にする)

・1つのグラフ領域(Axis)に2つ以上のグラフを描く
 →https://forum.qt.io/topic/92510/overlapped-surface3d-and-scatter3d/8
→Qt公式サンプルcustomitems 
 https://doc.qt.io/archives/qt-5.9/qtdatavisualization-customitems-example.html
→Qt公式サンプルrotation も参考になるかもしれない。 

・散布図表示 各座標点で色変更
https://stackoverflow.com/questions/44329125/q3dscatter-how-to-add-a-point-with-a-different-color-to-a-point-cloud

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?