VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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,
75  ClosestDown
76  };
77 
79 
80  static DtLocalObjectManager& instance(makVrv::DtDe& de);
81  static void registerInstance(makVrv::DtDe& de, DtLocalObjectManager*);
82 
83  virtual ~DtLocalObjectManager();
84 
86  virtual bool isCreating() const;
87 
89  virtual void tacticalGraphicsVertexSelected(
90  const makVrv::DtUniqueID& selected, const makVrv::DtUniqueID& parentElementID);
91 
93  virtual void tacticalGraphicsVertexDeselected(
94  const makVrv::DtUniqueID& deselected, const makVrv::DtUniqueID& parent);
95 
97  virtual void slot_onCurrentSelectionChanged(
98  const makVrv::DtSelectionManager::IdSet& selected,
99  const makVrv::DtSelectionManager::IdSet& deselected);
100 
102  virtual DtVrfObjectFacadeInterface* facadeForID(makVrv::DtUniqueID);
103 
105  virtual std::vector<makVrv::DtUniqueID> uniqueIdsForTypesThatMatch(const DtEntityType&) const;
106 
111  virtual DtEnvironmentalFacadeCollection* create(const DtVrlinkSimulatedEnvironmentProcess&, int dictionartToUse = -1);
112 
122  virtual DtEnvironmentalFacadeCollection* create(const DtEntityType& t,
123  const std::vector<DtVector>& localPoints,
124  int force,
126  int modelSet = -1, bool keepName = false, int dictionaryToUse = -1);
127 
132  virtual DtEntityFacadeCollection* create(const makVrv::DtVrlinkSimulatedEntityState&, const std::string& overlayParent = "",
133  int dictionaryToUse = -1);
134 
144  virtual DtEntityFacadeCollection* create(const DtEntityCreationData&,
145  int modelSet = -1, bool keepName = false, int dictionaryToUse = -1);
146 
148  virtual const makVrv::DtTacticalGraphicOverlay* createOnLayer(const std::string& layerName = "");
149 
151  virtual void completeStateUpdate(makVrv::DtUniqueID id);
152 
154  virtual void setVisible(makVrv::DtUniqueID id, bool hide);
155 
157  virtual bool isLocal(makVrv::DtUniqueID id) const;
158 
159  virtual void updateState(makVrv::DtUniqueID id);
160 
163  virtual void setEditable(makVrv::DtUniqueID id, bool);
164 
167  virtual bool isEditable(makVrv::DtUniqueID id) const;
168 
170  virtual bool isMemberOfLayer(makVrv::DtUniqueID id, const std::string& layername) const;
171 
173  virtual void deleteLocal(makVrv::DtUniqueID id);
174 
176  virtual void deleteAll(std::vector<DtEntityType> except = std::vector<DtEntityType>());
177 
179  virtual void deleteAllFromLayer(const std::string& layername);
180 
185  virtual void update(makVrv::DtElementID id, const std::string* name = 0, const std::vector<DtVector>& points = std::vector<DtVector>(),
186  int* force = 0, const std::string* overlay = 0, const std::string* userData = 0,
187  const std::map<std::string, std::string>* extendedData = 0, const std::map<int, DtString>* extendedLabels = 0,
188  double* newHeading = 0, int* color = 0, int* appearance = 0, const std::string* label = 0,
189  float* physicalLineHeight = 0, float* physicalLineWidth = 0, bool forceUpdate = true);
190 
192  virtual DtVector getVertexPosition(makVrv::DtElementID parent, makVrv::DtUniqueID vertexId) const;
193 
196  virtual void create(const DtEntityType& t, int force);
197 
199  virtual bool allSelectionIsLocal() const;
200 
202  virtual void setCanCreateLocalObjects(bool);
203 
205  virtual bool canCreateLocalObjects() const;
206 
208  virtual void save(const std::string&);
209 
211  virtual std::string toStringBuffer();
212 
214  virtual bool fromStringBuffer(const std::string&, bool removeAll = true);
215 
217  virtual bool load(const std::string&, bool removeAll = true);
218 
220  virtual int numberOfLocalObjects() const;
221 
224  virtual double groundHeight(const DtVector& lp, makVrv::DtIntersector::IntersectProperties props =
225  makVrv::DtIntersector::SupportNodes, bool useHighestLOD = true, DtVector* clampedPoint = 0,
226  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(), makVrv::DtUniqueID* hitId = 0) const;
227 
231  virtual DtVector clampToGround(const DtVector&, makVrv::DtIntersector::IntersectProperties props =
232  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
233  bool useHighestLOD = false, bool ignoreDynamicOcean = false, ClampFlag useHighestPolygon = Closest,
234  makVrv::DtUniqueID* hitId = 0) const;
235 
238  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&, makVrv::DtIntersector::IntersectProperties props =
239  makVrv::DtIntersector::SupportNodes, const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>(),
240  bool useHighestLOD = false, bool ignoreDynamicOcean = false, ClampFlag useHighestPolygon = Closest, makVrv::DtUniqueID* hitId = 0) const;
241 
242  virtual std::string generateUniqueName(const std::string& base, bool addNumberToBegin = false) const;
243 
245  virtual void ignoreFromArchive(const DtEntityType&);
246  virtual void removeIgnoreFromArchive(const DtEntityType&);
247 
248  protected:
250  virtual void slot_elementAttributeChangeRequested(
251  makVrv::DtUniqueID id, makVrv::DtUniqueID parentId, DtBoost::shared_ptr<const makVrv::DtElementAttribute> atr );
252 
253  virtual void handleElementAttributeChanged(
255 
257  virtual void slot_onStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*);
258 
260  virtual void completeStateViewUpdated(makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*, bool forceIfHidden = false);
261 
265 
267  virtual void finalizeObjectCreation(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
268  virtual void slot_stoppedObjectCreation();
269 
271  virtual bool shouldArchive(makVrv::DtVrlinkSimulatedBaseState*) const;
272 
273  public:
278  boost::signal<void (bool)> signal_creating;
279 
281  boost::signal<void (DtVrfObjectFacadeInterface*, makVrv::DtVrlinkSimulatedBaseState*)> signal_objectCreated;
282 
284  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectAboutToBeDeleted;
285 
287  boost::signal<void (bool)> signal_loading;
288 
290  boost::signal<void (makVrv::DtUniqueID)> signal_objectDeleted;
292 
293  protected:
294  friend class boost::serialization::access;
295 
299  template<class Archive>
300  void serialize(Archive & ar, const unsigned int version)
301  {
302  if (Archive::is_loading::value)
303  {
304  read(*(boost::archive::xml_iarchive*)&ar);
305  }
306  else
307  {
308  write(*(boost::archive::xml_oarchive*)&ar);
309  }
310  }
311 
312  virtual void write(boost::archive::xml_oarchive& out);
313  virtual void read(boost::archive::xml_iarchive& in);
314 
315  protected:
317 
319 
321  typedef std::map<makVrv::DtUniqueID, DtVrfObjectFacadeInterface*> LocalObjects;
324 
325  typedef std::map<makVrv::DtUniqueID, makVrv::DtVrlinkSimulatedBaseState*> LocalStateData;
327 
329 
330  std::vector<DtEntityType> myIgnoreFromArchive;
331 
333  {
335  : myProps(makVrv::DtIntersector::IntersectProperties(0))
336  , myUseHighestLOD(false)
337  , myIgnoreDynamicOcean(false)
338  , myUseHighestPolygon(Closest)
339  , myHitId(0)
340  {
341  }
342 
344  bool useHighestLOD, bool ignoreDynamicOcean, ClampFlag useHighestPolygon)
345  : myCheckPoint(lp)
346  , myProps(props)
347  , myUseHighestLOD(useHighestLOD)
348  , myIgnoreDynamicOcean(ignoreDynamicOcean)
349  , myUseHighestPolygon(useHighestPolygon)
350  , myHitId(0)
351  {
352  }
353 
355 
357  {
358  myCheckPoint = orig.myCheckPoint;
359  myProps = orig.myProps;
360  myUseHighestLOD = orig.myUseHighestLOD;
361  myIgnoreDynamicOcean = orig.myIgnoreDynamicOcean;
362  myUseHighestPolygon = orig.myUseHighestPolygon;
363  myCheckPoint = orig.myCheckPoint;
364  myHitId = orig.myHitId;
365 
366  return *this;
367  }
368 
369  bool operator==(const LastCheckedGroundInformation& orig) const
370  {
371  return ((myCheckPoint == orig.myCheckPoint) &&
372  (myProps == orig.myProps) &&
373  (myUseHighestLOD == orig.myUseHighestLOD) &&
374  (myIgnoreDynamicOcean == orig.myIgnoreDynamicOcean) &&
375  (myUseHighestPolygon == orig.myUseHighestPolygon));
376  }
377 
385  };
386 
388  };
389 
391  {
392  public:
393  DtSerializableVector() : mySource(0) {};
395  DtVector(src),
396  mySource(&src)
397  {
398  }
399 
400  void operator=(const DtVector& rhs)
401  {
402  ((DtVector&)*this) = rhs;
403  }
404 
405  protected:
406  friend class boost::serialization::access;
407 
411  template<class Archive>
412  void serialize(Archive & ar, const unsigned int version)
413  {
414  double x = myRep[0], y = myRep[1], z = myRep[2];
415 
416  ar & BOOST_SERIALIZATION_NVP(x);
417  ar & BOOST_SERIALIZATION_NVP(y);
418  ar & BOOST_SERIALIZATION_NVP(z);
419 
420  if (Archive::is_loading::value)
421  {
422  myRep[0] = x;
423  myRep[1] = y;
424  myRep[2] = z;
425 
426  if (mySource)
427  {
428  *mySource = *this;
429  }
430  }
431  }
432 
433  protected:
435  };
436 
437  class DT_DLL_VRFGUICORE DtSerializableTaitBryan : public DtTaitBryan
438  {
439  public:
440  DtSerializableTaitBryan() : mySource(0) {};
441  DtSerializableTaitBryan(DtTaitBryan& src) :
442  DtTaitBryan(src),
443  mySource(&src)
444  {
445  }
446 
447  protected:
448  friend class boost::serialization::access;
449 
453  template<class Archive>
454  void serialize(Archive & ar, const unsigned int version)
455  {
456  ar & BOOST_SERIALIZATION_NVP(myPsi);
457  ar & BOOST_SERIALIZATION_NVP(myTheta);
458  ar & BOOST_SERIALIZATION_NVP(myPhi);
459 
460  if (Archive::is_loading::value && mySource)
461  {
462  *mySource = *this;
463  }
464  }
465 
466  protected:
467  DtTaitBryan* mySource;
468  };
469 
470  template <typename _Type, typename _SrcType>
472  {
473  public:
475  DtSerializableStdVector(std::vector<_SrcType>& src) :
476  mySource(&src)
477  {
478  myValues.resize(src.size());
479 
480  typename std::vector<_SrcType>::const_iterator srcIter = src.begin();
481  typename std::vector<_Type>::iterator tgtIter = myValues.begin();
482 
483  while (srcIter != src.end())
484  {
485  *tgtIter = *srcIter;
486  ++srcIter;
487  ++tgtIter;
488  }
489  }
490 
491  protected:
493 
497  template<class Archive>
498  void serialize(Archive & ar, const unsigned int version)
499  {
500  ar & BOOST_SERIALIZATION_NVP(myValues);
501 
502  if (Archive::is_loading::value && mySource)
503  {
504  mySource->clear();
505  mySource->resize(myValues.size());
506 
507  typename std::vector<_Type>::const_iterator src = myValues.begin();
508  typename std::vector<_SrcType>::iterator tgt = mySource->begin();
509 
510  while (src != myValues.end())
511  {
512  *tgt = *src;
513  ++src;
514  ++tgt;
515  }
516  }
517  }
518 
519  protected:
520  std::vector<_SrcType>* mySource;
521  std::vector<_Type> myValues;
522  };
523 
525  {
527 
529  makVrv::DtVrlinkSimulatedEntityState(orig)
530  {
531  }
532 
533  protected:
534  friend class boost::serialization::access;
535 
539  template<class Archive>
540  void serialize(Archive & ar, const unsigned int version)
541  {
542  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
543  ar & BOOST_SERIALIZATION_NVP(myEntityId);
544  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
545  ar & BOOST_SERIALIZATION_NVP(myEntityType);
546  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
547  ar & BOOST_SERIALIZATION_NVP(myForce);
548 
549  DtSerializableVector loc(myLocation);
550  DtSerializableVector vel(myVelocity);
551  DtSerializableVector relVel(myRelativeVelocity);
552  DtSerializableVector acc(myAcceleration);
553  DtSerializableTaitBryan ori(myOrientation);
554  DtSerializableVector rotVel(myRotationalVelocity);
555 
556  ar & BOOST_SERIALIZATION_NVP(loc);
557  ar & BOOST_SERIALIZATION_NVP(vel);
558  ar & BOOST_SERIALIZATION_NVP(relVel);
559  ar & BOOST_SERIALIZATION_NVP(acc);
560  ar & BOOST_SERIALIZATION_NVP(ori);
561  ar & BOOST_SERIALIZATION_NVP(rotVel);
562 
563  ar & BOOST_SERIALIZATION_NVP(myAppearance);
564  ar & BOOST_SERIALIZATION_NVP(myCapabilities);
565  ar & BOOST_SERIALIZATION_NVP(myDIGuyAppearance);
566  ar & BOOST_SERIALIZATION_NVP(myDIGuyCharacterType);
567  ar & BOOST_SERIALIZATION_NVP(myGuise);
568  ar & BOOST_SERIALIZATION_NVP(myDRAlgorithm);
569  }
570  };
571 
573  {
575 
578  {
579  }
580 
581  protected:
582  friend class boost::serialization::access;
583 
587  template<class Archive>
588  void serialize(Archive & ar, const unsigned int version)
589  {
590  ar & BOOST_SERIALIZATION_NVP(myGlobalId);
591  ar & BOOST_SERIALIZATION_NVP(myEntityId);
592  ar & BOOST_SERIALIZATION_NVP(myMarkingText);
593  ar & BOOST_SERIALIZATION_NVP(myEntityType);
594  ar & BOOST_SERIALIZATION_NVP(myAttachedToId);
595  ar & BOOST_SERIALIZATION_NVP(myForce);
596 
598 
599  ar & BOOST_SERIALIZATION_NVP(pts);
600 
601  ar & BOOST_SERIALIZATION_NVP(myUserData);
602  ar & BOOST_SERIALIZATION_NVP(myPenStyle);
603  ar & BOOST_SERIALIZATION_NVP(myFillStyle);
604  ar & BOOST_SERIALIZATION_NVP(myLineWidth);
605  ar & BOOST_SERIALIZATION_NVP(myColor);
606  ar & BOOST_SERIALIZATION_NVP(myLabel);
607  ar & BOOST_SERIALIZATION_NVP(myClosedFigure);
608  ar & BOOST_SERIALIZATION_NVP(myProjected);
609  ar & BOOST_SERIALIZATION_NVP(myAttributes);
610  ar & BOOST_SERIALIZATION_NVP(myOverlayParent);
611 
612  if (version >= 2)
613  {
614  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineHeight);
615  ar & BOOST_SERIALIZATION_NVP(myPhysicalLineWidth);
616  }
617  }
618  };
619 }
620 

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)