VR-Forces 4.3 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) 2014 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>
19 #include <vlutil/vlPerformanceStats.h>
20 #include <vrfExtProtocol/simInterfaceContent.h>
21 
22 #include <matrix/vlVector.h>
23 #include <matrix/geodeticCoord.h>
24 #include <vlpi/entityType.h>
25 
26 #include <boost/signal.hpp>
27 
28 namespace makVrv
29 {
30  class DtDe;
31  class DtChannel;
32  class DtSimObjectEntry;
33 }
34 
35 class DtEntityType;
36 class DtString;
39 
40 namespace makVrf
41 {
43  {
44  Mouse = 0,
48  };
49 
51  {
52  Box,
62  User_Base = 100
63  };
64 
66  {
72  };
73 
75 
77 
82  {
83  public:
84  typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList;
85  typedef std::map<std::string, DtSimInterfaceContent*> ContentMessages;
86 
87  public:
90 
91  public:
92 
97  virtual bool createObject(const DtEntityType& entType, int force,
98  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
99 
101  virtual bool createObject(const DtString& key, const DtString& associatedData,
102  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
103 
107  virtual void editSelectedObjects( const makVrv::DtUniqueID& editId,
108  makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0.,
110 
112  virtual void setForce(int);
113  int force() const;
114 
117  virtual void setInterfaceContentMessage(const std::string& name, const DtSimInterfaceContent&);
118  virtual void removeInterfaceContentMessage(const std::string&);
119  const ContentMessages& contentMessages() const
120  {
121  return myContentMessages;
122  }
123 
125  virtual HandlerType type() const = 0;
126 
127  virtual std::list<DtSimInterfaceContent*> contentMessagesToList() const;
128 
129  virtual void sendContentMessages();
130 
132  virtual void setAllowCreationOnMouseClick(bool flag);
133 
135  virtual void setLabel(const std::string&);
136  virtual std::string label() const;
137 
139  virtual bool allowCreationOnMouseClick() const;
140 
143  virtual void setEventProcessor(DtVrfObjectManipulationEventProcessor*);
144 
146  virtual DtVector clampToGround(const DtVector&) const;
147  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const;
148 
150  virtual void setAttachObjectToMouse(bool);
151 
153  virtual bool attachObjectToMouse() const;
154 
156  virtual void setHeading(double value);
157  virtual double heading() const;
158 
160  virtual void setLocation(const DtVector& loc);
161  virtual void setLocation(const DtVector& loc, double altAboveGround);
162 
164  virtual void stop();
165 
167  virtual void deferredStop();
168 
170  virtual bool createVrfObject();
171  virtual bool createVrfObject(DtVrfObjectFacadeInterface* objectImage);
172 
174  virtual bool modifyVrfObjects();
175  virtual bool modifyVrfObject(DtVrfObjectFacadeInterface* objectImage);
176 
178  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0;
179 
181  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
182  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0;
183 
185  virtual void initializeEventProcessor();
186 
188  virtual void setOverlay(const std::string& name);
189  virtual const std::string& overlay() const;
190  virtual std::string defaultOverlayForCreatingObject() const;
191 
193  virtual std::string getNextCreatingName(bool includeCurrent = false);
194 
196  virtual void setAltitudeAboveGL( double alt, bool setInProcessor = true );
197 
199  virtual void setAltitudeAboveSL( double alt, bool setInProcessor = true );
200 
201  virtual void setAltitudeClampType( DtAltitudeClampType type );
202 
203  void setCreating(bool b)
204  {
205  myCreating = b;
206  }
207 
208  bool creating() const
209  {
210  return myCreating;
211  }
212 
213  virtual DtVrfObjectFacadeInterface* principalObjectImage() const;
214  virtual makVrv::DtUniqueID principalObjectID() const;
215 
216  virtual void setUserData(const std::string& userData);
217  virtual const std::string& userData() const;
218 
219  virtual void setExtendedLabels(const std::map<int, DtString>&);
220  virtual const std::map<int, DtString>& extendedLabels() const;
221 
222  virtual void setExtendedDataMap(const std::map<std::string, std::string>& extendedData);
223  virtual void setExtendedDataMap(const std::map<DtString, DtString>& extendedData);
224  virtual const std::map<std::string, std::string>& extendedDataMap() const;
225  virtual void setExtendedData(const std::string& key, const std::string& value);
226  virtual void removeExtendedData(const std::string& key);
227  virtual std::string extendedData(const std::string& key) const;
228 
229  virtual void slot_onComplete();
230  virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
231  virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
232  virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround );
233  virtual void slot_onAltitudeIsDragging(bool);
234 
235  virtual void hideObject( const makVrv::DtUniqueID& id, bool hide );
236 
238  virtual void setPublishObject(bool);
239  virtual bool publishObject() const;
240 
242  virtual void setObjectName(const std::string& name);
243 
245  virtual bool isUniqueName() const;
246 
250  virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0 ) const;
251 
252  virtual void setAltitudeAllowed(bool);
253  bool altitudeAllowed() const;
254 
255  virtual const std::string& objectName() const;
256 
259  virtual bool anchorMouseToOrigin() const;
260 
262  virtual bool anchorPositionIsMouse() const;
263 
265  virtual DtVector localLocation();
266 
267  virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const;
268 
269  virtual void setShowPropertiesDialogBeforeCreate(bool);
270  virtual bool showPropertiesDialogBeforeCreate() const;
271 
273  virtual bool keywordsContain(const std::string&) const;
274  virtual std::string keyword(const std::string&) const;
275  virtual std::string value(const std::string&) const;
276 
277  virtual bool waitingToStop() const;
278 
279  virtual void setEditingType(DtEditingType);
280  DtEditingType editingType() const
281  {
282  return myEditingType;
283  }
284 
286  virtual std::vector<makVrv::DtElementID> ignoreList() const;
287 
289  virtual void cancel();
290 
292  virtual void setFacadesVisible(bool);
293 
295  virtual bool noStyle() const;
296 
298  virtual DtVector centerOfMass() const;
299 
301  virtual void updateOffsetsBasedOnMousePosition(const DtVector& centerOfMass, const DtGeodeticCoord&);
302 
304  virtual void setSignalOnMultiSelectionComplete(bool);
305 
308  virtual void setSelectionCount(int);
309 
314  boost::signal<void (bool)> signal_showPropertiesDialog;
315 
317  boost::signal<void (bool)> signal_attachObjectToMouse;
318 
320  boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization;
321 
324  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
325 
327  boost::signal<void (const DtEntityType&, int)> signal_started;
328 
330  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_multiSelectonCreationComplete;
331 
333  {
334  ObjectManipulationData() : myOwnsContentMessages(false), color(0), appearance(0), projected(false) {};
336  entityType(omd.entityType)
337  , objectName(omd.objectName)
338  , force(omd.force)
339  , positions(omd.positions)
340  , heading(omd.heading)
341  , clamped(omd.clamped)
342  , isAggregated(omd.isAggregated)
343  , userData(omd.userData)
344  , isPublished(omd.isPublished)
345  , extendedData(omd.extendedData)
346  , extendedLabels(omd.extendedLabels)
347  , myOwnsContentMessages(true)
348  , color(omd.color)
349  , appearance(omd.appearance)
350  , overlay(omd.overlay)
351  , projected(omd.projected)
352  {
353  setContentMessages(omd.myContentMessages);
354  }
355 
357  {
358  if (myOwnsContentMessages)
359  {
360  deleteContentMessages();
361  }
362  }
363 
364  void deleteContentMessages()
365  {
366  std::list<DtSimInterfaceContent*>::iterator iter = myContentMessages.begin();
367  while (iter != myContentMessages.end())
368  {
369  delete *iter;
370  ++iter;
371  }
372 
373  myContentMessages.clear();
374  myOwnsContentMessages = false;
375  }
376 
377  void setContentMessages(const ContentMessages& messages)
378  {
379  if (myOwnsContentMessages)
380  {
381  deleteContentMessages();
382  }
383 
384  ContentMessages::const_iterator iter = messages.begin();
385  while (iter != messages.end())
386  {
387  myContentMessages.push_back(iter->second->clone());
388  ++iter;
389  }
390  }
391 
392  void setContentMessages(const std::list<DtSimInterfaceContent*>& messages)
393  {
394  if (myOwnsContentMessages)
395  {
396  deleteContentMessages();
397  }
398 
399  std::list<DtSimInterfaceContent*>::const_iterator iter = messages.begin();
400  while (iter != messages.end())
401  {
402  myContentMessages.push_back((*iter)->clone());
403  ++iter;
404  }
405  }
406 
408  DtEntityType entityType;
409  std::string objectName;
410  int force;
411  std::vector<DtVector> positions;
412  double heading;
413  bool clamped;
415  std::string userData;
417  unsigned int color;
418  unsigned int appearance;
419  bool projected;
420  std::map<std::string, std::string> extendedData;
421  std::map<int, DtString> extendedLabels;
422  std::list<DtSimInterfaceContent*> myContentMessages;
424  std::string overlay;
425  };
426 
428  boost::signal<void ( const ObjectManipulationData& )> signal_createObject;
429 
431  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
432 
434  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped;
435 
437  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete;
438 
440  boost::signal<void (const DtVector& )> signal_locationChanged;
441 
443  boost::signal<void (double)> signal_headingChanged;
444 
446  boost::signal<void (double)> signal_altitudeChanged;
447 
449  boost::signal<void (const DtVector&)> signal_placement;
450 
453  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState;
454 
456  boost::signal<void (const makVrv::DtUniqueID&)> signal_principalStateViewUpdated;
457 
459  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
460 
461  protected:
463  virtual void slot_simObjectEntryToBeRemoved(const makVrv::DtSimObjectEntry&);
464 
466  virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const;
467 
468  virtual void slot_onAltitudeChanged(const DtVector&, double);
469 
470  virtual void slot_onHeadingChanged( double heading );
471 
472  virtual void slot_onCancel(bool escPressed);
473 
474  virtual std::string stripNumbers(const std::string& base) const;
475 
476  virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ;
477 
480  virtual void initializeEdit();
481 
482  virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView,
483  const makVrv::DtUniqueID& principalSceneObjectId );
484 
485  virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId,
486  DtVrlinkSimulatedBaseStateView* principalStateView);
487 
490  virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0,
491  bool centerOnOnlyIfMousePositionIsOffWindow = true) const;
492 
493  virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation,
494  bool resetOrigin = false);
495 
496  virtual void setHeading(DtVrfObjectFacadeInterface* objectImage, double heading);
497  virtual std::string defaultOverlayFor(const DtRwNLengthStringVector&) const;
498 
499  virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage,
500  const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation,
501  const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation);
502 
504  virtual void setObjectImageRelativeTo(DtVrfObjectFacadeInterface* objectImage,
505  const DtVector& thisGeocLocation, const DtVector& prGeocLocation, bool relativeOnly = false);
506 
508  virtual void setObjectImageRelativeToAltitudeOnly(DtVrfObjectFacadeInterface* objectImage,
509  const DtVector& thisGeocLocation, const DtVector& prGeocLocation);
510 
511  virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID,
512  const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation);
513  virtual void calculateAnchor(const DtVector& localAnchor);
514  virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel);
515 
516  virtual void postCreateInitialize();
517 
519  virtual bool clampOnPlacement() const;
520 
522  virtual bool clampAtClosestPolygonOnPlacement() const;
523 
524  virtual void parseKeywords(const std::string&);
525 
527  virtual void updateOffsetsBasedOnMousePosition();
528 
529  protected:
532  int myForce;
536  std::string myObjectName;
537  std::string myOverlay;
538 
544 
545  std::string myUserData;
546  std::map<std::string, std::string> myExtendedData;
547  std::map<int, DtString> myExtendedLabels;
548 
549  std::string myKey;
550  std::string myKeyData;
552 
554 
556 
558  DtReferenceEllipsoid* myReferenceForConversion;
560 
563  DtGeodeticCoord myAnchorPosition;
564  DtTimedSection* myDeferredStopTimer;
567 
569  std::vector<std::string> myKeywords;
570 
574 
577 
580 
581  typedef std::map<DtVrlinkSimulatedBaseStateView*, makVrv::DtSignalConnectionManager*> StateViewConnections;
583  };
584 
586  {
587  public:
588  virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0;
589  };
590 
591  template <typename T>
593  {
594  public:
596  : myDe(de)
597  {
598  }
599 
601  {
602  }
603 
605  {
606  return new T(myDe);
607  }
608 
609  protected:
611  };
612 
613 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)