GeoTessCPP  2.0.0
Software to facilitate storage and retrieval of 3D information about the Earth.
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines
include/HorizonDepth.h
Go to the documentation of this file.
00001 //- ****************************************************************************
00002 //- 
00003 //- Copyright 2009 Sandia Corporation. Under the terms of Contract
00004 //- DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00005 //- retains certain rights in this software.
00006 //- 
00007 //- BSD Open Source License.
00008 //- All rights reserved.
00009 //- 
00010 //- Redistribution and use in source and binary forms, with or without
00011 //- modification, are permitted provided that the following conditions are met:
00012 //- 
00013 //-    * Redistributions of source code must retain the above copyright notice,
00014 //-      this list of conditions and the following disclaimer.
00015 //-    * Redistributions in binary form must reproduce the above copyright
00016 //-      notice, this list of conditions and the following disclaimer in the
00017 //-      documentation and/or other materials provided with the distribution.
00018 //-    * Neither the name of Sandia National Laboratories nor the names of its
00019 //-      contributors may be used to endorse or promote products derived from
00020 //-      this software without specific prior written permission.
00021 //- 
00022 //- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023 //- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024 //- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00025 //- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00026 //- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00027 //- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00028 //- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00029 //- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00030 //- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00031 //- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 //- POSSIBILITY OF SUCH DAMAGE.
00033 //-
00034 //- ****************************************************************************
00035 
00036 #ifndef HORIZONDEPTH_H_
00037 #define HORIZONDEPTH_H_
00038 
00039 // **** _SYSTEM INCLUDES_ ******************************************************
00040 
00041 #include <iostream>
00042 #include <fstream>
00043 #include <string>
00044 #include <climits>
00045 
00046 // use standard library objects
00047 using namespace std;
00048 
00049 // **** _LOCAL INCLUDES_ *******************************************************
00050 
00051 #include "CPPUtils.h"
00052 #include "Horizon.h"
00053 #include "Profile.h"
00054 #include "GeoTessPosition.h"
00055 
00056 // **** _BEGIN GEOTESS NAMESPACE_ *********************************************
00057 
00058 namespace geotess {
00059 
00060 // **** _FORWARD REFERENCES_ ***************************************************
00061 
00062 // **** _CLASS DEFINITION_ *****************************************************
00063 
00072 class GEOTESS_EXP_IMP HorizonDepth : public Horizon
00073 {
00074 
00075 private:
00076 
00080         double depth;
00081 
00082 public:
00083 
00092         HorizonDepth(const double& dpth) : Horizon(-1), depth(dpth)
00093         {};
00094 
00105         HorizonDepth(const double& dpth, const int& lyrIndex) : Horizon(lyrIndex), depth(dpth)
00106         {};
00107 
00111         virtual ~HorizonDepth() {};
00112 
00116         HorizonDepth(HorizonDepth& other) : Horizon(other.getLayerIndex()), depth(other.depth)
00117         {
00118         }
00119 
00123         HorizonDepth& operator=(const HorizonDepth& other)
00124         {
00125                 layerIndex = other.layerIndex;
00126                 depth = other.depth;
00127                 return *this;
00128         }
00129 
00130         virtual string class_name() { return "HorizonDepth"; };
00131 
00132         virtual double getValue() { return depth; };
00133 
00134         virtual double getRadius(const double* position, Profile** profiles)
00135         {
00136                 double radius = GeoTessUtils::getEarthRadius(position)-depth;
00137 
00138                 if (layerIndex < 0)
00139                         return radius;
00140                 double bottom = profiles[layerIndex]->getRadiusBottom();
00141                 if (radius <= bottom)
00142                         return bottom;
00143                 double top = profiles[layerIndex]->getRadiusTop();
00144                 if (radius >= top)
00145                         return top;
00146                 return radius;
00147         }
00148 
00149         virtual double getRadius(GeoTessPosition& position)
00150         {
00151                 double radius = position.getEarthRadius()-depth;
00152                 if (layerIndex < 0)
00153                         return radius;
00154                 double bottom = position.getRadiusBottom(layerIndex);
00155                 if (radius <= bottom)
00156                         return bottom;
00157                 double top = position.getRadiusTop(layerIndex);
00158                 if (radius >= top)
00159                         return top;
00160                 return radius;
00161         }
00162 
00163         virtual string str()
00164         {
00165                 string s = "depth " + CPPUtils::dtos(depth) + " " + CPPUtils::itos(layerIndex);
00166                 return s;
00167         }
00168 
00169 }; // end class DataValue
00170 
00171 } // end namespace geotess
00172 
00173 #endif /* HORIZONDEPTH_H_ */