virtual void onPositionChanged(const Dragger* sender, const osgEarth::GeoPoint& position) { const osg::EllipsoidModel* em = _node->getMapNode()->getMapSRS()->getEllipsoid(); //Figure out the distance between the center of the circle and this new location GeoPoint center = _node->getPosition(); double distance = GeoMath::distance(osg::DegreesToRadians( center.y() ), osg::DegreesToRadians( center.x() ), osg::DegreesToRadians( position.y() ), osg::DegreesToRadians( position.x() ), em->getRadiusEquator()); double bearing = GeoMath::bearing(osg::DegreesToRadians( center.y() ), osg::DegreesToRadians( center.x() ), osg::DegreesToRadians( position.y() ), osg::DegreesToRadians( position.x() )); //Compute the new angular rotation based on how they moved the point if (_major) { _node->setRotationAngle( Angle( bearing-osg::PI_2, Units::RADIANS ) ); _node->setRadiusMajor( Distance(distance, Units::METERS ) ); } else // minor { _node->setRotationAngle( Angle( bearing, Units::RADIANS ) ); _node->setRadiusMinor( Distance(distance, Units::METERS ) ); } _editor->updateDraggers(); }
void SceneController::setBounds(const osgEarth::GeoPoint& p1, const osgEarth::GeoPoint& p2) { _boundsLL.set(osg::minimum(p1.x(), p2.x()), osg::minimum(p1.y(), p2.y())); _boundsUR.set(osg::maximum(p1.x(), p2.x()), osg::maximum(p1.y(), p2.y())); if (_annoRoot.valid()) { //TODO: use correct coords here osgEarth::Symbology::Geometry* geom = new osgEarth::Symbology::Polygon(); geom->push_back(_boundsLL.x(), _boundsLL.y()); geom->push_back(_boundsUR.x(), _boundsLL.y()); geom->push_back(_boundsUR.x(), _boundsUR.y()); geom->push_back(_boundsLL.x(), _boundsUR.y()); osgEarth::Features::Feature* feature = new osgEarth::Features::Feature(geom, _mapNode->getMapSRS()->getGeographicSRS(), _boundsStyle); if (!_bboxNode.valid()) { _bboxNode = new osgEarth::Annotation::FeatureNode(_mapNode, feature); _bboxNode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); _annoRoot->addChild( _bboxNode.get() ); } else { _bboxNode->setFeature(feature); } } }
void AddPolygonDialog::addPoint(const osgEarth::GeoPoint& point) { if (_editing) _polygon->push_back(point.vec3d()); else _polygon->insert(_polygon->end() - 1, point.vec3d()); if (!_polyFeature.valid() && _polygon->size() > 2) { osgEarth::Symbology::Style polyStyle; polyStyle.getOrCreate<LineSymbol>()->stroke()->color() = _pathColor; polyStyle.getOrCreate<LineSymbol>()->stroke()->width() = ANNOTATION_PATH_WIDTH; polyStyle.getOrCreate<LineSymbol>()->tessellation() = 20; polyStyle.getOrCreate<PolygonSymbol>()->fill()->color() = _fillColor; polyStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; _polyFeature = new osgEarth::Features::Feature(_polygon, _mapNode->getMapSRS(), polyStyle); if (!_polyNode.valid()) { _polyNode = new osgEarth::Annotation::FeatureNode(_mapNode, _polyFeature, _drapeCheckbox->checkState() == Qt::Checked); _root->addChild(_polyNode); } _okButton->setEnabled(true); } refreshFeatureNode(); createPointDragger(_polygon->size() - 1, point); }
virtual void onPositionChanged(const Dragger* sender, const osgEarth::GeoPoint& position) { //Convert to lat/lon GeoPoint p; position.transform(SpatialReference::create( "epsg:4326"), p); _overlay->setControlPoint(_controlPoint, p.x(), p.y(), _singleVert); }
void AddPathDialog::addPoint(const osgEarth::GeoPoint& point) { if (!_pathLine.valid()) _pathLine = new osgEarth::Symbology::LineString(); _pathLine->push_back(point.vec3d()); if (!_pathFeature.valid() && _pathLine->size() > 1) { osgEarth::Symbology::Style pathStyle; pathStyle.getOrCreate<LineSymbol>()->stroke()->color() = Color::White; pathStyle.getOrCreate<LineSymbol>()->stroke()->width() = 2.0f; pathStyle.getOrCreate<LineSymbol>()->tessellation() = 20; pathStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; pathStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_GPU; _pathFeature = new osgEarth::Features::Feature(_pathLine, _mapNode->getMapSRS(), pathStyle); //_pathFeature->geoInterp() = GEOINTERP_GREAT_CIRCLE; if (!_pathNode.valid()) { _pathNode = new osgEarth::Annotation::FeatureNode(_mapNode, _pathFeature); _root->addChild(_pathNode); } _okButton->setEnabled(true); } refreshFeatureNode(); createPointDragger(_pathLine->size() - 1, point); }
virtual void onPositionChanged(const Dragger* sender, const osgEarth::GeoPoint& position) { (*_featureNode->getFeature()->getGeometry())[_point] = osg::Vec3d(position.x(), position.y(), 0); _featureNode->init(); }
void AddPolygonDialog::movePoint(int index, const osgEarth::GeoPoint& position) { (*_polygon.get())[index] = position.vec3d(); refreshFeatureNode(); }
void AddPolygonDialog::mapMouseMove(const osgEarth::GeoPoint& point) { _polygon->back().set(point.vec3d()); refreshFeatureNode(true); }