VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtIntervisibilityDriver.h
Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Copyright (c) 2012 MAK Technologies, Inc.
00003  * All rights reserved.
00004  *****************************************************************************/
00005 
00009 
00010 #pragma once
00011 
00012 #include <vrvCore/DtDriver.h>
00013 #include <vrvCore/DtElementData.h>
00014 #include <vrvCore/DtSelectionManager.h>
00015 #include <vrvCore/DtUniqueID.h>
00016 #include <vrvCore/DtBaseConnection.h>
00017 
00018 #include <vrvUtil/DtUnicode.h>
00019 #include <vrvUtil/DtSignalConnectionManager.h>
00020 
00021 #include <boost/signals.hpp>
00022 #include <boost/unordered_map.hpp>
00023 #include <matrix/vlVector.h>
00024 
00025 namespace makVrv
00026 {
00027 
00028    class DtDe;
00029    class DtChannel;
00030    class DtCoordinateSystem;
00031    class DtDisplayUnitsConverter;
00032    class DtBasicEditingEventProcessor;
00033    class DtElementDefinitionManager;
00034    class DtIntervisibilityElement;
00035    class DtIntervisibilityStateListener;
00036    class DtIntervisibilityStateListenerCreator;
00037 
00042    class DT_DLL_VRVCORE DtIntervisibilityDriver : public DtDriver
00043    {
00044    public:
00045 
00046       typedef boost::unordered_map<DtElementID, DtIntervisibilityElement*> 
00047          ElementMap;
00048       typedef boost::unordered_map<DtElementID, DtIntervisibilityStateListener*>
00049          ListenerMap;
00050       typedef std::pair<DtElementID, DtVector> AttachPoint;
00051       typedef std::vector<AttachPoint> AttachPoints;
00052 
00053    public:
00054 
00056       DtIntervisibilityDriver( DtDe&, const std::string& className );
00057 
00059       virtual ~DtIntervisibilityDriver();
00060 
00062       virtual bool autoStart() const;
00063 
00064       DtIntervisibilityStateListener* findListener(DtElementID id);
00065       DtIntervisibilityElement* findElement(DtElementID id);
00066 
00069       virtual DtIntervisibilityElement* createIntervisibilityLine(
00070          const DtVector& startPoint, const DtVector& endPoint);
00071 
00076       virtual void createIntervisibilityLine(
00077          const AttachPoints& = AttachPoints());
00078 
00081       const DtUnicode& intervisibilityLine() const;
00082 
00085       virtual DtIntervisibilityElement* createIntervisibilityFan(
00086          const DtVector& startPoint, const DtVector& endPoint);
00087 
00093       virtual void createIntervisibilityFan(
00094          const AttachPoints& = AttachPoints());
00095 
00098       const DtUnicode& intervisibilityFan() const;
00099 
00102       virtual DtIntervisibilityElement* createIntervisibilityEntityFan(
00103          const DtVector& startPoint, const DtVector& endPoint);
00104 
00110       virtual void createIntervisibilityEntityFan(
00111          const AttachPoints& = AttachPoints());
00112 
00115       const DtUnicode& intervisibilityEntityFan() const;
00116 
00119       void addListenerCreator(const std::string&, 
00120          DtIntervisibilityStateListenerCreator*);
00121 
00123       virtual void cancelChanges();
00124 
00127       virtual void destroy(DtElementID id);
00128 
00130       virtual void destroyAll();
00131 
00136       virtual void setAllowCreating(bool);
00137 
00144       virtual void setAllowEditing(bool);
00145 
00147       virtual DtIntervisibilityElement* create(const DtUnicode& definition, 
00148          const DtVector& startPoint, const DtVector& endPoint);
00149 
00150       virtual void intervisibilityObjectsShown( bool show );
00151 
00153       static DtIntervisibilityDriver* findDriver(DtDe& de);
00154 
00156       const std::string& className() const
00157       {
00158          return myClassName;
00159       }
00160 
00162       static std::string theInstanceName();
00163 
00165       DtBaseConnection* connection()
00166       {
00167          return myConnection;
00168       }
00169 
00171       const DtBaseConnection* connection() const
00172       {
00173          return myConnection;
00174       }
00175 
00176    protected:
00180       virtual DtBasicEditingEventProcessor* createEventProcessor() const;
00181 
00183       virtual DtIntervisibilityStateListener* createListener(
00184          const std::string& definition) const;
00185 
00187       virtual DtIntervisibilityElement* createElement(
00188          DtIntervisibilityStateListener*, const DtUnicode& definition) const;
00189 
00195       virtual void create(const DtUnicode& elementDefinitionName,
00196          const AttachPoints& = AttachPoints());
00197 
00199       virtual bool onTick();
00200 
00204       virtual bool onStart();
00205 
00209       virtual bool onStop();
00210 
00212       virtual void completeSetup();
00213 
00215       virtual void slot_onCurrentSelectionChanged(
00216          const DtSelectionManager::IdSet& selected,
00217          const DtSelectionManager::IdSet& deselected);
00218 
00220       virtual void select(const DtSelectionManager::IdSet&, bool);
00221 
00223       virtual void connectProcessorSignals();
00224 
00227       virtual void slot_locationChanged(DtVector, double altAboveGround);
00228 
00230       virtual void slot_altitudeChanged(DtVector, double);
00231 
00233       virtual void slot_altitudeIsDragging(bool);
00234 
00237       virtual void slot_place(DtUniqueID, DtVector, double altAboveGround);
00238 
00240       virtual void finishEditing();
00241 
00245       virtual void slot_dragStart(const DtSelectionManager::IdSet& set,
00246          const DtVector&);
00247 
00251       virtual void modifyEditingObjects(const DtVector& pos, double altAboveGround);
00252 
00255       virtual void resetSelectionForEditableObjects();
00256 
00258       virtual DtVector clamp(const DtVector&, double altAboveGround) const;
00259 
00262       virtual void elementsRemoved(const DtElementData::UniqueIdList&);
00263 
00265       void installElementDefinitions(DtElementDefinitionManager& manager);
00266 
00267    public:
00268 
00273       class DtIntervisibilityConnection : public DtBaseConnection
00274       {
00275       public:
00276 
00278          DtIntervisibilityConnection( DtDe& de );
00279 
00281          virtual ~DtIntervisibilityConnection();
00282 
00288          virtual DtVirtualBaseClass* findInstance( const std::string& instanceName );
00289 
00295          virtual void registerInstance( const std::string& instanceName, DtVirtualBaseClass* instance );
00296 
00298          virtual const DtDisplayUnitsConverter& displayUnitsConverter() const;
00299 
00301          virtual const DtCoordinateSystem& coordinateSystem() const;
00302 
00303       protected:
00304 
00305          DtDe& myDe;
00306 
00307       };
00308 
00309    protected:
00310 
00312       struct OriginalInformation
00313       {
00314 
00315          int myMovingVertex;
00316          DtUniqueID myMovingVertexId;
00317          bool mySelected;
00318 
00319          DtVector myStartPosition;
00320          DtElementID myStartAttachedId;
00321          DtVector myStartOffset;
00322 
00323          DtVector myEndPosition;
00324          DtElementID myEndAttachedId;
00325          DtVector myEndOffset;
00326 
00327          bool myHatLinesEnabled;
00328          bool myHatLinesOnSelectionOnly;
00329          bool myFixedDistance;
00330 
00331       };
00332 
00333    protected:
00334 
00335       typedef boost::unordered_map<DtElementID, OriginalInformation> Editing;
00336       typedef std::map<std::string, DtIntervisibilityStateListenerCreator*> 
00337          ListenerCreatorMap;
00338 
00339       DtDe& myDe;
00340       ElementMap myElements;
00341       ListenerMap myListeners;
00342       DtBasicEditingEventProcessor* myProcessor;
00343       std::string myClassName;
00344       DtBaseConnection* myConnection;
00345       bool myAllowEditing;
00346       bool myAllowCreating;
00347       bool myDistribute;
00348 
00349       DtSignalConnectionManager myConnections;
00350 
00353       DtIntervisibilityElement* myCreatingElement;
00354       DtIntervisibilityStateListener* myCreationListener;
00355       DtSignalConnectionManager myProcessorConnections;
00356 
00357       Editing myEditing;
00358       DtVector myEditingAnchorLocation;
00359 
00361       ListenerCreatorMap myListenerCreatorMap;
00362       DtChannel* myHiddenChannel;
00363 
00364    };
00365 
00366 
00369    class DT_DLL_VRVCORE DtIntervisibilityDriverCreator
00370       : public DtVirtualBaseClass
00371    {
00372    public:
00373 
00374       static DtIntervisibilityDriverCreator& instance( DtDe& de );
00375 
00376       static void registerInstance( DtDe& de, DtIntervisibilityDriverCreator* creator );
00377 
00380       virtual const std::string& extension() const;
00381 
00383       virtual DtIntervisibilityDriver* create( DtDe& de ) const;
00384 
00385    };
00386 
00387 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)