OSGEarth绘制Geometry:绘圆(二)

原创 2015年07月09日 21:58:31

功能描述如下:
1. 鼠标点击之处为圆心位置;
2. 以圆心到鼠标move的距离为半径绘圆;
3. 鼠标有点点击结束绘制;
4. 鼠标点击为新的圆心,继续下次绘制。
代码如下:drawcircle.h

class DrawCircle : public HandleAdapter
{
public:
    DrawCircle(GraphicsView* view);
    ~DrawCircle();

protected:
    virtual void slotPicked(osg::Vec3d pos);
    virtual void slotMoveing(osg::Vec3d pos);
    virtual void slotRightHandle();

private:
    osg::Vec3d m_centerPoint;

    osgEarth::Symbology::Style m_circleStyle;
    osgEarth::Annotation::CircleNode* m_pCircleNode;
    osgEarth::Annotation::CircleNodeEditor* m_pCircleEdit;
};

功能代码如下:drawcircle.cpp

DrawCircle::DrawCircle(GraphicsView* view)
    : HandleAdapter(view)
{
    m_centerPoint = osg::Vec3d();
    m_pLayerGroup->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
    m_pCircleNode = NULL;
    m_pCircleEdit = NULL;

    m_circleStyle.getOrCreate<osgEarth::Symbology::PolygonSymbol>()
        ->fill()->color() = osgEarth::Symbology::Color::Yellow;
    m_circleStyle.getOrCreate<osgEarth::Symbology::AltitudeSymbol>()
        ->clamping() = osgEarth::Symbology::AltitudeSymbol::CLAMP_TO_TERRAIN;
    m_circleStyle.getOrCreate<osgEarth::Symbology::AltitudeSymbol>()
        ->technique() = osgEarth::Symbology::AltitudeSymbol::TECHNIQUE_DRAPE;
    m_circleStyle.getOrCreate<osgEarth::Symbology::AltitudeSymbol>()
        ->verticalOffset() = 0.1;
}

DrawCircle::~DrawCircle()
{

}

void DrawCircle::slotPicked(osg::Vec3d pos)
{
    if (m_centerPoint == osg::Vec3d() && pos == osg::Vec3d())
    {
        return;
    }
    else if (m_centerPoint == osg::Vec3d())
    {
        m_centerPoint = pos;
    }

    if (m_pCircleNode == NULL)
    {
        m_pCircleNode = new osgEarth::Annotation::CircleNode(
            m_pMap3D->getMapNode(),
            osgEarth::GeoPoint::GeoPoint(m_pMap3D->getSRS(),
            m_centerPoint, osgEarth::AltitudeMode::ALTMODE_RELATIVE),
            osgEarth::Linear::Linear(50, osgEarth::Units::METERS),
            m_circleStyle,
            osgEarth::Angular::Angular(0.0, osgEarth::Units::DEGREES));

        m_pCircleEdit = new osgEarth::Annotation::CircleNodeEditor(m_pCircleNode);
        m_pLayerGroup->addChild(m_pCircleNode);
        m_pLayerGroup->addChild(m_pCircleEdit);
    }

    m_pCircleNode->setRadius(
        osgEarth::GeoMath::distance(m_centerPoint, pos, m_pMap3D->getSRS()));
}

void DrawCircle::slotMoveing(osg::Vec3d pos)
{
    if (m_pCircleNode != NULL && m_centerPoint != osg::Vec3d())
    {
        m_pCircleNode->setRadius(
            osgEarth::GeoMath::distance(m_centerPoint, pos, m_pMap3D->getSRS()));
    }
}

void DrawCircle::slotRightHandle()
{
    // 保证下次绘制的为新的圆
    m_centerPoint = osg::Vec3d();
    m_pCircleNode = NULL;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

osg实现画圆功能,并能放大

  • 2013年10月17日 18:58
  • 2KB
  • 下载

osg 圆柱画法

  • 2013年09月05日 11:18
  • 1.34MB
  • 下载

OSG绘制几何体学习总结(超全)

在osg中,场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率 场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲...
  • u012463389
  • u012463389
  • 2016年05月23日 23:01
  • 1943

OSGEarth绘制Geometry:绘多边形(三)

功能描述如下: 1. 鼠标多次点击的区域绘制多边形,为黄色; 2. 最近一次点击的点以及第一次点击的点和鼠标move到的点之间连线,为两条红色的虚线,表示下次即将绘制的区域块。 代码如下:...
  • chlk118
  • chlk118
  • 2015年07月09日 22:38
  • 3068

OSGEarth绘制Geometry:画线(一)

在OSGEarth中绘制线,首先考虑osgEarth::Annotation::FeatureNode。 功能描述如下: 1. 鼠标两次点击的点之间连线,为黄色的实线; 2. 最近一次点击的点和...
  • chlk118
  • chlk118
  • 2015年07月09日 21:18
  • 6113

osgearth_manip示例解析

/* -*-c++-*- */ /* osgEarth - Dynamic map generation toolkit for OpenSceneGraph * Copyright 2008-2...
  • J1101460678
  • J1101460678
  • 2016年03月10日 15:23
  • 1778

5、osg绘制正方形和四方块以及内置的几何图形

1、首先要定义一个几何图形,用来创建正方形的一个对象,这个对象根据坐标,颜色来进行绘制,如下代码创建一个几何对象: osg::ref_ptr geom=new osg::Geometry();//定义...
  • sunxiaoju
  • sunxiaoju
  • 2015年12月08日 15:18
  • 2568

OSGEarth绘制Geometry:画线(一)

在OSGEarth中绘制线,首先考虑osgEarth::Annotation::FeatureNode。 功能描述如下: 1. 鼠标两次点击的点之间连线,为黄色的实线; 2. 最近一次点击的点和...
  • chlk118
  • chlk118
  • 2015年07月09日 21:18
  • 6113

5、osg绘制正方形和四方块以及内置的几何图形

1、首先要定义一个几何图形,用来创建正方形的一个对象,这个对象根据坐标,颜色来进行绘制,如下代码创建一个几何对象: osg::ref_ptr geom=new osg::Geometry();//定义...
  • sunxiaoju
  • sunxiaoju
  • 2015年12月08日 15:18
  • 2568

OSG绘制几何体学习总结(超全)

在osg中,场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率 场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲...
  • u012463389
  • u012463389
  • 2016年05月23日 23:01
  • 1943
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSGEarth绘制Geometry:绘圆(二)
举报原因:
原因补充:

(最多只允许输入30个字)