FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlReporter.h
1#pragma once
2
63#include "sfh/filters/FIR.h"
64
65#include <fhsim/simobject/SimObject.h>
66#include <marenv/marenv.h>
67
68#ifdef FH_VISUALIZATION
69# include "trawl/subroutines/ValuesDisplayBase.h"
70
71# include <fhsim/visual/renderer/Hud.h>
72# include <memory>
73#endif
74
75#include <string>
76#include <vector>
77
78class TrawlReporter : public SimObject
79{
80public:
82 static constexpr double kNewtonToTonneForce = 1.0 / (1000.0 * marenv::gravity);
83
84 TrawlReporter(const std::string& simObjectName, ISimObjectCreator* const creator);
85
86 void OdeFcn(const double T, const double* const X, double* const XDot) const override { }
87 void AcceptedStep(const double T, const double* const X) override;
88
89#ifdef FH_VISUALIZATION
90 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
91 void RenderUpdate(const double T, const double* const X);
92#endif
93
94protected:
96 std::vector<double> Measure(const double T, const double* const X) const;
97
99 const double* Filtered(int offset) { return m_filter.GetValue() + offset; }
100
101 const double* OutWarpTensions(const double T, const double* const X) { return Filtered(m_indWarpTensions); }
102 const double* OutOuterDoorSpread(const double T, const double* const X) { return Filtered(m_indOuterDoorSpread); }
103 const double* OutDoorSpreads(const double T, const double* const X) { return Filtered(m_indDoorSpreads); }
104 const double* OutNetHeightsCenter(const double T, const double* const X) { return Filtered(m_indNetHeightsCenter); }
105 const double* OutNetHeightsPWing(const double T, const double* const X) { return Filtered(m_indNetHeightsPWing); }
106 const double* OutNetHeightsSWing(const double T, const double* const X) { return Filtered(m_indNetHeightsSWing); }
107 const double* OutNetWidthTop(const double T, const double* const X) { return Filtered(m_indNetWidthTop); }
108 const double* OutNetWidthBottom(const double T, const double* const X) { return Filtered(m_indNetWidthBottom); }
109 const double* OutNetSeafloorPressure(const double T, const double* const X) { return Filtered(m_indNetSeafloorPressure); }
110 const double* OutNetSeafloorFriction(const double T, const double* const X) { return Filtered(m_indNetSeafloorFriction); }
111
112 int m_numNets;
113 sfh::filters::FIR m_filter;
114 std::vector<ISignalPort*> m_inWarpForces;
115 std::vector<ISignalPort*> m_inDoorPos;
116 std::vector<ISignalPort*> m_inNetUpperPort;
117 std::vector<ISignalPort*> m_inNetLowerPort;
118 std::vector<ISignalPort*> m_inNetUpperStb;
119 std::vector<ISignalPort*> m_inNetLowerStb;
120 std::vector<ISignalPort*> m_inNetUpperCenter;
121 std::vector<ISignalPort*> m_inNetLowerCenter;
122 std::vector<ISignalPort*> m_inNetBottomContact;
123
124 // Offsets into the values. The first seven groups are the HUD lines, in order.
125 int m_indWarpTensions;
126 int m_indOuterDoorSpread;
127 int m_indDoorSpreads;
128 int m_indNetHeightsCenter;
129 int m_indNetWidthTop;
130 int m_indNetSeafloorPressure;
131 int m_indNetSeafloorFriction;
132 int m_indNetHeightsPWing;
133 int m_indNetHeightsSWing;
134 int m_indNetWidthBottom;
135 int m_numValues;
136
137#ifdef FH_VISUALIZATION
138 std::unique_ptr<ValuesDisplayBase> m_formatter;
139 fhsim::HudCorner m_corner;
140 std::vector<fhsim::HudLine> m_hudLines;
141#endif
142};
Definition TrawlReporter.h:79
std::vector< double > Measure(const double T, const double *const X) const
The unfiltered values at (T, X), in the layout of the Ind* offsets.
const double * Filtered(int offset)
The filtered values from offset on.
Definition TrawlReporter.h:99
static constexpr double kNewtonToTonneForce
Multiplier that shows a force in N as tonnes-force (t) on the HUD: 1 t is 1000 kg at standard gravity...
Definition TrawlReporter.h:82
constexpr double gravity
Gravity constant.
Definition marenv.h:19