/* -*-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 OSGEARTHFEATURES_POLYGONIZE_LINES_H #define OSGEARTHFEATURES_POLYGONIZE_LINES_H 1 #include #include #include #include #include #include namespace osgEarth { namespace Util { /** * Triangulates a line string into a buffered geometry. * * The resulting geometry will retain the original line string * vertices as a "spine", and will include triangles on either * side of the spine that form the buffered polygons. Depending * on the Stroke, the geometry may also have triangulated end caps. */ class OSGEARTH_EXPORT PolygonizeLinesOperator : public OsgGeometryOperator { public: /** * Construct the operator * @param[in ] stroke Line rendering properties */ PolygonizeLinesOperator( const LineSymbol* symbol); /** * Run the polygonizer. * * @param[in ] verts Line string geometry to polygonize. The polygonizer * will add this array to the resulting geometry. * @param[in ] normals Localized normals associated with the input verts. * Used to determine the plane in which to polygonize each * line segment. Optional; can be NULL * @param[in ] callback Called for each new point added to the polygonized line * with the source line index. Optional, call be NULL. * @param[in ] twosided Generate polygons on both sides of the center line. * * @return Triangulated geometry, including primitive set */ osg::Geometry* operator()( osg::Vec3Array* verts, osg::Vec3Array* normals, Callback* callback =0L, bool twosided =true) const; /** * Installs an auto-scaling shader on a stateset. */ void installShaders(osg::Node* node) const; protected: osg::ref_ptr _line; friend class PolygonizeLinesFilter; }; /** * Feature Filter that generates polygonized line geometry. */ class OSGEARTH_EXPORT PolygonizeLinesFilter : public FeaturesToNodeFilter { public: /** Constructs the filter with Style information */ PolygonizeLinesFilter(const Style& style); public: // FeaturesToNodeFilter /** Pushes a list of features through the filter. */ osg::Node* push( FeatureList& input, FilterContext& context ); protected: Style _style; }; } } #endif // OSGEARTHFEATURES_POLYGONIZE_LINES_H