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
67#ifdef FH_VISUALIZATION
68# include "trawl/subroutines/ValuesDisplayBase.h"
69
70# include <fhsim/visual/renderer/Hud.h>
71# include <memory>
72#endif
73
74#include <string>
75#include <vector>
76
77class TrawlReporter : public SimObject
78{
79public:
80 TrawlReporter(const std::string& simObjectName, ISimObjectCreator* const creator);
81
82 void OdeFcn(const double T, const double* const X, double* const XDot) const override { }
83 void AcceptedStep(const double T, const double* const X) override;
84
85#ifdef FH_VISUALIZATION
86 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
87 void RenderUpdate(const double T, const double* const X);
88#endif
89
90protected:
92 std::vector<double> Measure(const double T, const double* const X) const;
93
95 const double* Filtered(int offset) { return m_filter.GetValue() + offset; }
96
97 const double* OutWarpTensions(const double T, const double* const X) { return Filtered(m_indWarpTensions); }
98 const double* OutOuterDoorSpread(const double T, const double* const X) { return Filtered(m_indOuterDoorSpread); }
99 const double* OutDoorSpreads(const double T, const double* const X) { return Filtered(m_indDoorSpreads); }
100 const double* OutNetHeightsCenter(const double T, const double* const X) { return Filtered(m_indNetHeightsCenter); }
101 const double* OutNetHeightsPWing(const double T, const double* const X) { return Filtered(m_indNetHeightsPWing); }
102 const double* OutNetHeightsSWing(const double T, const double* const X) { return Filtered(m_indNetHeightsSWing); }
103 const double* OutNetWidthTop(const double T, const double* const X) { return Filtered(m_indNetWidthTop); }
104 const double* OutNetWidthBottom(const double T, const double* const X) { return Filtered(m_indNetWidthBottom); }
105 const double* OutNetSeafloorPressure(const double T, const double* const X) { return Filtered(m_indNetSeafloorPressure); }
106 const double* OutNetSeafloorFriction(const double T, const double* const X) { return Filtered(m_indNetSeafloorFriction); }
107
108 int m_numNets;
109 sfh::filters::FIR m_filter;
110 std::vector<ISignalPort*> m_inWarpForces;
111 std::vector<ISignalPort*> m_inDoorPos;
112 std::vector<ISignalPort*> m_inNetUpperPort;
113 std::vector<ISignalPort*> m_inNetLowerPort;
114 std::vector<ISignalPort*> m_inNetUpperStb;
115 std::vector<ISignalPort*> m_inNetLowerStb;
116 std::vector<ISignalPort*> m_inNetUpperCenter;
117 std::vector<ISignalPort*> m_inNetLowerCenter;
118 std::vector<ISignalPort*> m_inNetBottomContact;
119
120 // Offsets into the values. The first seven groups are the HUD lines, in order.
121 int m_indWarpTensions;
122 int m_indOuterDoorSpread;
123 int m_indDoorSpreads;
124 int m_indNetHeightsCenter;
125 int m_indNetWidthTop;
126 int m_indNetSeafloorPressure;
127 int m_indNetSeafloorFriction;
128 int m_indNetHeightsPWing;
129 int m_indNetHeightsSWing;
130 int m_indNetWidthBottom;
131 int m_numValues;
132
133#ifdef FH_VISUALIZATION
134 std::unique_ptr<ValuesDisplayBase> m_formatter;
135 fhsim::HudCorner m_corner;
136 std::vector<fhsim::HudLine> m_hudLines;
137#endif
138};
Definition TrawlReporter.h:78
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:95