功能描述如下:
1. 鼠标多次点击的区域绘制多边形,为黄色;
2. 最近一次点击的点以及第一次点击的点和鼠标move到的点之间连线,为两条红色的虚线,表示下次即将绘制的区域块。
代码如下:drawpolygon.h
class DrawPolygon : public HandleAdapter
{
public:
DrawPolygon(GraphicsView* view);
~DrawPolygon();
protected:
virtual void slotPicked(osg::Vec3d pos);
virtual void slotMoveing(osg::Vec3d pos);
virtual void slotRightHandle();
private:
std::vector<osg::Vec3d> m_vecPoints;
// 多边形绘制
osgEarth::Symbology::Style m_polygonStyle;
osgEarth::Annotation::FeatureNode* m_pFeatureNode;
osgEarth::Annotation::FeatureEditor* m_pPolygonEdit;
// 虚线
osgEarth::Symbology::Style m_stippleLineStyle;
osgEarth::Annotation::FeatureNode* m_pStippleFeatureNode;
};
功能实现如下:drawpolygon.cpp
DrawPolygon::DrawPolygon(GraphicsView* view)
: HandleAdapter(view)
{
m_vecPoints.clear();
m_pFeatureNode = NULL;
m_pStippleFeatureNode = NULL;
m_pPolygonEdit = NULL;
// 多边形的style
m_polygonStyle.getOrCreate<osgEarth::Symbology::PolygonSymbol>()
->fill()->color() = osgEarth::