本文整理汇总了C++中TextSymbol::content方法的典型用法代码示例。如果您正苦于以下问题:C++ TextSymbol::content方法的具体用法?C++ TextSymbol::content怎么用?C++ TextSymbol::content使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TextSymbol
的用法示例。
在下文中一共展示了TextSymbol::content方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: giter
//.........这里部分代码省略.........
ModelNode* node = new ModelNode( cx._mapNode, style, cx._dbOptions );
node->setPosition( position );
// model scale:
if ( cx._options->modelScale() != 1.0f )
{
float s = *cx._options->modelScale();
node->setScale( osg::Vec3f(s,s,s) );
}
// model local tangent plane rotation:
if ( !cx._options->modelRotation()->zeroRotation() )
{
node->setLocalRotation( *cx._options->modelRotation() );
}
modelNode = node;
}
// is there a label?
else if ( !name.empty() )
{
if ( !text && cx._options->defaultTextSymbol().valid() )
{
text = cx._options->defaultTextSymbol().get();
style.addSymbol( text );
}
else
{
text = style.getOrCreate<TextSymbol>();
text->encoding() = TextSymbol::ENCODING_UTF8;
}
text->content()->setLiteral( name );
}
// is there an icon?
if ( icon )
{
iconNode = new PlaceNode( cx._mapNode, position, style, cx._dbOptions );
}
else if ( !model && text && !name.empty() )
{
// note: models do not get labels.
iconNode = new LabelNode( cx._mapNode, position, style );
}
}
// multiple coords? feature:
if ( geom->getTotalPointCount() > 1 )
{
ExtrusionSymbol* extruded = style.get<ExtrusionSymbol>();
// Remove symbols that we have already processed so the geometry
// compiler doesn't get confused.
if ( model )
style.removeSymbol( model );
if ( icon )
style.removeSymbol( icon );
if ( text )
style.removeSymbol( text );
Feature* feature = new Feature(geom, cx._srs.get(), style);
featureNode = new FeatureNode( cx._mapNode, feature );
}
示例2: 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;
}
示例3: if
//.........这里部分代码省略.........
// text->attribute() = p->second;
//}
else if (p->first == CSS_TEXT_ROTATE_TO_SCREEN)
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
if (p->second == "true") text->rotateToScreen() = true;
else if (p->second == "false") text->rotateToScreen() = false;
}
else if (p->first == CSS_TEXT_SIZE_MODE)
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
if (p->second == "screen") text->sizeMode() = TextSymbol::SIZEMODE_SCREEN;
else if (p->second == "object") text->sizeMode() = TextSymbol::SIZEMODE_OBJECT;
}
else if (p->first == CSS_TEXT_REMOVE_DUPLICATE_LABELS)
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
if (p->second == "true") text->removeDuplicateLabels() = true;
else if (p->second == "false") text->removeDuplicateLabels() = false;
}
else if (p->first == CSS_TEXT_LINE_ORIENTATION)
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
if (p->second == "parallel") text->lineOrientation() = TextSymbol::LINEORIENTATION_PARALLEL;
else if (p->second == "horizontal") text->lineOrientation() = TextSymbol::LINEORIENTATION_HORIZONTAL;
else if (p->second == "perpendicular") text->lineOrientation() = TextSymbol::LINEORIENTATION_PERPENDICULAR;
}
else if (p->first == CSS_TEXT_LINE_PLACEMENT)
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
if (p->second == "centroid") text->linePlacement() = TextSymbol::LINEPLACEMENT_CENTROID;
else if (p->second == "along-line") text->linePlacement() = TextSymbol::LINEPLACEMENT_ALONG_LINE;
}
else if (p->first == "text-content")
{
if (!text) text = sc.getOrCreate<TextSymbol>();
text->content() = StringExpression( p->second );
}
else if (p->first == "text-priority")
{
if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
text->priority() = NumericExpression( p->second );
}
else if (p->first == "text-provider")
{
if (!text) text = sc.getOrCreate<TextSymbol>();
text->provider() = p->second;
}
//else if (p->first == CSS_TEXT_CONTENT)
//{
// if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
// text->content() = p->second;
//}
//else if (p->first == CSS_TEXT_CONTENT_ATTRIBUTE_DELIMITER)
//{
// if (!text) text = sc.getOrCreateSymbol<TextSymbol>();
// text->contentAttributeDelimiter() = p->second;
//}
else if (p->first == "marker")
{
if (!marker) marker = sc.getOrCreateSymbol<MarkerSymbol>();
marker->url() = p->second;
}
else if (p->first == "marker-placement")
示例4: giter
//.........这里部分代码省略.........
// one coordinate? It's a place marker or a label.
if ( (model || icon || text) && geom->getTotalPointCount() == 1 )
{
// if there's a model, render that - models do NOT get labels.
if ( model )
{
ModelNode* node = new ModelNode( cx._mapNode, style, cx._dbOptions.get() );
node->setPosition( position );
// model scale:
if ( cx._options->modelScale() != 1.0f )
{
float s = *cx._options->modelScale();
node->getPositionAttitudeTransform()->setScale(osg::Vec3d(s,s,s));
}
// model local tangent plane rotation:
if ( !cx._options->modelRotation()->zeroRotation() )
{
node->getPositionAttitudeTransform()->setAttitude( *cx._options->modelRotation() );
}
modelNode = node;
}
// is there a label?
else if ( !name.empty() )
{
if ( !text )
{
text = style.getOrCreate<TextSymbol>();
text->encoding() = TextSymbol::ENCODING_UTF8;
}
text->content()->setLiteral( name );
}
// is there an icon?
if ( icon )
{
PlaceNode* placeNode = new PlaceNode( position );
placeNode->setStyle(style, cx._dbOptions.get());
iconNode = placeNode;
}
else if ( !model && text && !name.empty() )
{
// note: models do not get labels.
iconNode = new LabelNode();
iconNode->setStyle(style);
}
}
// multiple coords? feature:
if ( geom->getTotalPointCount() > 1 )
{
// Remove symbols that we have already processed so the geometry
// compiler doesn't get confused.
if ( model )
style.removeSymbol( model );
if ( icon )
style.removeSymbol( icon );
if ( text )
style.removeSymbol( text );
Feature* feature = new Feature(geom, cx._srs.get(), style);
featureNode = new FeatureNode(feature );
示例5: main
//.........这里部分代码省略.........
featureOptions.url() = "../data/world.shp";
}
else
{
// the --mem options tells us to just make an in-memory geometry:
Ring* line = new Ring();
line->push_back( osg::Vec3d(-60, 20, 0) );
line->push_back( osg::Vec3d(-120, 20, 0) );
line->push_back( osg::Vec3d(-120, 60, 0) );
line->push_back( osg::Vec3d(-60, 60, 0) );
featureOptions.geometry() = line;
}
// Define a style for the feature data. Since we are going to render the
// vectors as lines, configure the line symbolizer:
Style style;
LineSymbol* ls = style.getOrCreateSymbol<LineSymbol>();
ls->stroke()->color() = Color::Yellow;
ls->stroke()->width() = 2.0f;
// That's it, the map is ready; now create a MapNode to render the Map:
MapNodeOptions mapNodeOptions;
mapNodeOptions.enableLighting() = false;
MapNode* mapNode = new MapNode( map, mapNodeOptions );
osg::Group* root = new osg::Group();
root->addChild( mapNode );
viewer.setSceneData( root );
viewer.setCameraManipulator( new EarthManipulator() );
// Process cmdline args
MapNodeHelper().parse(mapNode, arguments, &viewer, root, new LabelControl("Features Demo"));
if (useStencil)
{
FeatureStencilModelOptions stencilOptions;
stencilOptions.featureOptions() = featureOptions;
stencilOptions.styles() = new StyleSheet();
stencilOptions.styles()->addStyle( style );
stencilOptions.enableLighting() = false;
stencilOptions.depthTestEnabled() = false;
ls->stroke()->width() = 0.1f;
map->addModelLayer( new ModelLayer("my features", stencilOptions) );
}
else if (useRaster)
{
AGGLiteOptions rasterOptions;
rasterOptions.featureOptions() = featureOptions;
rasterOptions.styles() = new StyleSheet();
rasterOptions.styles()->addStyle( style );
map->addImageLayer( new ImageLayer("my features", rasterOptions) );
}
else //if (useGeom || useOverlay)
{
FeatureGeomModelOptions geomOptions;
geomOptions.featureOptions() = featureOptions;
geomOptions.styles() = new StyleSheet();
geomOptions.styles()->addStyle( style );
geomOptions.enableLighting() = false;
ModelLayerOptions layerOptions( "my features", geomOptions );
map->addModelLayer( new ModelLayer(layerOptions) );
}
if ( useLabels )
{
// set up symbology for drawing labels. We're pulling the label
// text from the name attribute, and its draw priority from the
// population attribute.
Style labelStyle;
TextSymbol* text = labelStyle.getOrCreateSymbol<TextSymbol>();
text->content() = StringExpression( "[cntry_name]" );
text->priority() = NumericExpression( "[pop_cntry]" );
text->removeDuplicateLabels() = true;
text->size() = 16.0f;
text->alignment() = TextSymbol::ALIGN_CENTER_CENTER;
text->fill()->color() = Color::White;
text->halo()->color() = Color::DarkGray;
// and configure a model layer:
FeatureGeomModelOptions geomOptions;
geomOptions.featureOptions() = featureOptions;
geomOptions.styles() = new StyleSheet();
geomOptions.styles()->addStyle( labelStyle );
map->addModelLayer( new ModelLayer("labels", geomOptions) );
}
if ( !useStencil )
viewer.getCamera()->addCullCallback( new osgEarth::Util::AutoClipPlaneCullCallback(mapNode) );
// add some stock OSG handlers:
viewer.addEventHandler(new osgViewer::StatsHandler());
viewer.addEventHandler(new osgViewer::WindowSizeHandler());
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
return viewer.run();
}
示例6: main
//
// NOTE: run this sample from the repo/tests directory.
//
int main(int argc, char** argv)
{
osg::ArgumentParser arguments(&argc,argv);
bool useRaster = arguments.read("--rasterize");
bool useOverlay = arguments.read("--overlay");
bool useStencil = arguments.read("--stencil");
bool useMem = arguments.read("--mem");
bool useLabels = arguments.read("--labels");
osgViewer::Viewer viewer(arguments);
// Start by creating the map:
Map* map = new Map();
// Start with a basemap imagery layer; we'll be using the GDAL driver
// to load a local GeoTIFF file:
GDALOptions basemapOpt;
basemapOpt.url() = "../data/world.tif";
map->addImageLayer( new ImageLayer( ImageLayerOptions("basemap", basemapOpt) ) );
// Next we add a feature layer. First configure a feature driver to
// load the vectors from a shapefile:
OGRFeatureOptions featureOpt;
if ( !useMem )
{
featureOpt.url() = "../data/usa.shp";
}
else
{
Ring* line = new Ring();
line->push_back( osg::Vec3d(-60, 20, 0) );
line->push_back( osg::Vec3d(-120, 20, 0) );
line->push_back( osg::Vec3d(-120, 60, 0) );
line->push_back( osg::Vec3d(-60, 60, 0) );
featureOpt.geometry() = line;
}
// Define a style for the feature data. Since we are going to render the
// vectors as lines, configure the line symbolizer:
Style style;
LineSymbol* ls = style.getOrCreateSymbol<LineSymbol>();
ls->stroke()->color() = osg::Vec4f( 1,1,0,1 ); // yellow
ls->stroke()->width() = 2.0f;
// Add some text labels.
if ( useLabels )
{
TextSymbol* text = style.getOrCreateSymbol<TextSymbol>();
text->provider() = "overlay";
text->content() = StringExpression( "[name]" );
text->priority() = NumericExpression( "[area]" );
text->removeDuplicateLabels() = true;
text->size() = 16.0f;
text->fill()->color() = Color::White;
text->halo()->color() = Color::DarkGray;
}
// That's it, the map is ready; now create a MapNode to render the Map:
MapNodeOptions mapNodeOptions;
mapNodeOptions.enableLighting() = false;
MapNode* mapNode = new MapNode( map, mapNodeOptions );
// Now we'll choose the AGG-Lite driver to render the features. By the way, the
// feature data is actually polygons, so we override that to treat it as lines.
// We apply the feature driver and set the style as well.
if (useStencil)
{
FeatureStencilModelOptions worldOpt;
worldOpt.featureOptions() = featureOpt;
worldOpt.geometryTypeOverride() = Geometry::TYPE_LINESTRING;
worldOpt.styles() = new StyleSheet();
worldOpt.styles()->addStyle( style );
worldOpt.enableLighting() = false;
worldOpt.depthTestEnabled() = false;
map->addModelLayer( new ModelLayer( "my features", worldOpt ) );
}
else if (useRaster)
{
AGGLiteOptions worldOpt;
worldOpt.featureOptions() = featureOpt;
worldOpt.geometryTypeOverride() = Geometry::TYPE_LINESTRING;
worldOpt.styles() = new StyleSheet();
worldOpt.styles()->addStyle( style );
map->addImageLayer( new ImageLayer( ImageLayerOptions("world", worldOpt) ) );
}
else //if (useGeom || useOverlay)
{
FeatureGeomModelOptions worldOpt;
worldOpt.featureOptions() = featureOpt;
worldOpt.geometryTypeOverride() = Geometry::TYPE_LINESTRING;
worldOpt.styles() = new StyleSheet();
worldOpt.styles()->addStyle( style );
worldOpt.enableLighting() = false;
worldOpt.depthTestEnabled() = false;
//.........这里部分代码省略.........
示例7: if
void
KML_Placemark::build( const Config& conf, KMLContext& cx )
{
Style masterStyle;
if ( conf.hasValue("styleurl") )
{
// process a "stylesheet" style
const Style* ref_style = cx._sheet->getStyle( conf.value("styleurl"), false );
if ( ref_style )
masterStyle = *ref_style;
}
else if ( conf.hasChild("style") )
{
// process an "inline" style
KML_Style kmlStyle;
kmlStyle.scan( conf.child("style"), cx );
masterStyle = cx._activeStyle;
}
// parse the geometry. the placemark must have geometry to be valid. The
// geometry parse may optionally specify an altitude mode as well.
KML_Geometry geometry;
geometry.build(conf, cx, masterStyle);
Geometry* allGeom = geometry._geom.get();
if ( allGeom )
{
GeometryIterator giter( allGeom, false );
while( giter.hasMore() )
{
Geometry* geom = giter.next();
Style style = masterStyle;
// KML's default altitude mode is clampToGround.
AltitudeMode altMode = ALTMODE_RELATIVE;
AltitudeSymbol* altSym = style.get<AltitudeSymbol>();
if ( !altSym )
{
altSym = style.getOrCreate<AltitudeSymbol>();
altSym->clamping() = AltitudeSymbol::CLAMP_RELATIVE_TO_TERRAIN;
altSym->technique() = AltitudeSymbol::TECHNIQUE_SCENE;
}
else if ( !altSym->clamping().isSetTo(AltitudeSymbol::CLAMP_RELATIVE_TO_TERRAIN) )
{
altMode = ALTMODE_ABSOLUTE;
}
if ( geom && geom->getTotalPointCount() > 0 )
{
GeoPoint position(cx._srs.get(), geom->getBounds().center(), altMode);
bool isPoly = geom->getComponentType() == Geometry::TYPE_POLYGON;
bool isPoint = geom->getComponentType() == Geometry::TYPE_POINTSET;
// check for symbols.
ModelSymbol* model = style.get<ModelSymbol>();
IconSymbol* icon = style.get<IconSymbol>();
TextSymbol* text = style.get<TextSymbol>();
if ( !text && cx._options->defaultTextSymbol().valid() )
text = cx._options->defaultTextSymbol().get();
// the annotation name:
std::string name = conf.hasValue("name") ? conf.value("name") : "";
if ( text && !name.empty() )
{
text->content()->setLiteral( name );
}
AnnotationNode* featureNode = 0L;
AnnotationNode* iconNode = 0L;
AnnotationNode* modelNode = 0L;
// one coordinate? It's a place marker or a label.
if ( model || icon || text || geom->getTotalPointCount() == 1 )
{
// load up the default icon if there we don't have one.
if ( !model && !icon )
{
icon = cx._options->defaultIconSymbol().get();
if ( icon )
style.add( icon );
}
// if there's a model, render that - models do NOT get labels.
if ( model )
{
ModelNode* node = new ModelNode( cx._mapNode, style, cx._dbOptions );
node->setPosition( position );
if ( cx._options->modelScale() != 1.0f )
{
float s = *cx._options->modelScale();
node->setScale( osg::Vec3f(s,s,s) );
}
if ( !cx._options->modelRotation()->zeroRotation() )
{
//.........这里部分代码省略.........