VR-Forces Development_Version 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:
71 
72  static DtLocalObjectManager& instance(makVrv::DtDe& de);
73  static void registerInstance(makVrv::DtDe& de, DtLocalObjectManager*);
74 
75  virtual ~DtLocalObjectManager();
76 
78  virtual bool isCreating() const;
79 
81  virtual void tacticalGraphicsVertexSelected(
82  const makVrv::DtUniqueID& selected, const makVrv::DtUniqueID& parentElementID);
83 
85  virtual void tacticalGraphicsVertexDeselected(
86  const makVrv::DtUniqueID& deselected, const makVrv::DtUniqueID& parent);
87 
89  virtual void slot_onCurrentSelectionChanged(
90  const makVrv::DtSelectionManager::IdSet& selected,
91  const makVrv::DtSelectionManager::IdSet& deselected);
92 
94  virtual DtVrfObjectFacadeInterface* facadeForID(makVrv::DtUniqueID);
95 
99 
107  virtual DtEnvironmentalFacadeCollection* create(const DtEntityType& t,
108  const std::vector<DtVector>& localPoints,
109  int force,
111  int modelSet = -1, bool keepName = false);
112 
115  virtual DtEntityFacadeCollection* create(const makVrv::DtVrlinkSimulatedEntityState&, const std::string& overlayParent = "");
116 
124  virtual DtEntityFacadeCollection* create(const DtEntityCreationData&,
125  int modelSet = -1, bool keepName = false);
126 
128  virtual const makVrv::DtTacticalGraphicOverlay* createOnLayer(const std::string& layerName = "");
129 
131  virtual void completeStateUpdate(makVrv::DtUniqueID id);
132 
134  virtual void setVisible(makVrv::DtUniqueID id, bool hide);
135 
137  virtual bool isLocal(makVrv::DtUniqueID id) const;
138 
139  virtual void updateState(makVrv::DtUniqueID id);
140 
143  virtual void setEditable(makVrv::DtUniqueID id, bool);
144 
147  virtual bool isEditable(makVrv::DtUniqueID id) const;
148 
150  virtual bool isMemberOfLayer(makVrv::DtUniqueID id, const std::string& layername) const;
151 
153  virtual void deleteLocal(makVrv::DtUniqueID id);
154 
156  virtual void deleteAll(std::vector<DtEntityType> except = std::vector<DtEntityType>());
157 
159  virtual void deleteAllFromLayer(const std::string& layername);
160 
165  virtual void update(makVrv::DtElementID id, const std::string* name = 0, const std::vector<DtVector>& points = std::vector<DtVector>(),
166  int* force = 0, const std::string* overlay = 0, const std::string* userData = 0,
167  const std::map<std::string, std::string>* extendedData = 0, const std::map<int, DtString>* extendedLabels = 0,
168  double* newHeading = 0, int* color = 0, int* appearance = 0, const std::string* label = 0,
169  float* physicalLineHeight = 0, float* physicalLineWidth = 0, bool forceUpdate = true);
170 
172  virtual DtVector getVertexPosition(makVrv::DtElementID parent, makVrv::DtUniqueID vertexId) const;
173 
176  virtual void create(const DtEntityType& t, int force);
177 
179  virtual bool allSelectionIsLocal() const;
180 
182  virtual void setCanCreateLocalObjects(bool);
183 
185  virtual bool canCreateLocalObjects() const;
186 
188  virtual void save(const std::string&);
189 
191  virtual bool load(const std::string&, bool removeAll = true);
192 
194  virtual int numberOfLocalObjects() const;
195 
198  virtual double groundHeight(const DtVector& lp, makVrv::DtIntersector::IntersectProperties props =
199  makVrv::DtIntersector::SupportNodes, bool useHighest = true, DtVector* clampedPoint = 0,
200  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(), makVrv::DtUniqueID* hitId = 0) const;
201 
205  virtual DtVector clampToGround(const DtVector&, makVrv::DtIntersector::IntersectProperties props =
206  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
207  bool useHighestLOD = false, bool ignoreDynamicOcean = false, bool useHighestPolygon = false,
208  makVrv::DtUniqueID* hitId = 0) const;
209 
212  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&, makVrv::DtIntersector::IntersectProperties props =
213  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
214  bool useHighestLOD = false, bool ignoreDynamicOcean = false, bool useHighestPolygon = false, makVrv::DtUniqueID* hitId = 0) const;
215 
216  virtual std::string generateUniqueName(const std::string& base, bool addNumberToBegin = false) const;
217 
219  virtual void ignoreFromArchive(const DtEntityType&);
220  virtual void removeIgnoreFromArchive(const DtEntityType&);
221 
222  protected:
224  virtual void slot_elementAttributeChangeRequested(
225  makVrv::DtUniqueID id, makVrv::DtUniqueID parentId, DtBoost::shared_ptr<const makVrv::DtElementAttribute> atr );
226 
227  virtual void handleElementAttributeChanged(
229 
231  virtual void slot_onStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*);
232 
234  virtual void completeStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*, bool forceIfHidden = false);
235 
239 
241  virtual void finalizeObjectCreation(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
242  virtual void slot_stoppedObjectCreation();
243 
245  virtual bool shouldArchive(makVrv::DtVrlinkSimulatedBaseState*) const;
246 
247  public:
252  boost::signal<void (bool)> signal_creating;
253 
255  boost::signal<void (DtVrfObjectFacadeInterface*, makVrv::DtVrlinkSimulatedBaseState*)> signal_objectCreated;
256 
258  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectAboutToBeDeleted;
259 
261  boost::signal<void (bool)> signal_loading;
262 
264  boost::signal<void (makVrv::DtUniqueID)> signal_objectDeleted;
266 
267  protected:
268  friend class boost::serialization::access;
269 
273  template<class Archive>
274  void serialize(Archive & ar, const unsigned int version)
275  {
276  if (Archive::is_loading::value)
277  {
278  read(*(boost::archive::xml_iarchive*)&ar);
279  }
280  else
281  {
282  write(*(boost::archive::xml_oarchive*)&ar);
283  }
284  }
285 
286  virtual void write(boost::archive::xml_oarchive& out);
287  virtual void read(boost::archive::xml_iarchive& in);
288 
289  protected:
291 
293 
295  typedef std::map<makVrv::DtUniqueID, DtVrfObjectFacadeInterface*> LocalObjects;
298 
299  typedef std::map<makVrv::DtUniqueID, makVrv::DtVrlinkSimulatedBaseState*> LocalStateData;
301 
303 
304  std::vector<DtEntityType> myIgnoreFromArchive;
305 
307  {
309  : myProps(makVrv::DtIntersector::IntersectProperties(0))
310  , myUseHighestLOD(false)
311  , myIgnoreDynamicOcean(false)
312  , myUseHighestPolygon(false)
313  , myHitId(0)
314  {
315  }
316 
318  bool useHighestLOD, bool ignoreDynamicOcean, bool useHighestPolygon)
319  : myCheckPoint(lp)
320  , myProps(props)
321  , myUseHighestLOD(useHighestLOD)
322  , myIgnoreDynamicOcean(ignoreDynamicOcean)
323  , myUseHighestPolygon(useHighestPolygon)
324  , myHitId(0)
325  {
326  }
327 
329 
331  {
332  myCheckPoint = orig.myCheckPoint;
333  myProps = orig.myProps;
334  myUseHighestLOD = orig.myUseHighestLOD;
335  myIgnoreDynamicOcean = orig.myIgnoreDynamicOcean;
336  myUseHighestPolygon = orig.myUseHighestPolygon;
337  myCheckPoint = orig.myCheckPoint;
338  myHitId = orig.myHitId;
339 
340  return *this;
341  }
342 
343  bool operator==(const LastCheckedGroundInformation& orig) const
344  {
345  return ((myCheckPoint == orig.myCheckPoint) &&
346  (myProps == orig.myProps) &&
347  (myUseHighestLOD == orig.myUseHighestLOD) &&
348  (myIgnoreDynamicOcean == orig.myIgnoreDynamicOcean) &&
349  (myUseHighestPolygon == orig.myUseHighestPolygon));
350  }
351 
359  };
360 
362  };
363 
365  {
366  public:
367  DtSerializableVector() : mySource(0) {};
369  DtVector(src),
370  mySource(&src)
371  {
372  }
373 
374  void operator=(const DtVector& rhs)
375  {
376  ((DtVector&)*this) = rhs;
377  }
378 
379  protected:
380  friend class boost::serialization::access;
381 
385  template<class Archive>
386  void serialize(Archive & ar, const unsigned int version)
387  {
388  double x = myRep[0], y = myRep[1], z = myRep[2];
389 
390  ar & BOOST_SERIALIZATION_NVP(x);
391  ar & BOOST_SERIALIZATION_NVP(y);
392  ar & BOOST_SERIALIZATION_NVP(z);
393 
394  if (Archive::is_loading::value)
395  {
396  myRep[0] = x;
397  myRep[1] = y;
398  myRep[2] = z;
399 
400  if (mySource)
401  {
402  *mySource = *this;
403  }
404  }
405  }
406 
407  protected:
409  };
410 
411  class DT_DLL_VRFGUICORE DtSerializableTaitBryan : public DtTaitBryan
412  {
413  public:
414  DtSerializableTaitBryan() : mySource(0) {};
415  DtSerializableTaitBryan(DtTaitBryan& src) :
416  DtTaitBryan(src),
417  mySource(&src)
418  {
419  }
420 
421  protected:
422  friend class boost::serialization::access;
423 
427  template<class Archive>
428  void serialize(Archive & ar, const unsigned int version)
429  {
430  ar & BOOST_SERIALIZATION_NVP(myPsi);
431  ar & BOOST_SERIALIZATION_NVP(myTheta);
432  ar & BOOST_SERIALIZATION_NVP(myPhi);
433 
434  if (Archive::is_loading::value && mySource)
435  {
436  *mySource = *this;
437  }
438  }
439 
440  protected:
441  DtTaitBryan* mySource;
442  };
443 
444  template <typename _Type, typename _SrcType>
446  {
447  public:
449  DtSerializableStdVector(std::vector<_SrcType>& src) :
450  mySource(&src)
451  {
452  myValues.resize(src.size());
453 
454  typename std::vector<_SrcType>::const_iterator srcIter = src.begin();
455  typename std::vector<_Type>::iterator tgtIter = myValues.begin();
456 
457  while (srcIter != src.end())
458  {
459  *tgtIter = *srcIter;
460  ++srcIter;
461  ++tgtIter;
462  }
463  }
464 
465  protected:
467 
471  template<class Archive>
472  void serialize(Archive & ar, const unsigned int version)
473  {
474  ar & BOOST_SERIALIZATION_NVP(myValues);
475 
476  if (Archive::is_loading::value && mySource)
477  {
478  mySource->clear();
479  mySource->resize(myValues.size());
480 
481  typename std::vector<_Type>::const_iterator src = myValues.begin();
482  typename std::vector<_SrcType>::iterator tgt = mySource->begin();
483 
484  while (src != myValues.end())
485  {
486  *tgt = *src;
487  ++src;
488  ++tgt;
489  }
490  }
491  }
492 
493  protected:
494  std::vector<_SrcType>* mySource;
495  std::vector<_Type> myValues;
496  };
497 
499  {
501 
503  makVrv::DtVrlinkSimulatedEntityState(orig)
504  {
505  }
506 
507  protected:
508  friend class boost::serialization::access;
509 
513  template<class Archive>
514  void serialize(Archive & ar, const unsigned int version)
515  {
516  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
517  ar & BOOST_SERIALIZATION_NVP(myEntityId);
518  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
519  ar & BOOST_SERIALIZATION_NVP(myEntityType);
520  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
521  ar & BOOST_SERIALIZATION_NVP(myForce);
522 
523  DtSerializableVector loc(myLocation);
524  DtSerializableVector vel(myVelocity);
525  DtSerializableVector relVel(myRelativeVelocity);
526  DtSerializableVector acc(myAcceleration);
527  DtSerializableTaitBryan ori(myOrientation);
528  DtSerializableVector rotVel(myRotationalVelocity);
529 
530  ar & BOOST_SERIALIZATION_NVP(loc);
531  ar & BOOST_SERIALIZATION_NVP(vel);
532  ar & BOOST_SERIALIZATION_NVP(relVel);
533  ar & BOOST_SERIALIZATION_NVP(acc);
534  ar & BOOST_SERIALIZATION_NVP(ori);
535  ar & BOOST_SERIALIZATION_NVP(rotVel);
536 
537  ar & BOOST_SERIALIZATION_NVP(myAppearance);
538  ar & BOOST_SERIALIZATION_NVP(myCapabilities);
539  ar & BOOST_SERIALIZATION_NVP(myDIGuyAppearance);
540  ar & BOOST_SERIALIZATION_NVP(myDIGuyCharacterType);
541  ar & BOOST_SERIALIZATION_NVP(myGuise);
542  ar & BOOST_SERIALIZATION_NVP(myDRAlgorithm);
543  }
544  };
545 
547  {
549 
552  {
553  }
554 
555  protected:
556  friend class boost::serialization::access;
557 
561  template<class Archive>
562  void serialize(Archive & ar, const unsigned int version)
563  {
564  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
565  ar & BOOST_SERIALIZATION_NVP(myEntityId);
566  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
567  ar & BOOST_SERIALIZATION_NVP(myEntityType);
568  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
569  ar & BOOST_SERIALIZATION_NVP(myForce);
570 
572 
573  ar & BOOST_SERIALIZATION_NVP(pts);
574 
575  ar & BOOST_SERIALIZATION_NVP(myUserData);
576  ar & BOOST_SERIALIZATION_NVP(myPenStyle);
577  ar & BOOST_SERIALIZATION_NVP(myFillStyle);
578  ar & BOOST_SERIALIZATION_NVP(myLineWidth);
579  ar & BOOST_SERIALIZATION_NVP(myColor);
580  ar & BOOST_SERIALIZATION_NVP(myLabel);
581  ar & BOOST_SERIALIZATION_NVP(myClosedFigure);
582  ar & BOOST_SERIALIZATION_NVP(myProjected);
583  ar & BOOST_SERIALIZATION_NVP(myAttributes);
584  ar & BOOST_SERIALIZATION_NVP(myOverlayParent);
585 
586  if (version >= 2)
587  {
588  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineHeight);
589  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineWidth);
590  }
591  }
592  };
593 }
594 

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)