本文整理汇总了C++中FilterContext::featureIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ FilterContext::featureIndex方法的具体用法?C++ FilterContext::featureIndex怎么用?C++ FilterContext::featureIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FilterContext
的用法示例。
在下文中一共展示了FilterContext::featureIndex方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: wallSkinPRNG
//.........这里部分代码省略.........
context);
// Create the walls.
if ( walls.valid() )
{
osg::Vec4f wallColor(1,1,1,1), wallBaseColor(1,1,1,1);
if ( _wallPolygonSymbol.valid() )
{
wallColor = _wallPolygonSymbol->fill()->color();
}
if ( _extrusionSymbol->wallGradientPercentage().isSet() )
{
wallBaseColor = Color(wallColor).brightness( 1.0 - *_extrusionSymbol->wallGradientPercentage() );
}
else
{
wallBaseColor = wallColor;
}
buildWallGeometry(structure, walls.get(), wallColor, wallBaseColor, wallSkin);
if ( wallSkin )
{
// Get a stateset for the individual wall stateset
context.resourceCache()->getOrCreateStateSet( wallSkin, wallStateSet );
}
}
// tessellate and add the roofs if necessary:
if ( rooflines.valid() )
{
osg::Vec4f roofColor(1,1,1,1);
if ( _roofPolygonSymbol.valid() )
{
roofColor = _roofPolygonSymbol->fill()->color();
}
buildRoofGeometry(structure, rooflines.get(), roofColor, roofSkin);
if ( roofSkin )
{
// Get a stateset for the individual roof skin
context.resourceCache()->getOrCreateStateSet( roofSkin, roofStateSet );
}
}
if ( outlines.valid() )
{
osg::Vec4f outlineColor(1,1,1,1);
if ( _outlineSymbol.valid() )
{
outlineColor = _outlineSymbol->stroke()->color();
}
float minCreaseAngle = _outlineSymbol->creaseAngle().value();
buildOutlineGeometry(structure, outlines.get(), outlineColor, minCreaseAngle);
}
if ( baselines.valid() )
{
//TODO.
osgUtil::Tessellator tess;
tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_ODD );
tess.retessellatePolygons( *(baselines.get()) );
}
// Set up for feature naming and feature indexing:
std::string name;
if ( !_featureNameExpr.empty() )
name = input->eval( _featureNameExpr, &context );
FeatureSourceIndex* index = context.featureIndex();
if ( walls.valid() )
{
addDrawable( walls.get(), wallStateSet.get(), name, input, index );
}
if ( rooflines.valid() )
{
addDrawable( rooflines.get(), roofStateSet.get(), name, input, index );
}
if ( baselines.valid() )
{
addDrawable( baselines.get(), 0L, name, input, index );
}
if ( outlines.valid() )
{
addDrawable( outlines.get(), 0L, name, input, index );
}
}
}
return true;
}
示例2: parts
//.........这里部分代码省略.........
double threshold = osg::DegreesToRadians( *_maxAngle_deg );
OE_DEBUG << "Running mesh subdivider with threshold " << *_maxAngle_deg << std::endl;
MeshSubdivider ms( _world2local, _local2world );
//ms.setMaxElementsPerEBO( INT_MAX );
if ( input->geoInterp().isSet() )
ms.run( *osgGeom, threshold, *input->geoInterp() );
else
ms.run( *osgGeom, threshold, *_geoInterp );
}
}
// assign the primary color:
#if USE_SINGLE_COLOR
osg::Vec4Array* colors = new osg::Vec4Array( 1 );
(*colors)[0] = primaryColor;
osgGeom->setColorBinding( osg::Geometry::BIND_OVERALL );
#else
osg::Vec4Array* colors = new osg::Vec4Array( osgGeom->getVertexArray()->getNumElements() ); //allPoints->size() );
for(unsigned c=0; c<colors->size(); ++c)
(*colors)[c] = primaryColor;
osgGeom->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
#endif
osgGeom->setColorArray( colors );
_geode->addDrawable( osgGeom );
// record the geometry's primitive set(s) in the index:
if ( context.featureIndex() )
context.featureIndex()->tagPrimitiveSets( osgGeom, input );
// build secondary geometry, if necessary (polygon outlines)
if ( renderType == Geometry::TYPE_POLYGON && lineSymbol )
{
// polygon offset on the poly so the outline doesn't z-fight
osgGeom->getOrCreateStateSet()->setAttributeAndModes( new osg::PolygonOffset(1,1), 1 );
osg::Geometry* outline = new osg::Geometry();
outline->setUseVertexBufferObjects( _useVertexBufferObjects.value() );
buildPolygon(part, featureSRS, mapSRS, makeECEF, false, outline);
if ( outline->getVertexArray()->getVertexBufferObject() )
outline->getVertexArray()->getVertexBufferObject()->setUsage(GL_STATIC_DRAW_ARB);
osg::Vec4f outlineColor = lineSymbol->stroke()->color();
osg::Vec4Array* outlineColors = new osg::Vec4Array();
#if USE_SINGLE_COLOR
outlineColors->reserve(1);
outlineColors->push_back( outlineColor );
outline->setColorBinding( osg::Geometry::BIND_OVERALL );
#else
unsigned pcount = part->getTotalPointCount();
outlineColors->reserve( pcount );
for( unsigned c=0; c < pcount; ++c )
outlineColors->push_back( outlineColor );
outline->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
#endif
outline->setColorArray(outlineColors);
示例3: instanceURI
//.........这里部分代码省略.........
// if icon decluttering is off, install an AutoTransform.
if ( iconSymbol )
{
if ( iconSymbol->declutter() == true )
{
Decluttering::setEnabled( model->getOrCreateStateSet(), true );
}
else if ( dynamic_cast<osg::AutoTransform*>(model.get()) == 0L )
{
osg::AutoTransform* at = new osg::AutoTransform();
at->setAutoRotateMode( osg::AutoTransform::ROTATE_TO_SCREEN );
at->setAutoScaleToScreen( true );
at->addChild( model );
model = at;
}
}
}
if ( model.valid() )
{
GeometryIterator gi( input->getGeometry(), false );
while( gi.hasMore() )
{
Geometry* geom = gi.next();
// if necessary, transform the points to the target SRS:
if ( !makeECEF && !targetSRS->isEquivalentTo(context.profile()->getSRS()) )
{
context.profile()->getSRS()->transform( geom->asVector(), targetSRS );
}
for( unsigned i=0; i<geom->size(); ++i )
{
osg::Matrixd mat;
osg::Vec3d point = (*geom)[i];
if ( makeECEF )
{
// the "rotation" element lets us re-orient the instance to ensure it's pointing up. We
// could take a shortcut and just use the current extent's local2world matrix for this,
// but if the tile is big enough the up vectors won't be quite right.
osg::Matrixd rotation;
ECEF::transformAndGetRotationMatrix( point, context.profile()->getSRS(), point, targetSRS, rotation );
mat = rotationMatrix * rotation * scaleMatrix * osg::Matrixd::translate( point ) * _world2local;
}
else
{
mat = rotationMatrix * scaleMatrix * osg::Matrixd::translate( point ) * _world2local;
}
osg::MatrixTransform* xform = new osg::MatrixTransform();
xform->setMatrix( mat );
xform->setDataVariance( osg::Object::STATIC );
xform->addChild( model.get() );
attachPoint->addChild( xform );
if ( context.featureIndex() && !_useDrawInstanced )
{
context.featureIndex()->tagNode( xform, input );
}
// name the feature if necessary
if ( !_featureNameExpr.empty() )
{
const std::string& name = input->eval( _featureNameExpr, &context);
if ( !name.empty() )
xform->setName( name );
}
}
}
}
}
if ( iconSymbol )
{
// activate decluttering for icons if requested
if ( iconSymbol->declutter() == true )
{
Decluttering::setEnabled( attachPoint->getOrCreateStateSet(), true );
}
// activate horizon culling if we are in geocentric space
if ( context.getSession() && context.getSession()->getMapInfo().isGeocentric() )
{
HorizonCullingProgram::install( attachPoint->getOrCreateStateSet() );
}
}
// active DrawInstanced if required:
if ( _useDrawInstanced && Registry::capabilities().supportsDrawInstanced() )
{
DrawInstanced::convertGraphToUseDrawInstanced( attachPoint );
// install a shader program to render draw-instanced.
DrawInstanced::install( attachPoint->getOrCreateStateSet() );
}
return true;
}
示例4: wallSkinPRNG
//.........这里部分代码省略.........
// calculate the colors:
osg::Vec4f wallColor(1,1,1,0), wallBaseColor(1,1,1,0), roofColor(1,1,1,0), outlineColor(1,1,1,1);
if ( _wallPolygonSymbol.valid() )
{
wallColor = _wallPolygonSymbol->fill()->color();
if ( _extrusionSymbol->wallGradientPercentage().isSet() )
{
wallBaseColor = Color(wallColor).brightness( 1.0 - *_extrusionSymbol->wallGradientPercentage() );
}
else
{
wallBaseColor = wallColor;
}
}
if ( _roofPolygonSymbol.valid() )
{
roofColor = _roofPolygonSymbol->fill()->color();
}
if ( _outlineSymbol.valid() )
{
outlineColor = _outlineSymbol->stroke()->color();
}
// Create the extruded geometry!
if (extrudeGeometry(
part, height, offset,
*_extrusionSymbol->flatten(),
walls.get(), rooflines.get(), baselines.get(), outlines.get(),
wallColor, wallBaseColor, roofColor, outlineColor,
wallSkin, roofSkin,
context ) )
{
if ( wallSkin )
{
context.resourceCache()->getStateSet( wallSkin, wallStateSet );
}
// generate per-vertex normals, altering the geometry as necessary to avoid
// smoothing around sharp corners
osgUtil::SmoothingVisitor::smooth(
*walls.get(),
osg::DegreesToRadians(_wallAngleThresh_deg) );
// tessellate and add the roofs if necessary:
if ( rooflines.valid() )
{
osgUtil::Tessellator tess;
tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_ODD );
tess.retessellatePolygons( *(rooflines.get()) );
// generate default normals (no crease angle necessary; they are all pointing up)
// TODO do this manually; probably faster
if ( !_makeStencilVolume )
osgUtil::SmoothingVisitor::smooth( *rooflines.get() );
if ( roofSkin )
{
context.resourceCache()->getStateSet( roofSkin, roofStateSet );
}
}
if ( baselines.valid() )
{
osgUtil::Tessellator tess;
tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_ODD );
tess.retessellatePolygons( *(baselines.get()) );
}
std::string name;
if ( !_featureNameExpr.empty() )
name = input->eval( _featureNameExpr, &context );
FeatureSourceIndex* index = context.featureIndex();
addDrawable( walls.get(), wallStateSet.get(), name, input, index );
if ( rooflines.valid() )
{
addDrawable( rooflines.get(), roofStateSet.get(), name, input, index );
}
if ( baselines.valid() )
{
addDrawable( baselines.get(), 0L, name, input, index );
}
if ( outlines.valid() )
{
addDrawable( outlines.get(), 0L, name, input, index );
}
}
}
}
return true;
}
示例5: scriptExpr
//.........这里部分代码省略.........
scale = input->eval( scaleEx, &context );
scaleVec.set(scale, scale, scale);
}
if ( modelSymbol )
{
if ( modelSymbol->scaleX().isSet() )
{
scaleVec.x() *= input->eval( scaleXEx, &context );
}
if ( modelSymbol->scaleY().isSet() )
{
scaleVec.y() *= input->eval( scaleYEx, &context );
}
if ( modelSymbol->scaleZ().isSet() )
{
scaleVec.z() *= input->eval( scaleZEx, &context );
}
}
if ( scaleVec.x() == 0.0 ) scaleVec.x() = 1.0;
if ( scaleVec.y() == 0.0 ) scaleVec.y() = 1.0;
if ( scaleVec.z() == 0.0 ) scaleVec.z() = 1.0;
scaleMatrix = osg::Matrix::scale( scaleVec );
if ( modelSymbol->heading().isSet() )
{
float heading = input->eval(headingEx, &context);
rotationMatrix.makeRotate( osg::Quat(osg::DegreesToRadians(heading), osg::Vec3(0,0,1)) );
}
osg::Vec3d point = (*geom)[i];
if ( makeECEF )
{
// the "rotation" element lets us re-orient the instance to ensure it's pointing up. We
// could take a shortcut and just use the current extent's local2world matrix for this,
// but if the tile is big enough the up vectors won't be quite right.
osg::Matrixd rotation;
ECEF::transformAndGetRotationMatrix( point, context.profile()->getSRS(), point, targetSRS, rotation );
mat = scaleMatrix * rotationMatrix * rotation * osg::Matrixd::translate( point ) * _world2local;
}
else
{
mat = scaleMatrix * rotationMatrix * osg::Matrixd::translate( point ) * _world2local;
}
osg::MatrixTransform* xform = new osg::MatrixTransform();
xform->setMatrix( mat );
xform->setDataVariance( osg::Object::STATIC );
xform->addChild( model.get() );
attachPoint->addChild( xform );
// Only tag nodes if we aren't using clustering.
if ( context.featureIndex() && !_cluster)
{
context.featureIndex()->tagNode( xform, input );
}
// name the feature if necessary
if ( !_featureNameExpr.empty() )
{
const std::string& name = input->eval( _featureNameExpr, &context);
if ( !name.empty() )
xform->setName( name );
}
}
}
}
}
if ( iconSymbol )
{
// activate decluttering for icons if requested
if ( iconSymbol->declutter() == true )
{
ScreenSpaceLayout::activate(attachPoint->getOrCreateStateSet());
}
// activate horizon culling if we are in geocentric space
if ( context.getSession() && context.getSession()->getMapInfo().isGeocentric() )
{
// should this use clipping, or a horizon cull callback?
//HorizonCullingProgram::install( attachPoint->getOrCreateStateSet() );
attachPoint->getOrCreateStateSet()->setMode(GL_CLIP_DISTANCE0, 1);
}
}
// active DrawInstanced if required:
if ( _useDrawInstanced )
{
DrawInstanced::convertGraphToUseDrawInstanced( attachPoint );
// install a shader program to render draw-instanced.
DrawInstanced::install( attachPoint->getOrCreateStateSet() );
}
return true;
}