/* -*-c++-*- */ /* osgEarth - Dynamic map generation toolkit for OpenSceneGraph * Copyright 2015 Pelican Mapping * http://osgearth.org * * osgEarth is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ #ifndef OSGEARTH_ELEVATION_FIELD_H #define OSGEARTH_ELEVATION_FIELD_H 1 #include <osgEarth/Common> #include <osgEarth/GeoCommon> #include <osg/Object> #include <osg/Vec3f> namespace osgEarth { /** * A grid of elevation data. */ class OSGEARTH_EXPORT ElevationField : public osg::Object { public: META_Object(osgEarth, ElevationField); /** Constructor */ ElevationField(); /** * Sets the width and height (in samples) of the field. * This will wipe out any existing data. */ void setSize(unsigned width, unsigned height); /** * Gets the height value at sample x,y. */ float getHeight(unsigned x, unsigned y) const; /** * If the data is "dirty", recalculate derived values like * slope, curvature, min and max. */ void update(float spacing); protected: unsigned _width, _height; std::vector<float> _heights; std::vector<float> _slopes; std::vector<float> _curvatures; std::vector<float> _aspects; std::vector<osg::Vec3f> _normals; float _min, _max; bool _dirty; float _spacing; protected: virtual ~ElevationField() { } // Copy CTOR hidden for now ElevationField(const ElevationField& rhs, const osg::CopyOp& copy) { } void computeSlopeAndCurvature(); }; } #endif // OSGEARTH_ELEVATION_FIELD_H