ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
ARCSgraphics.hh
1
8//
9// Copyright (C) 2011-2024 Yokokura, Yuki
10// MIT License. For details, see the LICENSE file.
11
12#ifndef ARCSGRAPHICS
13#define ARCSGRAPHICS
14
15#include <pthread.h>
16#include <cfloat>
17#include <functional>
18#include "ConstParams.hh"
19#include "Matrix.hh"
20
21namespace ARCS { // ARCS名前空間
24 public:
25 explicit ARCSgraphics(void);
27 void DrawPlotPlane(void);
28 void DrawWaves(void);
29 void ResetWaves(void);
30 void SaveScreenImage(void);
31
35 void SetTime(const double T, const double t){
36 const double tlimited = fmod(t, ConstParams::PLOT_TIMESPAN); // [s] 横軸時間の範囲を[0~最大の時刻]に留める計算
37 const double tstorage = fmod(t, ConstParams::PLOT_TIMERESO); // [s] リングバッファ保存時間になったかの判定用時刻の計算
38 if(tstorage <= T){
39 // リングバッファ保存時刻になったら
40 StorageEnable = true; // リングバッファ保存を有効にして
41 TimeRingBuf.SetFirstValue(tlimited); // 時刻をリングバッファに詰める
42 }else{
43 // リングバッファ保存時刻以外の場合は
44 StorageEnable = false; // 保存を無効にする
45 }
46 }
47
50 template<typename T1, typename... T2>
51 void SetVars(const T1& u1, const T2&... u2){
52 // リングバッファ保存時刻ではなかったら
53 if(StorageEnable == false) return; // 何もせずに終了
54
55 // 再帰で順番に可変長引数を読み込んでいく
56 if(VarsCount == 0){
57 PlotNumBuf = (size_t)u1; // 1個目の引数はプロット番号として格納
58 }else{
59 if(VarsCount <= ConstParams::PLOT_VAR_NUM[PlotNumBuf]){
60 // 変数要素数が有効な範囲内なら
61 //pthread_mutex_lock(&PlotVarsMutex); ←リアルタイム性悪化の原因!(一時的な対処)
62 VarsRingBuf.at(PlotNumBuf).at(VarsCount - 1).SetFirstValue((double)u1); // 変数値リングバッファに詰める
63 //pthread_mutex_unlock(&PlotVarsMutex);
64 }
65 }
66
67 ++VarsCount; // 再帰カウンタをインクリメント
68 SetVars(u2...); // 自分自身を呼び出す(再帰)
69 }
71 void SetVars(){
72 VarsCount = 0; // すべての作業が終わったので,再帰カウンタを零に戻しておく
73 }
74
76 void SetWorkspace(const std::array<Matrix<1,6>, 6>& AxPosition);
78 void SetWorkspace(const Matrix<1,3>& Pos1, const Matrix<1,3>& Pos2, const Matrix<1,3>& Pos3);
79
81
83 void SetUserPlotFuncs(const std::function<void(void)>& DrawPlaneFobj, const std::function<void(void)>& DrawPlotFobj);
84
85 private:
86 ARCSgraphics(const ARCSgraphics&) = delete;
87 const ARCSgraphics& operator=(const ARCSgraphics&) = delete;
88 ARCSgraphics(ARCSgraphics&& r) = delete;
89
90 // フレームバッファとキュイプロット
91 FrameGraphics FG;
92 std::array<std::unique_ptr<CuiPlot>, ConstParams::PLOT_NUM> Plot;
93 CuiPlot PlotXY;
94 CuiPlot PlotXZ;
95
96 // 時系列プロット読み込み用変数
97 pthread_mutex_t PlotVarsMutex;
98 bool StorageEnable;
99 size_t PlotNumBuf;
100 size_t VarsCount;
101
102 // 時系列用リングバッファ
104 std::array<
105 std::array<
108 >,
110 > VarsRingBuf;
111
112 // 作業空間用バッファ
113 pthread_mutex_t WorkspaceMutex;
114 std::array<Matrix<1,6>, 6> AxisPos;
115
116 // ユーザカスタムプロット
117 std::function<void(void)> DrawUserPlaneFunc;
118 std::function<void(void)> DrawUserPlotFunc;
119
120 // 実際の描画を実行する関数
121 void DrawTimeSeriesPlotPlane(void);
122 void DrawTimeSeriesPlot(void);
123 void DrawWorkSpacePlotPlane(void);
124 void DrawWorkSpacePlot(void);
125};
126}
127
128#endif
129
行列/ベクトル計算クラス(テンプレート版)
定数値格納用クラス ARCSに必要な定数値を格納します。
グラフィッククラス
Definition ARCSgraphics.hh:23
void SetUserPlotFuncs(const std::function< void(void)> &DrawPlaneFobj, const std::function< void(void)> &DrawPlotFobj)
ユーザカスタムプロット描画関数への関数オブジェクトを設定する関数
Definition ARCSgraphics.cc:84
ARCSgraphics(void)
コンストラクタ
Definition ARCSgraphics.cc:20
void ResetWaves(void)
プロットをリセットする関数
Definition ARCSgraphics.cc:109
void SetVars()
再帰の最後に呼ばれる関数
Definition ARCSgraphics.hh:71
FrameGraphics & GetFGrefs(void)
フレームバッファクラスへの参照を返す関数
Definition ARCSgraphics.cc:79
void SetVars(const T1 &u1, const T2 &... u2)
プロット描画変数に値を設定する関数(可変長引数テンプレート)
Definition ARCSgraphics.hh:51
~ARCSgraphics()
デストラクタ
Definition ARCSgraphics.cc:53
void SetTime(const double T, const double t)
プロット描画時間に値を設定する関数
Definition ARCSgraphics.hh:35
void SetWorkspace(const std::array< Matrix< 1, 6 >, 6 > &AxPosition)
作業空間プロットに位置ベクトルを設定する関数(6軸配列版)
Definition ARCSgraphics.cc:59
void SaveScreenImage(void)
画面をPNGファイルとして出力する関数
Definition ARCSgraphics.cc:122
void DrawWaves(void)
プロット波形の描画
Definition ARCSgraphics.cc:102
void DrawPlotPlane(void)
プロット平面の描画
Definition ARCSgraphics.cc:90
static constexpr size_t PLOT_VAR_MAX
[-] プロット可能な変数の最大数 (変更不可)
Definition ARCSparams.hh:76
CuiPlot(新型きゅいプロットV2)
Definition CuiPlot.hh:54
フレームグラフィックスクラス(新型テンプレート版)
Definition FrameGraphics.hh:91
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
リングバッファクラス
Definition RingBuffer.hh:51
void SetFirstValue(const T &u)
値をバッファの先頭に格納する関数
Definition RingBuffer.hh:80
static constexpr size_t PLOT_NUM
[-] グラフプロットの数
Definition ConstParams.hh:76
static constexpr std::array< size_t, ARCSparams::PLOT_MAX > PLOT_VAR_NUM
時系列プロットする変数の数 (≦PLOT_VAR_MAX)
Definition ConstParams.hh:185
static constexpr double PLOT_TIMERESO
[s] プロットの時間分解能
Definition ConstParams.hh:78
static constexpr double PLOT_TIMESPAN
[s] プロットの時間幅
Definition ConstParams.hh:77