#実行サンプル
x, y, z の3次元座標のテキストファイルを読み込み
3Dグラフ 散布図(scatter)として表示する。
※マウス操作でズームのみ可能。
※視点移動(=グラフ回転)はスライダーでする。(マウス操作はできない。)
※今時点のソースコードでは、スライダーを動かすと先にズームしていたのものが
初期の位置に戻ってしまう。
これから調べて、方法がわかれば修正するが
それまでは、まず回転をスライダーでする→ズームするの順番で見たい位置を見る操作になる。
#実行環境
windows10
Qt5.9
VisualStudio2019
#実行手順
通常通り QtCreatorでコード作成して、実行する。
#コード作成手順ポイント
■ 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