本文整理汇总了C++中IconSymbol类的典型用法代码示例。如果您正苦于以下问题:C++ IconSymbol类的具体用法?C++ IconSymbol怎么用?C++ IconSymbol使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IconSymbol类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OrthoNode
TrackNode::TrackNode(MapNode* mapNode,
const GeoPoint& position,
osg::Image* image,
const TrackNodeFieldSchema& fieldSchema ) :
OrthoNode ( mapNode, position )
{
if ( image )
{
IconSymbol* icon = _style.getOrCreate<IconSymbol>();
icon->setImage( image );
}
init( fieldSchema );
}
示例2: if
void
IconSymbol::parseSLD(const Config& c, Style& style)
{
IconSymbol defaults;
if ( match(c.key(), "icon") ) {
style.getOrCreate<IconSymbol>()->url() = c.value();
style.getOrCreate<IconSymbol>()->url()->setURIContext( c.referrer() );
}
else if ( match(c.key(),"icon-library") ) {
style.getOrCreate<IconSymbol>()->library() = StringExpression(c.value());
}
else if ( match(c.key(), "icon-placement") ) {
if ( match(c.value(), "vertex") )
style.getOrCreate<IconSymbol>()->placement() = ModelSymbol::PLACEMENT_VERTEX;
else if ( match(c.value(), "interval") )
style.getOrCreate<IconSymbol>()->placement() = ModelSymbol::PLACEMENT_INTERVAL;
else if ( match(c.value(), "random") )
style.getOrCreate<IconSymbol>()->placement() = ModelSymbol::PLACEMENT_RANDOM;
else if ( match(c.value(), "centroid") )
style.getOrCreate<IconSymbol>()->placement() = ModelSymbol::PLACEMENT_CENTROID;
}
else if ( match(c.key(), "icon-density") ) {
style.getOrCreate<IconSymbol>()->density() = as<float>(c.value(), *defaults.density() );
}
else if ( match(c.key(), "icon-random-seed") ) {
style.getOrCreate<IconSymbol>()->randomSeed() = as<unsigned>(c.value(), *defaults.randomSeed());
}
else if ( match(c.key(), "icon-scale") ) {
style.getOrCreate<IconSymbol>()->scale() = NumericExpression(c.value());
}
else if ( match(c.key(), "icon-align") ) {
if ( match(c.value(), "left-top") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_LEFT_TOP;
else if ( match(c.value(), "left-center") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_LEFT_CENTER;
else if ( match(c.value(), "left-bottom") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_LEFT_BOTTOM;
else if ( match(c.value(), "center-top") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_CENTER_TOP;
else if ( match(c.value(), "center-center") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_CENTER_CENTER;
else if ( match(c.value(), "center-bottom") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_CENTER_BOTTOM;
else if ( match(c.value(), "right-top") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_RIGHT_TOP;
else if ( match(c.value(), "right-center") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_RIGHT_CENTER;
else if ( match(c.value(), "right-bottom") )
style.getOrCreate<IconSymbol>()->alignment() = IconSymbol::ALIGN_RIGHT_BOTTOM;
}
else if ( match(c.key(), "icon-heading") ) {
style.getOrCreate<IconSymbol>()->heading() = NumericExpression(c.value());
}
else if ( match(c.key(), "icon-declutter") ) {
style.getOrCreate<IconSymbol>()->declutter() = as<bool>(c.value(), *defaults.declutter());
}
else if ( match(c.key(), "icon-occlusion-cull") ) {
style.getOrCreate<IconSymbol>()->occlusionCull() = as<bool>(c.value(), *defaults.occlusionCull());
}
else if ( match(c.key(), "icon-occlusion-cull-altitude") ) {
style.getOrCreate<IconSymbol>()->occlusionCullAltitude() = as<float>(c.value(), *defaults.occlusionCullAltitude());
}
else if ( match(c.key(), "icon-script") ) {
style.getOrCreate<IconSymbol>()->script() = StringExpression(c.value());
}
}
示例3: VBox
//.........这里部分代码省略.........
if ( !parent ) parent = root;
parent->addChild( ocean );
Control* c = OceanControlFactory().create(ocean);
if ( c )
mainContainer->addControl(c);
}
}
// Shadowing.
if ( useShadows )
{
ShadowCaster* caster = new ShadowCaster();
caster->setLight( view->getLight() );
caster->getShadowCastingGroup()->addChild( mapNode->getModelLayerGroup() );
if ( mapNode->getNumParents() > 0 )
{
insertGroup(caster, mapNode->getParent(0));
}
else
{
caster->addChild(mapNode);
root = caster;
}
}
// Loading KML from the command line:
if ( !kmlFile.empty() )
{
KMLOptions kml_options;
kml_options.declutter() = true;
// set up a default icon for point placemarks:
IconSymbol* defaultIcon = new IconSymbol();
defaultIcon->url()->setLiteral(KML_PUSHPIN_URL);
kml_options.defaultIconSymbol() = defaultIcon;
osg::Node* kml = KML::load( URI(kmlFile), mapNode, kml_options );
if ( kml )
{
if (kmlUI)
{
Control* c = AnnotationGraphControlFactory().create(kml, view);
if ( c )
{
c->setVertAlign( Control::ALIGN_TOP );
canvas->addControl( c );
}
}
root->addChild( kml );
}
else
{
OE_NOTICE << "Failed to load " << kmlFile << std::endl;
}
}
// Annotations in the map node externals:
if ( !annoConf.empty() )
{
osg::Group* annotations = 0L;
AnnotationRegistry::instance()->create( mapNode, annoConf, dbOptions.get(), annotations );
if ( annotations )
{
root->addChild( annotations );
}
示例4: createNode
/**
* Creates a complete set of positioned label nodes from a feature list.
*/
osg::Node* createNode(
const FeatureList& input,
const Style& style,
FilterContext& context )
{
if ( style.get<TextSymbol>() == 0L && style.get<IconSymbol>() == 0L )
return 0L;
// copy the style so we can (potentially) modify the text symbol.
Style styleCopy = style;
TextSymbol* text = styleCopy.get<TextSymbol>();
IconSymbol* icon = styleCopy.get<IconSymbol>();
osg::Group* group = new osg::Group();
StringExpression textContentExpr ( text ? *text->content() : StringExpression() );
NumericExpression textPriorityExpr( text ? *text->priority() : NumericExpression() );
NumericExpression textSizeExpr ( text ? *text->size() : NumericExpression() );
StringExpression iconUrlExpr ( icon ? *icon->url() : StringExpression() );
NumericExpression iconScaleExpr ( icon ? *icon->scale() : NumericExpression() );
NumericExpression iconHeadingExpr ( icon ? *icon->heading() : NumericExpression() );
for( FeatureList::const_iterator i = input.begin(); i != input.end(); ++i )
{
Feature* feature = i->get();
if ( !feature )
continue;
// run a symbol script if present.
if ( text && text->script().isSet() )
{
StringExpression temp( text->script().get() );
feature->eval( temp, &context );
}
// run a symbol script if present.
if ( icon && icon->script().isSet() )
{
StringExpression temp( icon->script().get() );
feature->eval( temp, &context );
}
const Geometry* geom = feature->getGeometry();
if ( !geom )
continue;
Style tempStyle = styleCopy;
// evaluate expressions into literals.
// TODO: Later we could replace this with a generate "expression evaluator" type
// that we could pass to PlaceNode in the DB options. -gw
if ( text )
{
if ( text->content().isSet() )
tempStyle.get<TextSymbol>()->content()->setLiteral( feature->eval( textContentExpr, &context ) );
if ( text->size().isSet() )
tempStyle.get<TextSymbol>()->size()->setLiteral( feature->eval(textSizeExpr, &context) );
}
if ( icon )
{
if ( icon->url().isSet() )
tempStyle.get<IconSymbol>()->url()->setLiteral( feature->eval(iconUrlExpr, &context) );
if ( icon->scale().isSet() )
tempStyle.get<IconSymbol>()->scale()->setLiteral( feature->eval(iconScaleExpr, &context) );
if ( icon->heading().isSet() )
tempStyle.get<IconSymbol>()->heading()->setLiteral( feature->eval(iconHeadingExpr, &context) );
}
osg::Node* node = makePlaceNode(
context,
feature,
tempStyle,
textPriorityExpr);
if ( node )
{
if ( context.featureIndex() )
{
context.featureIndex()->tagNode(node, feature);
}
group->addChild( node );
}
}
// Note to self: need to change this to support picking later. -gw
//VirtualProgram* vp = VirtualProgram::getOrCreate(group->getOrCreateStateSet());
//vp->setInheritShaders( false );
return group;
}
示例5: VBox
//.........这里部分代码省略.........
if ( useSky || !skyConf.empty() )
{
double hours = skyConf.value( "hours", 12.0 );
SkyNode* sky = new SkyNode( mapNode->getMap() );
sky->setAmbientBrightness( ambientBrightness );
sky->setDateTime( DateTime(2011, 3, 6, hours) );
sky->attach( view );
root->addChild( sky );
Control* c = SkyControlFactory().create(sky, view);
if ( c )
mainContainer->addControl( c );
}
// Adding an ocean model:
if ( useOcean || !oceanConf.empty() )
{
OceanSurfaceNode* ocean = new OceanSurfaceNode( mapNode, oceanConf );
if ( ocean )
{
root->addChild( ocean );
Control* c = OceanControlFactory().create(ocean, view);
if ( c )
mainContainer->addControl(c);
}
}
// Loading KML from the command line:
if ( !kmlFile.empty() )
{
KMLOptions kml_options;
kml_options.declutter() = true;
// set up a default icon for point placemarks:
IconSymbol* defaultIcon = new IconSymbol();
defaultIcon->url()->setLiteral(KML_PUSHPIN_URL);
kml_options.defaultIconSymbol() = defaultIcon;
osg::Node* kml = KML::load( URI(kmlFile), mapNode, kml_options );
if ( kml )
{
Control* c = AnnotationGraphControlFactory().create(kml, view);
if ( c )
{
c->setVertAlign( Control::ALIGN_TOP );
canvas->addControl( c );
}
root->addChild( kml );
}
}
// Annotations in the map node externals:
if ( !annoConf.empty() )
{
osg::Group* annotations = 0L;
AnnotationRegistry::instance()->create( mapNode, annoConf, dbOptions.get(), annotations );
if ( annotations )
{
root->addChild( annotations );
}
}
// Configure the de-cluttering engine for labels and annotations:
if ( !declutterConf.empty() )
{
Decluttering::setOptions( DeclutteringOptions(declutterConf) );
}
示例6: VBox
//.........这里部分代码省略.........
// TODO: Most of these are likely to move into extensions.
const Config& lodBlendingConf = externals.child("lod_blending");
const Config& vertScaleConf = externals.child("vertical_scale");
// Shadowing.
if (args.read("--shadows"))
{
int unit;
if ( mapNode->getTerrainEngine()->getResources()->reserveTextureImageUnit(unit, "ShadowCaster") )
{
ShadowCaster* caster = new ShadowCaster();
caster->setTextureImageUnit( unit );
caster->setLight( view->getLight() );
caster->getShadowCastingGroup()->addChild( mapNode );
if ( mapNode->getNumParents() > 0 )
{
insertGroup(caster, mapNode->getParent(0));
}
else
{
caster->addChild(mapNode);
root = caster;
}
}
}
// Loading KML from the command line:
if ( !kmlFile.empty() )
{
KMLOptions kml_options;
kml_options.declutter() = true;
// set up a default icon for point placemarks:
IconSymbol* defaultIcon = new IconSymbol();
defaultIcon->url()->setLiteral(KML_PUSHPIN_URL);
kml_options.defaultIconSymbol() = defaultIcon;
TextSymbol* defaultText = new TextSymbol();
defaultText->halo() = Stroke(0.3,0.3,0.3,1.0);
kml_options.defaultTextSymbol() = defaultText;
osg::Node* kml = KML::load( URI(kmlFile), mapNode, kml_options );
if ( kml )
{
if (kmlUI)
{
Control* c = AnnotationGraphControlFactory().create(kml, view);
if ( c )
{
c->setVertAlign( Control::ALIGN_TOP );
canvas->addControl( c );
}
}
root->addChild( kml );
}
else
{
OE_NOTICE << "Failed to load " << kmlFile << std::endl;
}
}
//// Configure the de-cluttering engine for labels and annotations:
//if ( !screenSpaceLayoutConf.empty() )
//{
// ScreenSpaceLayout::setOptions( ScreenSpaceLayoutOptions(screenSpaceLayoutConf) );
//}
示例7: VBox
//.........这里部分代码省略.........
if ( useSky || !skyConf.empty() )
{
double hours = skyConf.value( "hours", 12.0 );
SkyNode* sky = new SkyNode( mapNode->getMap() );
sky->setAmbientBrightness( ambientBrightness );
sky->setDateTime( 2011, 3, 6, hours );
sky->attach( view );
root->addChild( sky );
Control* c = SkyControlFactory().create(sky, view);
if ( c )
mainContainer->addControl( c );
}
// Adding an ocean model:
if ( useOcean || !oceanConf.empty() )
{
OceanSurfaceNode* ocean = new OceanSurfaceNode( mapNode, oceanConf );
if ( ocean )
{
root->addChild( ocean );
Control* c = OceanControlFactory().create(ocean, view);
if ( c )
mainContainer->addControl(c);
}
}
// Loading KML from the command line:
if ( !kmlFile.empty() )
{
KMLOptions kml_options;
kml_options.declutter() = true;
// set up a default icon for point placemarks:
IconSymbol* defaultIcon = new IconSymbol();
defaultIcon->url()->setLiteral(KML_PUSHPIN_URL);
kml_options.defaultIconSymbol() = defaultIcon;
osg::Node* kml = KML::load( URI(kmlFile), mapNode, kml_options );
if ( kml )
{
Control* c = AnnotationGraphControlFactory().create(kml, view);
if ( c )
{
c->setVertAlign( Control::ALIGN_TOP );
canvas->addControl( c );
}
root->addChild( kml );
}
}
// Annotations in the map node externals:
if ( !annoConf.empty() )
{
osg::Group* annotations = 0L;
AnnotationRegistry::instance()->create( mapNode, annoConf, dbOptions.get(), annotations );
if ( annotations )
{
root->addChild( annotations );
}
}
// Configure the de-cluttering engine for labels and annotations:
if ( !declutterConf.empty() )
{
Decluttering::setOptions( DeclutteringOptions(declutterConf) );
}
示例8: gen
void
TrackNode::init( const TrackNodeFieldSchema& schema )
{
_geode = new osg::Geode();
IconSymbol* icon = _style.get<IconSymbol>();
osg::Image* image = icon ? icon->getImage() : 0L;
if ( icon && image )
{
// apply the image icon.
osg::Geometry* imageGeom = AnnotationUtils::createImageGeometry(
image, // image
osg::Vec2s(0,0), // offset
0, // tex image unit
icon->heading()->eval() );
if ( imageGeom )
{
_geode->addDrawable( imageGeom );
}
}
if ( !schema.empty() )
{
// turn the schema defs into text drawables and record a map so we can
// set the field text later.
for( TrackNodeFieldSchema::const_iterator i = schema.begin(); i != schema.end(); ++i )
{
const TrackNodeField& field = i->second;
if ( field._symbol.valid() )
{
osg::Drawable* drawable = AnnotationUtils::createTextDrawable(
field._symbol->content()->expr(), // text
field._symbol.get(), // symbol
osg::Vec3(0,0,0) ); // offset
if ( drawable )
{
// if the user intends to change the label later, make it dynamic
// since osgText updates are not thread-safe
if ( field._dynamic )
drawable->setDataVariance( osg::Object::DYNAMIC );
else
drawable->setDataVariance( osg::Object::STATIC );
addDrawable( i->first, drawable );
}
}
}
}
// ensure depth testing always passes, and disable depth buffer writes.
osg::StateSet* stateSet = _geode->getOrCreateStateSet();
stateSet->setAttributeAndModes( new osg::Depth(osg::Depth::ALWAYS, 0, 1, false), 1 );
applyStyle( _style );
setLightingIfNotSet( false );
getAttachPoint()->addChild( _geode );
ShaderGenerator gen( Registry::stateSetCache() );
this->accept( gen );
}
示例9: getPositionAttitudeTransform
void
TrackNode::init( const TrackNodeFieldSchema& schema )
{
osg::StateSet* ss = this->getOrCreateStateSet();
ScreenSpaceLayout::activate(ss);
// Disable lighting for place nodes by default
ss->setDefine(OE_LIGHTING_DEFINE, osg::StateAttribute::OFF);
osgEarth::clearChildren( getPositionAttitudeTransform() );
_geode = new osg::Geode();
IconSymbol* icon = _style.get<IconSymbol>();
osg::Image* image = icon ? icon->getImage() : 0L;
if ( icon && image )
{
// apply the image icon.
osg::Geometry* imageGeom = AnnotationUtils::createImageGeometry(
image, // image
osg::Vec2s(0,0), // offset
0, // tex image unit
icon->heading()->eval(),
icon->scale()->eval() );
if ( imageGeom )
{
_geode->addDrawable( imageGeom );
ScreenSpaceLayoutData* layout = new ScreenSpaceLayoutData();
layout->setPriority(getPriority());
imageGeom->setUserData(layout);
}
}
if ( !schema.empty() )
{
// turn the schema defs into text drawables and record a map so we can
// set the field text later.
for( TrackNodeFieldSchema::const_iterator i = schema.begin(); i != schema.end(); ++i )
{
const TrackNodeField& field = i->second;
if ( field._symbol.valid() )
{
osg::Vec3 offset(
field._symbol->pixelOffset()->x(),
field._symbol->pixelOffset()->y(),
0.0);
osg::Drawable* drawable = AnnotationUtils::createTextDrawable(
field._symbol->content()->expr(), // text
field._symbol.get(), // symbol
offset ); // offset
if ( drawable )
{
// if the user intends to change the label later, make it dynamic
// since osgText updates are not thread-safe
if ( field._dynamic )
drawable->setDataVariance( osg::Object::DYNAMIC );
else
drawable->setDataVariance( osg::Object::STATIC );
addDrawable( i->first, drawable );
}
}
}
}
// ensure depth testing always passes, and disable depth buffer writes.
osg::StateSet* stateSet = _geode->getOrCreateStateSet();
stateSet->setAttributeAndModes( new osg::Depth(osg::Depth::ALWAYS, 0, 1, false), 1 );
applyStyle( _style );
setLightingIfNotSet( false );
getPositionAttitudeTransform()->addChild( _geode );
// generate shaders:
Registry::shaderGenerator().run(
this,
"osgEarth.TrackNode",
Registry::stateSetCache() );
}