Skip to content

Commit f84567d

Browse files
Marco Bernasocchipka
Marco Bernasocchi
authored andcommitted
initial sync exent button
1 parent 42ccb14 commit f84567d

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

src/plugins/globe/globe_plugin.cpp

+42-31
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "globe_plugin_dialog.h"
2222
#include "qgsosgearthtilesource.h"
2323

24+
#include <cmath>
25+
2426
#include <qgisinterface.h>
2527
#include <qgisgui.h>
2628
#include <qgslogger.h>
@@ -270,14 +272,12 @@ struct PanControlHandler : public NavigationControlHandler
270272
{
271273
if ( 0 == _dx && 0 == _dy)
272274
{
273-
_manip->setRotation(osg::Quat());
274-
//FIXME: instead of next 2 lines use _manip->home( control->ea, control->aa );
275-
osgEarthUtil::Viewpoint viewpoint ( osg::Vec3d ( -90, 0, 0.0 ), 0.0, -90.0, 3e7 );
276-
_manip->setViewpoint ( viewpoint, 4.0 );
275+
//TODO
276+
OE_NOTICE << "ZOOM reset" << _manip->getDistance();
277277
}
278278
else
279279
{
280-
_manip->pan ( _dx, _dy );
280+
_manip->pan ( _dx, _dy );
281281
}
282282
}
283283
private:
@@ -313,14 +313,14 @@ struct ZoomControlHandler : public NavigationControlHandler
313313
{
314314
if ( 0 == _dx && 0 == _dy)
315315
{
316-
_manip->setRotation(osg::Quat());
317-
//FIXME: instead of next 2 lines use _manip->home( control->ea, control->aa );
318-
osgEarthUtil::Viewpoint viewpoint ( osg::Vec3d ( -90, 0, 0.0 ), 0.0, -90.0, 3e7 );
319-
_manip->setViewpoint ( viewpoint, 4.0 );
316+
_manip->setRotation(osg::Quat());
317+
//FIXME: instead of next 2 lines use _manip->home( control->ea, control->aa );
318+
osgEarthUtil::Viewpoint viewpoint ( osg::Vec3d ( -90, 0, 0.0 ), 0.0, -90.0, 3e7 );
319+
_manip->setViewpoint ( viewpoint, 4.0 );
320320
}
321321
else
322322
{
323-
_manip->zoom ( _dx, _dy );
323+
_manip->zoom ( _dx, _dy );
324324
}
325325
}
326326
private:
@@ -329,6 +329,36 @@ struct ZoomControlHandler : public NavigationControlHandler
329329
double _dy;
330330
};
331331

332+
bool FlyToExtentHandler::handle ( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa )
333+
{
334+
if ( ea.getEventType() == ea.KEYDOWN && ea.getKey() == '1' )
335+
{
336+
_manip->setRotation(osg::Quat());
337+
338+
//get actual mapCanvas->extent().height in meters
339+
QgsRectangle extent = mQGisIface->mapCanvas()->extent();
340+
QgsCoordinateReferenceSystem* destSrs = new QgsCoordinateReferenceSystem(31254, QgsCoordinateReferenceSystem::EpsgCrsId );
341+
QgsCoordinateTransform* trans = new QgsCoordinateTransform( mQGisIface->mapCanvas()->mapRenderer()->destinationSrs(), *destSrs);
342+
QgsRectangle projectedExtent = trans->transformBoundingBox( extent );
343+
344+
const double PI = 3.141592;
345+
double viewAngle = 30;
346+
double height = projectedExtent.height();
347+
double distance = height / tan( viewAngle*PI/180 ); //c = b*cotan(B)
348+
349+
QString md, me;
350+
md.setNum(height);
351+
me.setNum(distance);
352+
QMessageBox msgBox;
353+
msgBox.setText(md + " " + me );
354+
msgBox.exec();
355+
356+
osgEarthUtil::Viewpoint viewpoint ( osg::Vec3d ( extent.center().x(), extent.center().y(), 0.0 ), 0.0, -90.0, distance );
357+
_manip->setViewpoint ( viewpoint, 4.0 );
358+
}
359+
return false;
360+
}
361+
332362
void GlobePlugin::setupControls()
333363
{
334364

@@ -358,8 +388,8 @@ void GlobePlugin::setupControls()
358388

359389
//Move Reset
360390
osg::Image* moveResetImg = osgDB::readImageFile ( imgDir + "/move-reset.png" );
361-
ImageControl* moveReset = new ImageControl ( moveResetImg );
362-
moveReset->addEventHandler ( new MyClickHandler );
391+
ImageControl* moveReset = new NavigationControl ( moveResetImg );
392+
moveReset->addEventHandler ( new PanControlHandler ( manip, 0, 0 ) );
363393

364394

365395
//Vertical container
@@ -606,25 +636,6 @@ void GlobePlugin::copyFolder ( QString sourceFolder, QString destFolder )
606636
}
607637
}
608638

609-
bool FlyToExtentHandler::handle ( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa )
610-
{
611-
if ( ea.getEventType() == ea.KEYDOWN && ea.getKey() == '1' )
612-
{
613-
QgsRectangle extent = mQGisIface->mapCanvas()->extent();
614-
QgsPoint center = extent.center();
615-
double zoom = extent.width();
616-
osgEarthUtil::Viewpoint viewpoint ( osg::Vec3d ( center.x(), center.y(), 0.0 ), 0.0, -90.0, 10000 );
617-
_manip->setViewpoint ( viewpoint, 4.0 );
618-
619-
/*QString text_double;
620-
text_double.setNum(center.y());
621-
QMessageBox msgBox;
622-
msgBox.setText(text_double);
623-
msgBox.exec();*/
624-
}
625-
return false;
626-
}
627-
628639
bool NavigationControl::handle ( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, ControlContext& cx )
629640
{
630641
switch ( ea.getEventType() )

0 commit comments

Comments
 (0)