void CircleNode::rebuild() { std::string currentDecoration = getDecoration(); clearDecoration(); //Remove all children from this node //removeChildren( 0, getNumChildren() ); if ( getRoot()->getNumParents() == 0 ) { this->addChild( getRoot() ); } //Remove all children from the attach point getChildAttachPoint()->removeChildren( 0, getChildAttachPoint()->getNumChildren() ); // construct a local-origin circle. GeometryFactory factory; Geometry* geom = factory.createCircle(osg::Vec3d(0,0,0), _radius, _numSegments); if ( geom ) { GeometryCompiler compiler; osg::ref_ptr<Feature> feature = new Feature(geom, 0L); //todo: consider the SRS osg::Node* node = compiler.compile( feature.get(), _style, FilterContext(0L) ); if ( node ) { getChildAttachPoint()->addChild( node ); getDrapeable()->setDraped( _draped ); } applyStyle( _style ); } setDecoration( currentDecoration ); }
void CircleNode::rebuild() { std::string currentDecoration = getDecoration(); clearDecoration(); // Reset this node. osgEarth::clearChildren( this ); osgEarth::clearChildren( _xform.get() ); this->addChild( _xform.get() ); // construct a local-origin circle. GeometryFactory factory; Geometry* geom = NULL; if (abs(_arcEnd.as(Units::DEGREES) - _arcStart.as(Units::DEGREES)) >= 360.0) { geom = factory.createCircle(osg::Vec3d(0,0,0), _radius, _numSegments); } else { geom = factory.createArc(osg::Vec3d(0,0,0), _radius, _arcStart, _arcEnd, _numSegments, 0L, _pie); } if ( geom ) { GeometryCompiler compiler; osg::ref_ptr<Feature> feature = new Feature(geom, 0L); //todo: consider the SRS osg::Node* node = compiler.compile( feature.get(), _style, FilterContext(0L) ); if ( node ) { _xform->addChild( node ); this->replaceChild( _xform.get(), applyAltitudePolicy(_xform.get(), _style) ); } applyGeneralSymbology( _style ); setLightingIfNotSet( false ); } setDecoration( currentDecoration ); }