FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
VisualScalarVolume.h
1#pragma once
2
8#include "VisualBakedScalarField.h"
9
10#include <memory>
11#include <string>
12
13#ifdef FH_VISUALIZATION
14# include "visual/ScalarVolume.h"
15
16# include <atomic>
17# include <thread>
18#endif
19
20class FhCamera;
21
22namespace environmentmodels
23{
24
98{
99public:
107 VisualScalarVolume(std::string SimObjectName, ISimObjectCreator* Creator);
108
111
112#ifdef FH_VISUALIZATION
121 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* Creator) override;
122
132 void RenderUpdate(const double T, const double* const X) override;
133#endif
134
135private:
136#ifdef FH_VISUALIZATION
138 void JoinWorker();
139
145 void StartBake(const double centre[3]);
146
154 void AdoptFinishedBake();
155
163 void RecordFailedTarget(const double centre[3]);
164
171 [[nodiscard]] bool MovedFarEnough(const double cameraPos[3], const double centre[3]) const;
172
177 void ApplyVolumeUniforms(const double centre[3]) const;
178
188 [[nodiscard]] bool CameraIsInsideBox(const double cameraPos[3]) const;
189
191 [[nodiscard]] util::SamplingBox MakeBox(const double centre[3]) const;
192#endif
193
194 double m_boxCentre[3];
195 double m_boxSize[3];
196 double m_referenceLength;
197 double m_rebakeFraction;
198 bool m_centreOnCamera;
199
200 int m_counts[3];
201
202#ifdef FH_VISUALIZATION
203 std::unique_ptr<visual::ScalarVolume> m_scalarVolume;
204
205 FhCamera* m_fhCamera;
206
207 double m_valueMin;
208 double m_valueMax;
209
210 bool m_hasPendingCentre;
211 double m_pendingCentre[3];
212
213 std::thread m_worker;
214 std::atomic_bool m_bakeFinished;
215 bool m_bakeRunning;
216
217 util::BakedField m_bakeResult;
218 double m_bakeResultCentre[3];
219 double m_bakeClampedFraction;
220 std::string m_bakeError;
221
222 bool m_hasFailedCentre;
223 double m_failedCentre[3];
224
225 bool m_cullingInside;
226#endif
227};
228
229} // namespace environmentmodels
Definition VisualBakedScalarField.h:46
Definition VisualScalarVolume.h:98
VisualScalarVolume(std::string SimObjectName, ISimObjectCreator *Creator)
~VisualScalarVolume() override
Joins any re-bake worker and releases the box; the base releases material and textures.
Environment SimObjects.
Definition Environment.h:25
A scalar field evaluated over a SamplingBox and encoded to 16-bit codes.
Definition ScalarFieldBake.h:52
Definition ScalarFieldBake.h:44