VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vrfObjectManipulationHandlerBaseClass.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfGuiCore/vrfGuiCore.h>
15 #include <vrvCore/DtDe.h>
16 #include <vrvCore/DtEntityState.h>
17 #include <vrvCore/DtUniqueID.h>
20 #include <vlutil/vlPerformanceStats.h>
22 
23 #include <matrix/vlVector.h>
24 #include <matrix/geodeticCoord.h>
25 #include <vlpi/entityType.h>
26 
27 #include <boost/signal.hpp>
28 
29 namespace makVrv
30 {
31  class DtDe;
32  class DtChannel;
33  class DtSimObjectEntry;
34 }
35 
36 class DtEntityType;
37 class DtString;
40 
41 namespace makVrf
42 {
44  {
45  Mouse = 0,
50  };
51 
53  {
54  Box,
66  User_Base = 100
67  };
68 
70  {
76  };
77 
79 
81 
86  {
87  public:
88  typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList;
89  typedef std::map<std::string, DtSimInterfaceContent*> ContentMessages;
90 
91  public:
94 
95  public:
96 
101  virtual bool createObject(const DtEntityType& entType, int force,
102  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
103 
105  virtual bool createObject(const DtString& key, const DtString& associatedData,
106  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
107 
111  virtual void editSelectedObjects( const makVrv::DtUniqueID& editId,
112  makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0.,
114 
117  virtual bool canSetActivationTime() const;
118 
120  virtual void setForce(int);
121  int force() const;
122 
124  virtual void setEventProcessingEnabled( bool value );
125 
127  virtual bool embarkationAllowed() const;
128  virtual void setEmbarkationAllowed(bool);
129 
133  virtual bool canEmbark() const;
134 
136  virtual void setCanEmbark(bool);
137 
139  virtual void setDoNotClamp(bool);
140  bool doNotClamp() const;
141 
143  virtual bool needsEmbarkOnCheck() const;
144 
146  virtual void setIgnoreNextLeftButtonRelease(bool b);
147  virtual void setEditStartedByDoubleClick(bool);
148 
149  virtual makVrv::DtIntersector::IntersectProperties intersectorPickMask() const;
150 
152  virtual DtUUID uuid() const;
153 
156  virtual void setInterfaceContentMessage(const std::string& name, const DtSimInterfaceContent&);
157  virtual void removeInterfaceContentMessage(const std::string&);
158  const ContentMessages& contentMessages() const
159  {
160  return myContentMessages;
161  }
162 
164  virtual HandlerType type() const = 0;
165 
166  virtual std::list<DtSimInterfaceContent*> contentMessagesToList() const;
167 
168  virtual void sendContentMessages();
169 
171  virtual VrfObjectEditFacadeList objectFacades() const;
172 
174  virtual void setAllowCreationOnMouseClick(bool flag);
175 
177  virtual void setLabel(const std::string&);
178  virtual std::string label() const;
179 
181  virtual bool allowCreationOnMouseClick() const;
182 
185  virtual void setEventProcessor(DtVrfObjectManipulationEventProcessor*);
186 
188  virtual DtVector clampToGround(const DtVector&) const;
189  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const;
190 
192  virtual void setAttachObjectToMouse(bool);
193 
195  virtual bool attachObjectToMouse() const;
196 
198  virtual void setHeading(double value);
199  virtual double heading() const;
200 
202  virtual void setLocation(const DtVector& loc);
203  virtual void setLocation(const DtVector& loc, double altAboveGround);
204 
206  virtual void stop();
207 
209  virtual void deferredStop();
210 
212  virtual int objectCount() const;
213 
215  virtual bool createVrfObject();
216  virtual bool createVrfObject(DtVrfObjectFacadeInterface* objectImage);
217 
219  virtual bool modifyVrfObjects();
220  virtual bool modifyVrfObject(DtVrfObjectFacadeInterface* objectImage);
221 
224  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0);
225  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0;
226 
228  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
229  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView);
230  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
231  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0;
232 
234  virtual void initializeEventProcessor();
235 
237  virtual void setOverlay(const std::string& name);
238  virtual const std::string& overlay() const;
239  virtual std::string defaultOverlayForCreatingObject() const;
240 
242  virtual std::string getNextCreatingName(bool includeCurrent = false);
243 
245  virtual void setAltitudeAboveGL( double alt, bool setInProcessor = true );
246 
248  virtual void setAltitudeAboveSL( double alt, bool setInProcessor = true );
249 
250  virtual void setAltitudeClampType( DtAltitudeClampType type );
251 
252  void setCreating(bool b)
253  {
254  myCreating = b;
255  }
256 
257  bool creating() const
258  {
259  return myCreating;
260  }
261 
262  virtual DtVrfObjectFacadeInterface* principalObjectImage() const;
263  virtual makVrv::DtUniqueID principalObjectID() const;
264 
265  virtual void setUserData(const std::string& userData);
266  virtual const std::string& userData() const;
267 
268  virtual void setExtendedLabels(const std::map<int, DtString>&);
269  virtual const std::map<int, DtString>& extendedLabels() const;
270 
271  virtual void setExtendedDataMap(const std::map<std::string, std::string>& extendedData);
272  virtual void setExtendedDataMap(const std::map<DtString, DtString>& extendedData);
273  virtual const std::map<std::string, std::string>& extendedDataMap() const;
274  virtual void setExtendedData(const std::string& key, const std::string& value);
275  virtual void removeExtendedData(const std::string& key);
276  virtual std::string extendedData(const std::string& key) const;
277 
278  virtual void slot_onComplete();
279  virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
280  virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
281  virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround );
282  virtual void slot_onAltitudeIsDragging(bool);
283 
284  virtual void hideObject( const makVrv::DtUniqueID& id, bool hide );
285 
287  virtual void setPublishObject(bool);
288  virtual bool publishObject() const;
289 
291  virtual void setObjectName(const std::string& name);
292 
294  virtual bool isUniqueName() const;
295 
299  virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0,
300  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>()) const;
301 
302  virtual void setAltitudeAllowed(bool);
303  bool altitudeAllowed() const;
304 
305  virtual const std::string& objectName() const;
306 
309  virtual bool anchorMouseToOrigin() const;
310 
312  virtual bool anchorPositionIsMouse() const;
313 
315  virtual void setAnchorPosition(const DtGeodeticCoord&);
316 
318  virtual DtVector localLocation();
319 
320  virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const;
321 
322  virtual void setShowPropertiesDialogBeforeCreate(bool);
323  virtual bool showPropertiesDialogBeforeCreate() const;
324 
326  virtual bool keywordsContain(const std::string&) const;
327  virtual std::string keyword(const std::string&) const;
328  virtual std::string value(const std::string&) const;
329  virtual void addKeyword(const std::string&);
330  virtual void removeKeyword(const std::string&);
331 
332  virtual bool waitingToStop() const;
333 
334  virtual void setEditingType(DtEditingType);
335  DtEditingType editingType() const
336  {
337  return myEditingType;
338  }
339 
342  virtual void setEmbarkationInformation(makVrv::DtUniqueID, bool);
343  virtual makVrv::DtUniqueID embarkedOn() const;
344 
346  virtual std::vector<makVrv::DtElementID> ignoreList() const;
347 
349  virtual const std::vector<makVrv::DtElementID>& unifiedIgnoreList() const;
350 
351  virtual void slot_onAltitudeChanged(const DtVector&, double);
352 
354  virtual void cancel();
355 
357  virtual void setFacadesVisible(bool);
358 
360  virtual bool noStyle() const;
361 
362  virtual void slot_onHeadingChanged( double heading );
363 
365  virtual void setHeadingOffset(double d);
366 
368  virtual void disconnectPlacement();
369 
372  virtual void setGroundClampOnPlacement(bool);
373  virtual bool groundClampOnPlacement() const;
374 
376  virtual void connectPlacement();
377 
379  virtual DtVector centerOfMass() const;
380 
383  virtual DtVector sumOfAllLocations() const;
384 
386  virtual void updateOffsetsBasedOnMousePosition(const DtVector& centerOfMass, const DtGeodeticCoord&,
387  bool usImagePoints = false);
388 
390  virtual void setSignalOnMultiSelectionComplete(bool);
391 
393  virtual void setKeywords(const std::string&);
394 
397  virtual void setSelectionCount(int);
399  virtual void parseKeywords(const std::string&);
400 
401  virtual bool warpMouseToOrigin() const;
402  virtual void setWarpMouseToOrigin(bool);
403 
405  boost::signal<void (bool)> signal_embarkationAllowedChanged;
406 
411  boost::signal<void (bool)> signal_showPropertiesDialog;
412 
414  boost::signal<void (bool)> signal_attachObjectToMouse;
415 
417  boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization;
418 
421  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
422 
424  boost::signal<void (const DtEntityType&, int)> signal_started;
425 
427  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_multiSelectonCreationComplete;
428 
430  {
431  ObjectManipulationData() : myOwnsContentMessages(false), color(0), appearance(0), projected(false),
432  physicalLineHeight(0.), physicalLineWidth(0.), isClosedFigure(false) , embarkId(0), useSlotIfAvailable(false) {};
433 
435  entityType(omd.entityType)
436  , createdEntityType(omd.createdEntityType)
437  , objectName(omd.objectName)
438  , force(omd.force)
439  , positions(omd.positions)
440  , heading(omd.heading)
441  , isClosedFigure(omd.isClosedFigure)
442  , clamped(omd.clamped)
443  , isAggregated(omd.isAggregated)
444  , userData(omd.userData)
445  , isPublished(omd.isPublished)
446  , extendedData(omd.extendedData)
447  , extendedLabels(omd.extendedLabels)
448  , myOwnsContentMessages(true)
449  , color(omd.color)
450  , appearance(omd.appearance)
451  , overlay(omd.overlay)
452  , projected(omd.projected)
453  , physicalLineHeight(omd.physicalLineHeight)
454  , physicalLineWidth(omd.physicalLineWidth)
455  , embarkId(omd.embarkId)
456  , useSlotIfAvailable(omd.useSlotIfAvailable)
457  {
458  setContentMessages(omd.myContentMessages);
459  }
460 
462  {
463  if (myOwnsContentMessages)
464  {
465  deleteContentMessages();
466  }
467  }
468 
469  void deleteContentMessages()
470  {
471  std::list<DtSimInterfaceContent*>::iterator iter = myContentMessages.begin();
472  while (iter != myContentMessages.end())
473  {
474  delete *iter;
475  ++iter;
476  }
477 
478  myContentMessages.clear();
479  myOwnsContentMessages = false;
480  }
481 
482  void setContentMessages(const ContentMessages& messages)
483  {
484  if (myOwnsContentMessages)
485  {
486  deleteContentMessages();
487  }
488 
489  ContentMessages::const_iterator iter = messages.begin();
490  while (iter != messages.end())
491  {
492  myContentMessages.push_back(iter->second->clone());
493  ++iter;
494  }
495  }
496 
497  void setContentMessages(const std::list<DtSimInterfaceContent*>& messages)
498  {
499  if (myOwnsContentMessages)
500  {
501  deleteContentMessages();
502  }
503 
504  std::list<DtSimInterfaceContent*>::const_iterator iter = messages.begin();
505  while (iter != messages.end())
506  {
507  myContentMessages.push_back((*iter)->clone());
508  ++iter;
509  }
510  }
511 
513  DtEntityType entityType;
514  DtEntityType createdEntityType;
515  std::string objectName;
516  int force;
517  std::vector<DtVector> positions;
518  double heading;
519  bool clamped;
521  std::string userData;
523  unsigned int color;
524  unsigned int appearance;
525  bool projected;
529  std::map<std::string, std::string> extendedData;
530  std::map<int, DtString> extendedLabels;
531  std::list<DtSimInterfaceContent*> myContentMessages;
533  std::string overlay;
536  };
537 
539  boost::signal<void (bool)> signal_altitudeAllowedChanged;
540 
542  boost::signal<void ( const ObjectManipulationData& )> signal_createObject;
543 
545  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
546 
548  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped;
549 
551  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete;
552 
554  boost::signal<void (const DtVector& )> signal_locationChanged;
555 
557  boost::signal<void (double)> signal_headingChanged;
558 
560  boost::signal<void (double)> signal_altitudeChanged;
561 
563  boost::signal<void (const DtVector&)> signal_placement;
564 
567  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState;
568 
570  boost::signal<void (const makVrv::DtUniqueID&)> signal_principalStateViewUpdated;
571 
573  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
574 
575  protected:
577  virtual void slot_simObjectEntryToBeRemoved(const makVrv::DtSimObjectEntry&);
578 
580  virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const;
581 
582  virtual void slot_onCancel(bool escPressed);
583 
584  virtual std::string stripNumbers(const std::string& base) const;
585 
586  virtual double defaultAltitudeOffsetFor(DtVrfObjectFacadeInterface* i) const;
587 
588  virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ;
589 
592  virtual void initializeEdit();
593 
594  virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView,
595  const makVrv::DtUniqueID& principalSceneObjectId );
596 
597  virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId,
598  DtVrlinkSimulatedBaseStateView* principalStateView);
599 
602  virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0,
603  bool centerOnOnlyIfMousePositionIsOffWindow = true) const;
604 
605  virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation,
606  bool resetOrigin = false);
607 
608  virtual void setHeading(DtVrfObjectFacadeInterface* objectImage, double heading);
609  virtual std::string defaultOverlayFor(const DtRwNLengthStringVector&) const;
610 
611  virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage,
612  const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation,
613  const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation);
614 
616  virtual void setObjectImageRelativeTo(DtVrfObjectFacadeInterface* objectImage,
617  const DtVector& thisGeocLocation, const DtVector& prGeocLocation, bool relativeOnly = false);
618 
620  virtual void setObjectImageRelativeToAltitudeOnly(DtVrfObjectFacadeInterface* objectImage,
621  const DtVector& thisGeocLocation, const DtVector& prGeocLocation);
622 
623  virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID,
624  const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation);
625  virtual void calculateAnchor(const DtVector& localAnchor);
626  virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel);
627 
628  virtual void initializeAltitudeAboveTerrainForEdit(double curAlt, const DtVector& curPos,
630 
631  virtual void postCreateInitialize(DtVrfObjectFacadeInterface*);
632 
634  virtual bool clampOnPlacement() const;
635 
637  virtual bool clampAtClosestPolygonOnPlacement() const;
638 
640  virtual void updateOffsetsBasedOnMousePosition();
641 
642  protected:
645  int myForce;
649  std::string myObjectName;
650  std::string myOverlay;
651 
657 
658  std::string myUserData;
659  std::map<std::string, std::string> myExtendedData;
660  std::map<int, DtString> myExtendedLabels;
661 
662  std::string myKey;
663  std::string myKeyData;
665 
667 
669 
671  DtReferenceEllipsoid* myReferenceForConversion;
673 
677  DtGeodeticCoord myAnchorPosition;
678  DtTimedSection* myDeferredStopTimer;
682 
684  std::vector<std::string> myKeywords;
685 
689 
692 
695 
696  typedef std::map<DtVrlinkSimulatedBaseStateView*, makVrv::DtSignalConnectionManager*> StateViewConnections;
702 
705 
706  mutable bool myCheckedEmbark;
707  mutable bool myCanEmbark;
709 
710  mutable std::vector<makVrv::DtElementID> myUnifiedIgnoreList;
711  mutable std::vector<makVrv::DtUniqueID> myDIGuyIdsIgnored;
712  mutable std::vector<makVrv::DtUniqueID> myModelIds;
713  };
714 
716  {
717  public:
718  virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0;
719  };
720 
721  template <typename T>
723  {
724  public:
726  : myDe(de)
727  {
728  }
729 
731  {
732  }
733 
735  {
736  return new T(myDe);
737  }
738 
739  protected:
741  };
742 
743 }

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)