VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
localObjectManager.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2013 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 #pragma once
9 
10 #include <vrfGuiCore/vrfGuiCore.h>
17 #include <vrvCore/DtEntityState.h>
18 #include <vrvCore/DtStateView.h>
19 #include <vrvCore/DtIntersector.h>
23 
24 #include <vlutil/vlSmartPointers.h>
25 #include <boost/shared_ptr.hpp>
26 
27 #include <boost/archive/xml_iarchive.hpp>
28 #include <boost/archive/xml_oarchive.hpp>
29 #include <boost/serialization/access.hpp>
30 #include <boost/serialization/nvp.hpp>
31 #include <boost/serialization/list.hpp>
32 #include <boost/serialization/map.hpp>
33 #include <boost/serialization/vector.hpp>
34 #include <boost/serialization/string.hpp>
35 
37 
38 #include <matrix/vlVector.h>
39 
40 class DtEntityType;
41 
42 namespace makVrv
43 {
44  class DtDe;
45  class DtTacticalGraphicOverlay;
46  struct DtVrlinkSimulatedBaseState;
47  struct DtVrlinkSimulatedEntityState;
48 }
49 
52 namespace makVrf
53 {
54  class DtVrfObjectFacadeInterface;
55  class DtEnvironmentalFacadeCollection;
56  class DtEntityFacadeCollection;
57  struct DtVrlinkSimulatedEnvironmentProcess;
58 
66 
68  {
69  public:
70  enum ClampFlag
71  {
72  Highest = 0,
74  Closest
75  };
76 
78 
79  static DtLocalObjectManager& instance(makVrv::DtDe& de);
80  static void registerInstance(makVrv::DtDe& de, DtLocalObjectManager*);
81 
82  virtual ~DtLocalObjectManager();
83 
85  virtual bool isCreating() const;
86 
88  virtual void tacticalGraphicsVertexSelected(
89  const makVrv::DtUniqueID& selected, const makVrv::DtUniqueID& parentElementID);
90 
92  virtual void tacticalGraphicsVertexDeselected(
93  const makVrv::DtUniqueID& deselected, const makVrv::DtUniqueID& parent);
94 
96  virtual void slot_onCurrentSelectionChanged(
97  const makVrv::DtSelectionManager::IdSet& selected,
98  const makVrv::DtSelectionManager::IdSet& deselected);
99 
101  virtual DtVrfObjectFacadeInterface* facadeForID(makVrv::DtUniqueID);
102 
107  virtual DtEnvironmentalFacadeCollection* create(const DtVrlinkSimulatedEnvironmentProcess&, int dictionartToUse = -1);
108 
118  virtual DtEnvironmentalFacadeCollection* create(const DtEntityType& t,
119  const std::vector<DtVector>& localPoints,
120  int force,
122  int modelSet = -1, bool keepName = false, int dictionaryToUse = -1);
123 
128  virtual DtEntityFacadeCollection* create(const makVrv::DtVrlinkSimulatedEntityState&, const std::string& overlayParent = "",
129  int dictionaryToUse = -1);
130 
140  virtual DtEntityFacadeCollection* create(const DtEntityCreationData&,
141  int modelSet = -1, bool keepName = false, int dictionaryToUse = -1);
142 
144  virtual const makVrv::DtTacticalGraphicOverlay* createOnLayer(const std::string& layerName = "");
145 
147  virtual void completeStateUpdate(makVrv::DtUniqueID id);
148 
150  virtual void setVisible(makVrv::DtUniqueID id, bool hide);
151 
153  virtual bool isLocal(makVrv::DtUniqueID id) const;
154 
155  virtual void updateState(makVrv::DtUniqueID id);
156 
159  virtual void setEditable(makVrv::DtUniqueID id, bool);
160 
163  virtual bool isEditable(makVrv::DtUniqueID id) const;
164 
166  virtual bool isMemberOfLayer(makVrv::DtUniqueID id, const std::string& layername) const;
167 
169  virtual void deleteLocal(makVrv::DtUniqueID id);
170 
172  virtual void deleteAll(std::vector<DtEntityType> except = std::vector<DtEntityType>());
173 
175  virtual void deleteAllFromLayer(const std::string& layername);
176 
181  virtual void update(makVrv::DtElementID id, const std::string* name = 0, const std::vector<DtVector>& points = std::vector<DtVector>(),
182  int* force = 0, const std::string* overlay = 0, const std::string* userData = 0,
183  const std::map<std::string, std::string>* extendedData = 0, const std::map<int, DtString>* extendedLabels = 0,
184  double* newHeading = 0, int* color = 0, int* appearance = 0, const std::string* label = 0,
185  float* physicalLineHeight = 0, float* physicalLineWidth = 0, bool forceUpdate = true);
186 
188  virtual DtVector getVertexPosition(makVrv::DtElementID parent, makVrv::DtUniqueID vertexId) const;
189 
192  virtual void create(const DtEntityType& t, int force);
193 
195  virtual bool allSelectionIsLocal() const;
196 
198  virtual void setCanCreateLocalObjects(bool);
199 
201  virtual bool canCreateLocalObjects() const;
202 
204  virtual void save(const std::string&);
205 
207  virtual std::string toStringBuffer();
208 
210  virtual bool fromStringBuffer(const std::string&, bool removeAll = true);
211 
213  virtual bool load(const std::string&, bool removeAll = true);
214 
216  virtual int numberOfLocalObjects() const;
217 
220  virtual double groundHeight(const DtVector& lp, makVrv::DtIntersector::IntersectProperties props =
221  makVrv::DtIntersector::SupportNodes, bool useHighestLOD = true, DtVector* clampedPoint = 0,
222  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(), makVrv::DtUniqueID* hitId = 0) const;
223 
227  virtual DtVector clampToGround(const DtVector&, makVrv::DtIntersector::IntersectProperties props =
228  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
229  bool useHighestLOD = false, bool ignoreDynamicOcean = false, ClampFlag useHighestPolygon = Closest,
230  makVrv::DtUniqueID* hitId = 0) const;
231 
234  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&, makVrv::DtIntersector::IntersectProperties props =
235  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
236  bool useHighestLOD = false, bool ignoreDynamicOcean = false, ClampFlag useHighestPolygon = Closest, makVrv::DtUniqueID* hitId = 0) const;
237 
238  virtual std::string generateUniqueName(const std::string& base, bool addNumberToBegin = false) const;
239 
241  virtual void ignoreFromArchive(const DtEntityType&);
242  virtual void removeIgnoreFromArchive(const DtEntityType&);
243 
244  protected:
246  virtual void slot_elementAttributeChangeRequested(
247  makVrv::DtUniqueID id, makVrv::DtUniqueID parentId, DtBoost::shared_ptr<const makVrv::DtElementAttribute> atr );
248 
249  virtual void handleElementAttributeChanged(
251 
253  virtual void slot_onStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*);
254 
256  virtual void completeStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*, bool forceIfHidden = false);
257 
261 
263  virtual void finalizeObjectCreation(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
264  virtual void slot_stoppedObjectCreation();
265 
267  virtual bool shouldArchive(makVrv::DtVrlinkSimulatedBaseState*) const;
268 
269  public:
274  boost::signal<void (bool)> signal_creating;
275 
277  boost::signal<void (DtVrfObjectFacadeInterface*, makVrv::DtVrlinkSimulatedBaseState*)> signal_objectCreated;
278 
280  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectAboutToBeDeleted;
281 
283  boost::signal<void (bool)> signal_loading;
284 
286  boost::signal<void (makVrv::DtUniqueID)> signal_objectDeleted;
288 
289  protected:
290  friend class boost::serialization::access;
291 
295  template<class Archive>
296  void serialize(Archive & ar, const unsigned int version)
297  {
298  if (Archive::is_loading::value)
299  {
300  read(*(boost::archive::xml_iarchive*)&ar);
301  }
302  else
303  {
304  write(*(boost::archive::xml_oarchive*)&ar);
305  }
306  }
307 
308  virtual void write(boost::archive::xml_oarchive& out);
309  virtual void read(boost::archive::xml_iarchive& in);
310 
311  protected:
313 
315 
317  typedef std::map<makVrv::DtUniqueID, DtVrfObjectFacadeInterface*> LocalObjects;
320 
321  typedef std::map<makVrv::DtUniqueID, makVrv::DtVrlinkSimulatedBaseState*> LocalStateData;
323 
325 
326  std::vector<DtEntityType> myIgnoreFromArchive;
327 
329  {
331  : myProps(makVrv::DtIntersector::IntersectProperties(0))
332  , myUseHighestLOD(false)
333  , myIgnoreDynamicOcean(false)
334  , myUseHighestPolygon(Closest)
335  , myHitId(0)
336  {
337  }
338 
340  bool useHighestLOD, bool ignoreDynamicOcean, ClampFlag useHighestPolygon)
341  : myCheckPoint(lp)
342  , myProps(props)
343  , myUseHighestLOD(useHighestLOD)
344  , myIgnoreDynamicOcean(ignoreDynamicOcean)
345  , myUseHighestPolygon(useHighestPolygon)
346  , myHitId(0)
347  {
348  }
349 
351 
353  {
354  myCheckPoint = orig.myCheckPoint;
355  myProps = orig.myProps;
356  myUseHighestLOD = orig.myUseHighestLOD;
357  myIgnoreDynamicOcean = orig.myIgnoreDynamicOcean;
358  myUseHighestPolygon = orig.myUseHighestPolygon;
359  myCheckPoint = orig.myCheckPoint;
360  myHitId = orig.myHitId;
361 
362  return *this;
363  }
364 
365  bool operator==(const LastCheckedGroundInformation& orig) const
366  {
367  return ((myCheckPoint == orig.myCheckPoint) &&
368  (myProps == orig.myProps) &&
369  (myUseHighestLOD == orig.myUseHighestLOD) &&
370  (myIgnoreDynamicOcean == orig.myIgnoreDynamicOcean) &&
371  (myUseHighestPolygon == orig.myUseHighestPolygon));
372  }
373 
381  };
382 
384  };
385 
387  {
388  public:
389  DtSerializableVector() : mySource(0) {};
391  DtVector(src),
392  mySource(&src)
393  {
394  }
395 
396  void operator=(const DtVector& rhs)
397  {
398  ((DtVector&)*this) = rhs;
399  }
400 
401  protected:
402  friend class boost::serialization::access;
403 
407  template<class Archive>
408  void serialize(Archive & ar, const unsigned int version)
409  {
410  double x = myRep[0], y = myRep[1], z = myRep[2];
411 
412  ar & BOOST_SERIALIZATION_NVP(x);
413  ar & BOOST_SERIALIZATION_NVP(y);
414  ar & BOOST_SERIALIZATION_NVP(z);
415 
416  if (Archive::is_loading::value)
417  {
418  myRep[0] = x;
419  myRep[1] = y;
420  myRep[2] = z;
421 
422  if (mySource)
423  {
424  *mySource = *this;
425  }
426  }
427  }
428 
429  protected:
431  };
432 
433  class DT_DLL_VRFGUICORE DtSerializableTaitBryan : public DtTaitBryan
434  {
435  public:
436  DtSerializableTaitBryan() : mySource(0) {};
437  DtSerializableTaitBryan(DtTaitBryan& src) :
438  DtTaitBryan(src),
439  mySource(&src)
440  {
441  }
442 
443  protected:
444  friend class boost::serialization::access;
445 
449  template<class Archive>
450  void serialize(Archive & ar, const unsigned int version)
451  {
452  ar & BOOST_SERIALIZATION_NVP(myPsi);
453  ar & BOOST_SERIALIZATION_NVP(myTheta);
454  ar & BOOST_SERIALIZATION_NVP(myPhi);
455 
456  if (Archive::is_loading::value && mySource)
457  {
458  *mySource = *this;
459  }
460  }
461 
462  protected:
463  DtTaitBryan* mySource;
464  };
465 
466  template <typename _Type, typename _SrcType>
468  {
469  public:
471  DtSerializableStdVector(std::vector<_SrcType>& src) :
472  mySource(&src)
473  {
474  myValues.resize(src.size());
475 
476  typename std::vector<_SrcType>::const_iterator srcIter = src.begin();
477  typename std::vector<_Type>::iterator tgtIter = myValues.begin();
478 
479  while (srcIter != src.end())
480  {
481  *tgtIter = *srcIter;
482  ++srcIter;
483  ++tgtIter;
484  }
485  }
486 
487  protected:
489 
493  template<class Archive>
494  void serialize(Archive & ar, const unsigned int version)
495  {
496  ar & BOOST_SERIALIZATION_NVP(myValues);
497 
498  if (Archive::is_loading::value && mySource)
499  {
500  mySource->clear();
501  mySource->resize(myValues.size());
502 
503  typename std::vector<_Type>::const_iterator src = myValues.begin();
504  typename std::vector<_SrcType>::iterator tgt = mySource->begin();
505 
506  while (src != myValues.end())
507  {
508  *tgt = *src;
509  ++src;
510  ++tgt;
511  }
512  }
513  }
514 
515  protected:
516  std::vector<_SrcType>* mySource;
517  std::vector<_Type> myValues;
518  };
519 
521  {
523 
525  makVrv::DtVrlinkSimulatedEntityState(orig)
526  {
527  }
528 
529  protected:
530  friend class boost::serialization::access;
531 
535  template<class Archive>
536  void serialize(Archive & ar, const unsigned int version)
537  {
538  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
539  ar & BOOST_SERIALIZATION_NVP(myEntityId);
540  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
541  ar & BOOST_SERIALIZATION_NVP(myEntityType);
542  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
543  ar & BOOST_SERIALIZATION_NVP(myForce);
544 
545  DtSerializableVector loc(myLocation);
546  DtSerializableVector vel(myVelocity);
547  DtSerializableVector relVel(myRelativeVelocity);
548  DtSerializableVector acc(myAcceleration);
549  DtSerializableTaitBryan ori(myOrientation);
550  DtSerializableVector rotVel(myRotationalVelocity);
551 
552  ar & BOOST_SERIALIZATION_NVP(loc);
553  ar & BOOST_SERIALIZATION_NVP(vel);
554  ar & BOOST_SERIALIZATION_NVP(relVel);
555  ar & BOOST_SERIALIZATION_NVP(acc);
556  ar & BOOST_SERIALIZATION_NVP(ori);
557  ar & BOOST_SERIALIZATION_NVP(rotVel);
558 
559  ar & BOOST_SERIALIZATION_NVP(myAppearance);
560  ar & BOOST_SERIALIZATION_NVP(myCapabilities);
561  ar & BOOST_SERIALIZATION_NVP(myDIGuyAppearance);
562  ar & BOOST_SERIALIZATION_NVP(myDIGuyCharacterType);
563  ar & BOOST_SERIALIZATION_NVP(myGuise);
564  ar & BOOST_SERIALIZATION_NVP(myDRAlgorithm);
565  }
566  };
567 
569  {
571 
574  {
575  }
576 
577  protected:
578  friend class boost::serialization::access;
579 
583  template<class Archive>
584  void serialize(Archive & ar, const unsigned int version)
585  {
586  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
587  ar & BOOST_SERIALIZATION_NVP(myEntityId);
588  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
589  ar & BOOST_SERIALIZATION_NVP(myEntityType);
590  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
591  ar & BOOST_SERIALIZATION_NVP(myForce);
592 
594 
595  ar & BOOST_SERIALIZATION_NVP(pts);
596 
597  ar & BOOST_SERIALIZATION_NVP(myUserData);
598  ar & BOOST_SERIALIZATION_NVP(myPenStyle);
599  ar & BOOST_SERIALIZATION_NVP(myFillStyle);
600  ar & BOOST_SERIALIZATION_NVP(myLineWidth);
601  ar & BOOST_SERIALIZATION_NVP(myColor);
602  ar & BOOST_SERIALIZATION_NVP(myLabel);
603  ar & BOOST_SERIALIZATION_NVP(myClosedFigure);
604  ar & BOOST_SERIALIZATION_NVP(myProjected);
605  ar & BOOST_SERIALIZATION_NVP(myAttributes);
606  ar & BOOST_SERIALIZATION_NVP(myOverlayParent);
607 
608  if (version >= 2)
609  {
610  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineHeight);
611  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineWidth);
612  }
613  }
614  };
615 }
616 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)