VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
movementFile.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
11 #include "vrfutil/vrfutilDefines.h"
12 
13 #include <boost/serialization/access.hpp>
14 #include <boost/serialization/nvp.hpp>
15 #include <boost/serialization/list.hpp>
16 #include <boost/serialization/map.hpp>
17 #include <boost/serialization/vector.hpp>
18 #include <boost/serialization/string.hpp>
19 #include <boost/function.hpp>
20 #include <boost/bind/bind.hpp>
21 
22 #include <vlutil/vlFilename.h>
23 #include <matrix/vlVector.h>
24 #include <matrix/vlTaitBryan.h>
25 
26 #include <set>
27 #include <vector>
28 
34 
37 {
38 public:
39  struct Column
40  {
42  std::string myColumnType;
43  std::string myColumnUnits;
44 
45  template<class Archive>
46  void serialize(Archive & ar, const unsigned int version)
47  {
48  ar & BOOST_SERIALIZATION_NVP(myColumnInFile);
49  ar & BOOST_SERIALIZATION_NVP(myColumnType);
50  ar & BOOST_SERIALIZATION_NVP(myColumnUnits);
51  }
52  };
53 
54  typedef std::vector<Column> Columns;
55 
57  {
58  Milliseconds = 0,
61  Hours
62  };
63 
65  {
66  Uknown = -1,
67  Feet = 0,
73  Degrees
74  };
75 
76 public:
79 
82 
85 
88 
114  virtual void addColumn(const std::string& type, const std::string& units, int columnInFile = -1);
115 
117  virtual void removeColumn(int);
118 
120  virtual const Columns& columns() const;
121  virtual void setColumns(const Columns&);
122 
124  virtual void setRowStart(int);
125 
126  virtual int rowStart() const;
127 
129  virtual int timeColumn() const;
130 
132  virtual int altitudeColumn() const;
133  virtual int altitudeUnits() const;
134 
136  virtual int rangeColumn() const;
137  virtual int rangeUnits() const;
138 
140  virtual int lateralDistanceColumn() const;
141  virtual int lateralDistanceUnits() const;
142 
144  virtual int headingColumn() const;
145  virtual int headingUnits() const;
146 
148  virtual int pitchColumn() const;
149  virtual int pitchUnits() const;
150 
152  virtual int rollColumn() const;
153  virtual int rollUnits() const;
154 
155  virtual int column(const std::string&) const;
156  virtual int units(const std::string&) const;
157  virtual double convertValueForColumn(int col, double value) const;
158 
160  virtual double convertTimeToSeconds(double time) const;
161 
163  virtual void updateCache();
164 
165  virtual int mapToInternalValue(const std::string&) const;
166 
168  virtual double convertUnitsToNative(double d, int conv) const;
169 
171  virtual DtString toString() const;
172 
174  virtual void fromString(const DtString&);
175 
179  static DtScriptedMovementFileConfiguration defaultBallisticMissileConfiguration();
180 
184  static DtScriptedMovementFileConfiguration defaultPrecisionMovementConfiguration();
185 
188  virtual bool setColumn(int col, const std::string& type, const std::string& unit, int columnInFile = -1);
189 
191  virtual void column(int col, int& columnInFile, std::string& type, std::string& unit) const;
192 
194  virtual void setDisplayName(const std::string&);
195  virtual const std::string& displayName() const;
196 
198  virtual void setUniqueId(const std::string&);
199  virtual const std::string& uniqueId() const;
200 
201 protected:
202 
204  friend class boost::serialization::access;
205 
209  template<class Archive>
210  void serialize(Archive & ar, const unsigned int version)
211  {
212  ar & BOOST_SERIALIZATION_NVP(myRowStart);
213  ar & BOOST_SERIALIZATION_NVP(myColumns);
214 
215  if (version >= 2)
216  {
217  ar & BOOST_SERIALIZATION_NVP(myDisplayName);
218  ar & BOOST_SERIALIZATION_NVP(myUniqueId);
219  }
220 
221  if (Archive::is_loading::value)
222  {
223  updateCache();
224  }
225  }
226 
227 protected:
230 
231  struct CacheColumn
232  {
233  CacheColumn() : csvColumn(-1), conversion(-1) {};
234  CacheColumn(int csv, int col) : csvColumn(csv), conversion(col) {};
235  CacheColumn(const CacheColumn& orig) : csvColumn(orig.csvColumn), conversion(orig.conversion) {};
236  int csvColumn;
238  };
239 
240  typedef std::map<std::string, CacheColumn> CachedMap;
241 
244 
245  std::string myUniqueId;
246  std::string myDisplayName;
247 };
248 
249 typedef std::vector<double> DtMovementFileRow;
250 typedef std::vector<DtMovementFileRow> DtMovementFileData;
251 
254 {
255 public:
258  virtual DtMovementFileData loadMovementFileData(const DtFilename&, const std::string& configuration,
259  int loadRows = -1) const = 0;
260 
262  virtual DtScriptedMovementFileConfiguration currentFileConfiguration() const = 0;
263 
265  virtual DtScriptedMovementFileConfiguration defaultFileConfiguration() const = 0;
266 
268  virtual std::vector<std::string> formatsForFile(const DtFilename&) const = 0;
269 };
270 
273 {
274 public:
275  typedef boost::function<DtMovementFileLoaderInterface* ()> MovementFileLoaderInterfaceCreator;
276 
277  typedef std::vector<DtScriptedMovementFileConfiguration> MovementFileConfigurations;
278 
279 public:
281  DtMovementFile();
282 
284  virtual ~DtMovementFile();
285 
288 
290  DtMovementFile& operator=(const DtMovementFile&);
291 
294  virtual double simTime(int) const;
295 
297  virtual int numRows() const;
298 
300  virtual bool hasOffsetOrientation() const;
301 
305  virtual DtVector bodyOffsetVector(int row) const;
306 
309  virtual DtTaitBryan orientationOffset(int row) const;
310 
312  virtual bool isLoaded() const;
313 
316  virtual bool load(const DtFilename& file, const std::string& configuration, int rowsToLoad = -1);
317 
319  virtual int movementRow(double) const;
320 
322  virtual void reset();
323 
326  virtual void setObjectOffsetLocation(int row, const DtVector&);
327 
330  virtual void setObjectOffsetOrientation(int row, const DtTaitBryan&);
331 
333  virtual void setTimeDelta(int forRow, double timeDelta);
334 
336  virtual void removeRow(int);
337 
340  virtual void setDefaultTimeScale(double);
341  virtual double defaultTimeScale() const;
342 
345  static DtScriptedMovementFileConfiguration defaultConfigurationForFile(const DtFilename&);
346 
348  static std::vector<std::string> dialogStrings();
349 
351  static int addLoadableFileType(std::string extension, std::string displayString, MovementFileLoaderInterfaceCreator);
352 
354  static std::vector<std::string> supportedExtensions();
355 
357  static void removeLoadableFileType(const DtString& extension);
358 
361  static DtMovementFileLoaderInterface* loader(const DtFilename& filename);
362 
364  static std::vector<std::string> formatsForFile(const DtFilename&);
365 
367  static MovementFileConfigurations loadMovementFileConfigurations(const DtFilename& directory);
368 
370  static bool saveMovementFileConfigurations(const MovementFileConfigurations& configs, const DtFilename& file);
371 
373  const DtScriptedMovementFileConfiguration& configuration() const { return myConfiguration; };
374  DtScriptedMovementFileConfiguration& configuration() { return myConfiguration; };
375 
376 protected:
377  DtScriptedMovementFileConfiguration myConfiguration;
380 
382  {
384  std::string displayString;
385  };
386 
387  typedef std::map<std::string, MovementFileLoader> MovementFileLoaders;
389 
390  std::shared_ptr<DtMovementFileLoaderInterface> myMovementFileInterface;
391 };
392 
394 {
395 public:
396  DtMovementFileAutoRegister(const std::string& extension, const std::string& displayString,
398  : myExtension(extension)
399  {
400  DtMovementFile::addLoadableFileType(extension, displayString, fcn);
401  }
402 
404  {
405  DtMovementFile::removeLoadableFileType(myExtension.c_str());
406  }
407 
408 protected:
409  std::string myExtension;
410 };
411 
412 #define REGISTER_MOVEMENT_FILE_LOADER(extension, displayString, creator) \
413  static DtMovementFileAutoRegister autoRegisterMovementFileInt(extension, displayString, boost::bind(&creator));
414 
Interface that must be subclassed in order to be able to load a file for the movement file interface...
Definition: movementFile.h:253
BOOST_CLASS_VERSION(makArchives::DtDiGuySettingsRecord, 3)
std::string myColumnUnits
Definition: movementFile.h:43
int conversion
Definition: movementFile.h:237
virtual ~DtMovementFileAutoRegister()
Definition: movementFile.h:403
std::map< std::string, MovementFileLoader > MovementFileLoaders
Definition: movementFile.h:387
CachedMap myCachedColumnsByType
Definition: movementFile.h:242
TimeConversion
Definition: movementFile.h:56
CachedMap myCachedColumnsByColumn
Definition: movementFile.h:243
Definition: movementFile.h:68
std::map< std::string, CacheColumn > CachedMap
Definition: movementFile.h:240
static int addLoadableFileType(std::string extension, std::string displayString, MovementFileLoaderInterfaceCreator)
Adds a new loadable file type and the creator for that file. Returns the number of items now in the l...
std::shared_ptr< DtMovementFileLoaderInterface > myMovementFileInterface
Definition: movementFile.h:390
void serialize(Archive &ar, const unsigned int version)
Definition: movementFile.h:46
CacheColumn(int csv, int col)
Definition: movementFile.h:234
DistanceConversion
Definition: movementFile.h:64
int myRowStart
Definition: movementFile.h:228
Definition: movementFile.h:39
std::string displayString
Definition: movementFile.h:384
std::vector< DtMovementFileRow > DtMovementFileData
Definition: movementFile.h:250
DtMovementFileData myMovementFileData
Definition: movementFile.h:379
This class will load in and return data from a movement file.
Definition: movementFile.h:272
std::vector< DtScriptedMovementFileConfiguration > MovementFileConfigurations
Definition: movementFile.h:277
std::string myExtension
Definition: movementFile.h:409
IMGUI_API void Columns(int count=1, const char *id=NULL, bool border=true)
Definition: movementFile.h:393
std::string myUniqueId
Definition: movementFile.h:245
DtMovementFileAutoRegister(const std::string &extension, const std::string &displayString, DtMovementFile::MovementFileLoaderInterfaceCreator fcn)
Definition: movementFile.h:396
boost::function< DtMovementFileLoaderInterface *()> MovementFileLoaderInterfaceCreator
Definition: movementFile.h:275
std::vector< Column > Columns
Definition: movementFile.h:54
static MovementFileLoaders * theMovementFileLoaders
Definition: movementFile.h:388
double myDefaultTimeScale
Definition: movementFile.h:378
Definition: movementFile.h:69
CacheColumn()
Definition: movementFile.h:233
int myColumnInFile
Definition: movementFile.h:41
std::vector< double > DtMovementFileRow
Definition: movementFile.h:249
static void removeLoadableFileType(const DtString &extension)
Removes a loadable type.
The DtScriptedMovementObject will contain information about an object that can be used for scripted m...
Definition: movementFile.h:36
std::string myColumnType
Definition: movementFile.h:42
MovementFileLoaderInterfaceCreator fcn
Definition: movementFile.h:383
const DtScriptedMovementFileConfiguration & configuration() const
Returns the configuration for the file.
Definition: movementFile.h:373
#define DT_DLL_vrfutil
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfutilDefines.h:34
std::string myDisplayName
Definition: movementFile.h:246
Columns myColumns
Definition: movementFile.h:229
Definition: movementFile.h:381
void serialize(Archive &ar, const unsigned int version)
When the class Archive corresponds to an output archive, the &amp; operator is defined similar to &lt;&lt;...
Definition: movementFile.h:210

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)