![]() |
VR-Forces 4.0.4 Class Documentation
|
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 }