![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtCopyObject.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00016 00017 #pragma once 00018 00019 #include <vrfGuiCore/vrfGuiCore.h> 00020 #include <vrfGuiCore/DtVrfObjectFacadeInterface.h> 00021 00022 #include <vrvCore/DtDe.h> 00023 #include <vrvCore/DtUniqueID.h> 00024 00025 #include <matrix/vlVector.h> 00026 #include <matrix/geodCoord.h> 00027 00028 namespace makVrv 00029 { 00030 struct DtVrlinkSimulatedBaseState; 00031 class DtSimEntry; 00032 } 00033 00034 class DtVector; 00035 00036 namespace makVrf 00037 { 00038 struct DtVrfObjectDataState; 00039 00041 00042 class DT_DLL_VRFGUICORE DtStreamString 00043 { 00044 public: 00045 DtStreamString(); 00046 DtStreamString(const std::string&); 00047 DtStreamString(std::string*); 00048 DtStreamString(int size, const char* buf); 00049 00050 virtual void write(std::ostringstream&) const; 00051 virtual void read(std::istringstream&); 00052 00053 const std::string& value() const 00054 { 00055 return myValue; 00056 } 00057 00058 protected: 00059 std::string myValue; 00060 std::string* myInput; 00061 }; 00062 00063 DT_DLL_VRFGUICORE std::ostringstream& operator<<(std::ostringstream&, const DtStreamString&); 00064 DT_DLL_VRFGUICORE std::istringstream& operator>>(std::istringstream&, DtStreamString&); 00065 00066 DT_DLL_VRFGUICORE std::ostringstream& operator<<(std::ostringstream&, const DtVector&); 00067 DT_DLL_VRFGUICORE std::istringstream& operator>>(std::istringstream&, DtVector&); 00068 00070 00071 template <typename Type> 00072 class DtStreamNumber 00073 { 00074 public: 00075 DtStreamNumber(Type t) 00076 : myValue(t) 00077 , myInput(0) 00078 { 00079 } 00080 00081 DtStreamNumber(Type* t) 00082 : myInput(t) 00083 { 00084 } 00085 00086 void write(std::ostringstream& s) const 00087 { 00088 s << myValue << " "; 00089 } 00090 00091 void read(std::istringstream& s) 00092 { 00093 s >> myValue; 00094 s.ignore(); 00095 00096 if (myInput) 00097 { 00098 *myInput = myValue; 00099 } 00100 } 00101 00102 Type value() const 00103 { 00104 return myValue; 00105 } 00106 00107 protected: 00108 Type myValue; 00109 Type* myInput; 00110 }; 00111 00112 template <typename Type> std::ostringstream& operator<<(std::ostringstream& s, const DtStreamNumber<Type>& num) 00113 { 00114 num.write(s); 00115 00116 return s; 00117 } 00118 00119 template <typename Type> std::istringstream& operator>>(std::istringstream& s, DtStreamNumber<Type>& num) 00120 { 00121 num.read(s); 00122 00123 return s; 00124 } 00125 00126 class DT_DLL_VRFGUICORE DtCopyObject 00127 { 00128 typedef std::vector<DtGeodeticCoord> CopyOffsets; 00129 00130 public: 00131 DtCopyObject(makVrv::DtDe&); 00132 virtual ~DtCopyObject(); 00133 00134 public: 00135 enum DtPasteFlags 00136 { 00137 DtPasteNewName = 0x00000001, 00138 DtPasteAppearance = 0x00000002, 00139 DtPasteHeading = 0x00000004, 00140 DtPasteEngagement = 0x00000008, 00141 DtPastePlan = 0x00000010, 00142 DtPasteAboveSeaLevel = 0x00000020, 00143 DtPasteAboveTerrain = 0x00000040, 00144 DtPasteFormation = 0x00000080, 00145 00146 DtAllPasteFlags = DtPasteNewName | DtPasteAppearance | DtPasteHeading | DtPasteEngagement | DtPastePlan | DtPasteAboveTerrain 00147 }; 00148 00149 public: 00151 virtual void copy(makVrv::DtSimEntry*); 00152 00155 virtual void read(const std::string& buf); 00156 00158 virtual void cancel(); 00159 00160 const std::string& name() const 00161 { 00162 return myName; 00163 } 00164 00166 virtual std::string copyPendingMessage() const; 00167 00169 virtual std::string pastePendingMessage() const; 00170 00172 virtual void setAltitudeClampType(DtAltitudeClampType); 00173 DtAltitudeClampType altitudeClampType() const; 00174 00175 void setType(int t) 00176 { 00177 myType = t; 00178 } 00179 00180 int type() const 00181 { 00182 return myType; 00183 } 00184 00185 void setBuffer(const std::string& b) 00186 { 00187 myBuffer = b; 00188 } 00189 00190 const std::string& buffer() const 00191 { 00192 return myBuffer; 00193 } 00194 00195 protected: 00198 virtual void write(std::ostringstream& str, const makVrv::DtVrlinkSimulatedBaseState* data, makVrv::DtUniqueID id); 00199 00201 virtual void write(std::ostringstream& str, const DtVrfObjectDataState* data); 00202 00205 virtual DtVrfObjectDataState* createReadableObjectStateData() const; 00206 virtual makVrv::DtVrlinkSimulatedBaseState* createReadableStateData() const; 00207 00210 virtual void read(std::istringstream& str, makVrv::DtVrlinkSimulatedBaseState* data); 00211 00213 virtual void read(std::istringstream& str, DtVrfObjectDataState* data); 00214 00216 virtual void checkCopyComplete(); 00217 00220 virtual bool copyOperationsPending() const; 00221 00223 virtual void copyComplete(); 00224 00226 virtual bool cancelComplete() const; 00227 00228 public: 00233 virtual void paste(const DtVector&, int flags = DtAllPasteFlags); 00234 00236 virtual DtGeodeticCoord center() const; 00237 virtual DtVector localCenter() const; 00238 virtual DtGeodeticCoord calculateCenter() const; 00239 00242 virtual DtVector origin() const; 00243 00246 virtual void setGeometricCenter(const DtGeodeticCoord&); 00247 00248 const DtGeodeticCoord& geometricCenter() const; 00249 00251 virtual void createFacade(); 00252 00254 virtual void setOrigin(const DtGeodeticCoord&); 00255 00256 const makVrv::DtVrlinkSimulatedBaseState* readableStateData() const 00257 { 00258 return myReadableStateData; 00259 } 00260 00261 protected: 00263 virtual void readComplete(std::istringstream& str); 00264 00267 virtual void checkPasteComplete(); 00268 00270 virtual bool pasteComplete() const; 00271 00274 virtual void createObject(const DtVector&); 00275 00277 virtual int generateRequestId(); 00278 00280 virtual double groundHeight(const DtVector& currentLocal) const; 00281 00284 virtual void setupOffsets(const DtGeodeticCoord&); 00285 00287 virtual DtVector offsetLocation(int, const DtVector& loc) const; 00288 00293 virtual DtGeodeticCoord calculateOffsetPoint(const DtGeodeticCoord& start, const DtGeodeticCoord& end, 00294 double& altAboveTerrain, double& altAboveSeaLevel) const; 00295 00297 virtual DtVector localLocation(const DtGeodeticCoord&, int) const; 00298 00299 public: 00300 boost::signal<void (DtCopyObject*)> signal_copyCancelled; 00301 boost::signal<void (DtCopyObject*, const std::string&)> signal_copied; 00302 boost::signal<void (DtCopyObject*, const std::string&)> signal_copyOperationPending; 00303 00304 boost::signal<void (DtCopyObject*)> signal_pasted; 00305 boost::signal<void (DtCopyObject*, const std::string&)> signal_pasteOperationPending; 00306 boost::signal<void (DtCopyObject*)> signal_pasteCancelled; 00307 00308 protected: 00309 makVrv::DtDe& myDe; 00310 std::ostringstream myOutput; 00311 std::string myName; 00312 int myPasteFlags; 00313 00314 DtVrfObjectDataState* myReadableObjectStateData; 00315 makVrv::DtVrlinkSimulatedBaseState* myReadableStateData; 00316 00317 mutable DtGeodeticCoord myCenter; 00318 00319 CopyOffsets myOffsets; 00320 00321 typedef std::vector<double> HeightOffsets; 00322 00323 HeightOffsets myAltitudeAboveTerrain; 00324 HeightOffsets myAltitudeAboveSeaLevel; 00325 00326 DtAltitudeClampType myAltitudeClampType; 00327 DtReferenceEllipsoid myReferenceEllipsoid; 00328 00329 int myType; 00330 std::string myBuffer; 00331 00332 DtGeodeticCoord myGeometricCenter; 00333 }; 00334 00337 class DT_DLL_VRFGUICORE DtCopyObjectCreator 00338 { 00339 public: 00340 virtual DtCopyObject* create(makVrv::DtDe&) = 0; 00341 }; 00342 }