VR-Forces 4.2 Class Documentation
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.hpp>
21 #include <boost/shared_ptr.hpp>
22 
23 #include <vlutil/vlFilename.h>
24 #include <matrix/vlVector.h>
25 #include <matrix/vlTaitBryan.h>
26 
27 #include <set>
28 #include <vector>
29 
35 
38 {
39 public:
40  struct Column
41  {
43  std::string myColumnType;
44  std::string myColumnUnits;
45 
46  template<class Archive>
47  void serialize(Archive & ar, const unsigned int version)
48  {
49  ar & BOOST_SERIALIZATION_NVP(myColumnInFile);
50  ar & BOOST_SERIALIZATION_NVP(myColumnType);
51  ar & BOOST_SERIALIZATION_NVP(myColumnUnits);
52  }
53  };
54 
55  typedef std::vector<Column> Columns;
56 
58  {
59  Milliseconds = 0,
62  Hours
63  };
64 
66  {
67  Uknown = -1,
68  Feet = 0,
74  Degrees
75  };
76 
77 public:
80 
83 
86 
89 
115  virtual void addColumn(const std::string& type, const std::string& units, int columnInFile = -1);
116 
118  virtual void removeColumn(int);
119 
121  virtual const Columns& columns() const;
122  virtual void setColumns(const Columns&);
123 
125  virtual void setRowStart(int);
126 
127  virtual int rowStart() const;
128 
130  virtual int timeColumn() const;
131 
133  virtual int altitudeColumn() const;
134  virtual int altitudeUnits() const;
135 
137  virtual int rangeColumn() const;
138  virtual int rangeUnits() const;
139 
141  virtual int lateralDistanceColumn() const;
142  virtual int lateralDistanceUnits() const;
143 
145  virtual int headingColumn() const;
146  virtual int headingUnits() const;
147 
149  virtual int pitchColumn() const;
150  virtual int pitchUnits() const;
151 
153  virtual int rollColumn() const;
154  virtual int rollUnits() const;
155 
156  virtual int column(const std::string&) const;
157  virtual int units(const std::string&) const;
158  virtual double convertValueForColumn(int col, double value) const;
159 
161  virtual double convertTimeToSeconds(double time) const;
162 
164  virtual void updateCache();
165 
166  virtual int mapToInternalValue(const std::string&) const;
167 
169  virtual double convertUnitsToNative(double d, int conv) const;
170 
172  virtual DtString toString() const;
173 
175  virtual void fromString(const DtString&);
176 
180  static DtScriptedMovementFileConfiguration defaultBallisticMissileConfiguration();
181 
185  static DtScriptedMovementFileConfiguration defaultPrecisionMovementConfiguration();
186 
189  virtual bool setColumn(int col, const std::string& type, const std::string& unit, int columnInFile = -1);
190 
192  virtual void column(int col, int& columnInFile, std::string& type, std::string& unit) const;
193 
195  virtual void setDisplayName(const std::string&);
196  virtual const std::string& displayName() const;
197 
199  virtual void setUniqueId(const std::string&);
200  virtual const std::string& uniqueId() const;
201 
202 protected:
203 
205  friend class boost::serialization::access;
206 
210  template<class Archive>
211  void serialize(Archive & ar, const unsigned int version)
212  {
213  ar & BOOST_SERIALIZATION_NVP(myRowStart);
214  ar & BOOST_SERIALIZATION_NVP(myColumns);
215 
216  if (version >= 2)
217  {
218  ar & BOOST_SERIALIZATION_NVP(myDisplayName);
219  ar & BOOST_SERIALIZATION_NVP(myUniqueId);
220  }
221 
222  if (Archive::is_loading::value)
223  {
224  updateCache();
225  }
226  }
227 
228 protected:
231 
232  struct CacheColumn
233  {
234  CacheColumn() : csvColumn(-1), conversion(-1) {};
235  CacheColumn(int csv, int col) : csvColumn(csv), conversion(col) {};
236  CacheColumn(const CacheColumn& orig) : csvColumn(orig.csvColumn), conversion(orig.conversion) {};
237  int csvColumn;
239  };
240 
241  typedef std::map<std::string, CacheColumn> CachedMap;
242 
245 
246  std::string myUniqueId;
247  std::string myDisplayName;
248 };
249 
250 typedef std::vector<double> DtMovementFileRow;
251 typedef std::vector<DtMovementFileRow> DtMovementFileData;
252 
255 {
256 public:
259  virtual DtMovementFileData loadMovementFileData(const DtFilename&, const std::string& configuration,
260  int loadRows = -1) const = 0;
261 
263  virtual DtScriptedMovementFileConfiguration currentFileConfiguration() const = 0;
264 
266  virtual DtScriptedMovementFileConfiguration defaultFileConfiguration() const = 0;
267 
269  virtual std::vector<std::string> formatsForFile(const DtFilename&) const = 0;
270 };
271 
274 {
275 public:
276  typedef boost::function<DtMovementFileLoaderInterface* ()> MovementFileLoaderInterfaceCreator;
277 
278  typedef std::vector<DtScriptedMovementFileConfiguration> MovementFileConfigurations;
279 
280 public:
282  DtMovementFile();
283 
285  virtual ~DtMovementFile();
286 
289 
291  DtMovementFile& operator=(const DtMovementFile&);
292 
295  virtual double simTime(int) const;
296 
298  virtual int numRows() const;
299 
301  virtual bool hasOffsetOrientation() const;
302 
306  virtual DtVector bodyOffsetVector(int row) const;
307 
310  virtual DtTaitBryan orientationOffset(int row) const;
311 
313  virtual bool isLoaded() const;
314 
317  virtual bool load(const DtFilename& file, const std::string& configuration, int rowsToLoad = -1);
318 
320  virtual int movementRow(double) const;
321 
323  virtual void reset();
324 
327  virtual void setObjectOffsetLocation(int row, const DtVector&);
328 
331  virtual void setObjectOffsetOrientation(int row, const DtTaitBryan&);
332 
334  virtual void setTimeDelta(int forRow, double timeDelta);
335 
337  virtual void removeRow(int);
338 
341  virtual void setDefaultTimeScale(double);
342  virtual double defaultTimeScale() const;
343 
346  static DtScriptedMovementFileConfiguration defaultConfigurationForFile(const DtFilename&);
347 
349  static std::vector<std::string> dialogStrings();
350 
352  static int addLoadableFileType(std::string extension, std::string displayString, MovementFileLoaderInterfaceCreator);
353 
355  static std::vector<std::string> supportedExtensions();
356 
358  static void removeLoadableFileType(const DtString& extension);
359 
362  static DtMovementFileLoaderInterface* loader(const DtFilename& filename);
363 
365  static std::vector<std::string> formatsForFile(const DtFilename&);
366 
368  static MovementFileConfigurations loadMovementFileConfigurations(const DtFilename& directory);
369 
371  static bool saveMovementFileConfigurations(const MovementFileConfigurations& configs, const DtFilename& file);
372 
373 protected:
377 
379  {
381  std::string displayString;
382  };
383 
384  typedef std::map<std::string, MovementFileLoader> MovementFileLoaders;
386 
387  boost::shared_ptr<DtMovementFileLoaderInterface> myMovementFileInterface;
388 };
389 
390 #define REGISTER_MOVEMENT_FILE_LOADER(extension, displayString, creator) \
391  static int autoRegisterMovementFileInt = DtMovementFile::addLoadableFileType(extension, displayString, boost::bind(&creator));
392 

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)