/* -*-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 OSGEARTHANNO_FEATURE_EDITING_H #define OSGEARTHANNO_FEATURE_EDITING_H 1 #include <osgEarthAnnotation/AnnotationEditing> #include <osgEarth/MapNode> #include <osgGA/GUIEventHandler> #include <osgViewer/View> #include <osgEarthAnnotation/FeatureNode> namespace osgEarth { namespace Annotation { /** * AddPointHandler is a GUIEventHandler that allows you to append points to a Feature's Geometry */ struct OSGEARTHANNO_EXPORT AddPointHandler : public osgGA::GUIEventHandler { public: /** * Constructs a new AddPointHandler * @param featureNode * The FeatureNode */ AddPointHandler(FeatureNode* featureNode); bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ); /** * Sets the mouse button used for adding new points */ void setMouseButton( osgGA::GUIEventAdapter::MouseButtonMask mouseButton); /** * Gets the mouse button used for adding new points */ osgGA::GUIEventAdapter::MouseButtonMask getMouseButton() const; void setIntersectionMask( osg::Node::NodeMask intersectionMask ) { _intersectionMask = intersectionMask; } osg::Node::NodeMask getIntersectionMask() const { return _intersectionMask;} private: bool addPoint( float x, float y, osgViewer::View* view ); osgGA::GUIEventAdapter::MouseButtonMask _mouseButton; bool _mouseDown; bool _firstMove; osg::ref_ptr< FeatureNode > _featureNode; osg::Node::NodeMask _intersectionMask; }; /** * Node you can add to your scene graph to edit the verts of a Feature's Geometry */ class OSGEARTHANNO_EXPORT FeatureEditor : public AnnotationEditor { public: /** * Constructs a new FeatureEditor * @param featureNode * The FeatureNode to edit */ FeatureEditor( FeatureNode* featureNode ); /** *Gets the color of the draggers when they are selected */ const osg::Vec4f& getPickColor() const; /** *Sets the color of the draggers when they are selected */ void setPickColor( const osg::Vec4f& pickColor ); /** *Gets the color of the draggers */ const osg::Vec4f& getColor() const; /** *Sets the color of the draggers */ void setColor( const osg::Vec4f& color ); /** *Gets the dragger size */ float getSize() const; /** *Sets the dragger size */ void setSize( float size ); protected: void init(); osg::Vec4f _pickColor; osg::Vec4f _color; float _size; osg::ref_ptr< FeatureNode > _featureNode; }; } } // namespace osgEarth::Annotation #endif // OSGEARTHANNO_FEATURE_EDITING_H