VR-Forces 4.0.4 Class Documentation
include/vrfGuiCore/DtCopyObject.h
Go to the documentation of this file.
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 }

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)