/* -*-c++-*- */ /* osgEarth - Geospatial SDK for OpenSceneGraph * Copyright 2020 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 */ #ifndef OSGEARTHSYMBOLOGY_LINE_SYMBOL_H #define OSGEARTHSYMBOLOGY_LINE_SYMBOL_H 1 #include #include namespace osgEarth { /** * Symbol that describes how to draw linear geometry. */ class OSGEARTH_EXPORT LineSymbol : public Symbol { public: META_Object(osgEarth, LineSymbol); LineSymbol(const LineSymbol& rhs,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); LineSymbol(const Config& conf =Config()); /** dtor */ virtual ~LineSymbol() { } /** Line stroking parameters */ optional& stroke() { return _stroke; } const optional& stroke() const { return _stroke; } /** Tessellate the line geometry such that no segment is longer than this value */ optional& tessellationSize() { return _tessellationSize; } const optional& tessellationSize() const { return _tessellationSize; } /** Tessellate the line geometry such that each source segment is divided into this many parts. */ optional& tessellation() { return _tessellation; } const optional& tessellation() const { return _tessellation; } /** Minimum angle (deg) for which to create creases where applicable (like when outlining) */ optional& creaseAngle() { return _creaseAngle; } const optional& creaseAngle() const { return _creaseAngle; } /** URI of an image to load and use to texture lines */ optional& imageURI() { return _imageURI; } const optional& imageURI() const { return _imageURI; } //! Length of the image (y dimension) in meters optional& imageLength() { return _imageLength; } const optional& imageLength() const { return _imageLength; } //! Whether to force the use of legacy OpenGL lines (default=false) //! instead of the GPU-based lines that are required by GLCORE/GLES optional& useGLLines() { return _useGLLines; } const optional& useGLLines() const { return _useGLLines; } /** 3D line as a wire. */ optional& useWireLines() { return _useWireLines; } const optional& useWireLines() const { return _useWireLines; } public: virtual Config getConfig() const; virtual void mergeConfig( const Config& conf ); static void parseSLD(const Config& c, class Style& style); protected: optional _stroke; optional _tessellation; optional _creaseAngle; optional _tessellationSize; optional _imageURI; optional _imageLength; optional _useGLLines; optional _useWireLines; }; } // namespace osgEarth #endif // OSGEARTHSYMBOLOGY_LINE_SYMBOL_H