本文整理汇总了C++中osg::Group类的典型用法代码示例。如果您正苦于以下问题:C++ Group类的具体用法?C++ Group怎么用?C++ Group使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Group类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
void
RemoveEmptyGroupsVisitor::apply( osg::Group& group )
{
bool removed = true;
while( removed )
{
removed = false;
for( unsigned i = 0; i < group.getNumChildren(); ++i )
{
osg::Group* child = group.getChild(i)->asGroup();
if ( child )
{
if (child->className() == std::string("Group") &&
child->getStateSet() == 0L &&
child->getCullCallback() == 0L &&
child->getUpdateCallback() == 0L &&
child->getUserData() == 0L &&
child->getName().empty() &&
child->getDescriptions().size() == 0 )
{
for( unsigned j = 0; j < child->getNumChildren(); ++j )
{
group.addChild( child->getChild( j ) );
}
group.removeChild( i-- );
removed = true;
}
}
}
}
traverse(group);
}
示例2:
/** Attacca al/ai nodi che corrispondono a nodeName */
void LoadThreadsHandler::AttachNodeToSceneByName::apply(osg::Group& grp)
{
if (grp.getName() == _nodeName)
{
if(!_attached || _multipleattach)
{
if(_ranged)
{
osg::ref_ptr<osg::LOD> newlod = new osg::LOD;
newlod->setName("RangedLOD_" + _attachNode->getName());
newlod->addChild(_attachNode.get(), _min, _max);
grp.addChild(newlod.get());
}
else
{
grp.addChild(_attachNode.get());
}
_attached = true;
}
}
traverse(grp);
}
示例3: if
void CVRCullVisitor::PreCullVisitor::apply(osg::Group& group)
{
bool setMask = false;
for(int i = 0; i < group.getNumChildren(); i++)
{
_setMask = false;
group.getChild(i)->accept(*this);
if(_setMask)
{
setMask = true;
}
}
if(group.getNodeMask() & FIRST_CULL_STATUS)
{
_setMask = true;
}
else if(setMask)
{
//std::cerr << "Pulling up node mask." << std::endl;
_setMask = true;
group.setNodeMask(group.getNodeMask() | FIRST_CULL_STATUS);
}
}
示例4: apply
// apply method for groups
void GeometryExtractorVisitor::apply( osg::Group& group ) {
// call the appropriate apply method for all children
if( group.getNumChildren() > 0 ) {
for( unsigned int i = 0; i < group.getNumChildren(); i++) {
osg::Node* node = group.getChild( i );
apply( *node );
}
}
}
示例5: writeChildren
static bool writeChildren( osgDB::OutputStream& os, const osg::Group& node )
{
unsigned int size = node.getNumChildren();
os << size << osgDB::BEGIN_BRACKET << std::endl;
for ( unsigned int i=0; i<size; ++i )
{
os << node.getChild(i);
}
os << osgDB::END_BRACKET << std::endl;
return true;
}
示例6: guard
void
FltExportVisitor::apply( osg::Group& node )
{
ScopedStatePushPop guard( this, node.getStateSet() );
if (_firstNode)
{
// On input, a FLT header creates a Group node.
// On export, we always write a Header record, but then the first Node
// we export is the Group that was created from the original input Header.
// On successive roundtrips, this results in increased redundant top-level Group nodes/records.
// Avoid this by NOT outputting anything for a top-level Group node.
_firstNode = false;
traverse( node );
return;
}
// A Group node could indicate one of many possible records.
// Header record -- Don't need to support this here. We always output a header.
// Group record -- HIGH
// Child of an LOD node -- HIGH Currently write out a Group record regardless.
// InstanceDefinition/InstanceReference -- MED -- multiparented Group is an instance
// Extension record -- MED
// Object record -- MED
// LightPointSystem record (if psgSim::MultiSwitch) -- LOW
osgSim::MultiSwitch* multiSwitch = dynamic_cast<osgSim::MultiSwitch*>( &node );
if (multiSwitch)
{
writeSwitch( multiSwitch );
}
else
{
osgSim::ObjectRecordData* ord =
dynamic_cast< osgSim::ObjectRecordData* >( node.getUserData() );
if (ord)
{
// This Group should write an Object Record.
writeObject( node, ord );
}
else
{
// Handle other cases here.
// For now, just output a Group record.
writeGroup( node );
}
}
writeMatrix( node.getUserData() );
writeComment( node );
writePushTraverseWritePop( node );
}
示例7: handle
void SimpleDotVisitor::handle(osg::Group &node, int id)
{
std::stringstream label;
label << "<top> " << node.className();
if (!node.getName().empty())
{
label << "| " << node.getName();
}
drawNode(id, "record", "solid", label.str(), "black", "white");
}
示例8: apply
void StatsVisitor::apply(osg::Group& node)
{
if (node.getStateSet())
{
apply(*node.getStateSet());
}
++_numInstancedGroup;
_groupSet.insert(&node);
traverse(node);
}
示例9: apply
virtual void apply(osg::Group &group ) {
for (unsigned int i = 0; i<group.getNumChildren(); ) {
if( dynamic_cast<osgAL::SoundRoot*>(group.getChild(i)) && _mode==SEARCH_AND_DESTROY ) {
group.removeChild(i);
} else {
if (dynamic_cast<osgAL::SoundRoot*>(group.getChild(i)) && _mode==SEARCH)
_found_count++;
group.getChild(i)->accept(*this);
i++;
}
}
}
示例10: apply
void WriterNodeVisitor::apply(osg::Group &node)
{
pushStateSet(node.getStateSet());
Lib3dsMeshInstanceNode * parent = _cur3dsNode;
#if DISABLE_3DS_ANIMATION
osg::Matrix mat( osg::computeLocalToWorld(getNodePath()) );
apply3DSMatrixNode(node, &mat, "grp");
#else
apply3DSMatrixNode(node, NULL, "grp");
#endif
if (succeeded())
traverse(node);
_cur3dsNode = parent;
popStateSet(node.getStateSet());
}
示例11: id
void
FltExportVisitor::writeObject(const osg::Group &group, osgSim::ObjectRecordData *ord)
{
uint16 length(28);
IdHelper id(*this, group.getName());
if (!ord)
{
std::string warning("fltexp: writeObject has invalid ObjectRecordData.");
OSG_WARN << warning << std::endl;
_fltOpt->getWriteResult().warn(warning);
return;
}
_records->writeInt16((int16) OBJECT_OP);
_records->writeInt16(length);
_records->writeID(id);
_records->writeInt32(ord->_flags);
_records->writeInt16(ord->_relativePriority);
_records->writeUInt16(ord->_transparency);
_records->writeUInt16(ord->_effectID1);
_records->writeUInt16(ord->_effectID2);
_records->writeUInt16(ord->_significance);
_records->writeUInt16(0); // reserved
}
示例12: apply
virtual void apply(osg::Group& group)
{
for (unsigned int i = 0; i < group.getNumChildren(); i++)
{
osg::Node* child = group.getChild(i);
osg::Node* seam = seamReplacement(child);
if (child != seam)
{
group.replaceChild(child,seam);
}
else
{
child->accept(*this);
}
}
}
示例13: apply
void CVRCullVisitor::apply(osg::Group& node)
{
bool status = _cullingStatus;
bool firstStatus = _firstCullStatus;
if(isCulled(node))
{
_firstCullStatus = firstStatus;
_cullingStatus = status;
return;
}
// push the culling mode.
pushCurrentMask();
// push the node's state.
StateSet* node_state = node.getStateSet();
if(node_state)
pushStateSet(node_state);
handle_cull_callbacks_and_traverse(node);
// pop the node's state off the render graph stack.
if(node_state)
popStateSet();
// pop the culling mode.
popCurrentMask();
_firstCullStatus = firstStatus;
_cullingStatus = status;
}
示例14: apply
void POVWriteNodeVisitor::apply(osg::Group& group)
{
_out << "/* A group starts... */\n\n";
// visiting children
group.traverse(*this);
_out << "/* A group ends... */\n\n";
}
示例15: apply
void FindByNameVisitor::apply(osg::Group &group)
{
if (Misc::StringUtils::ciEqual(group.getName(), mNameToFind))
{
mFoundNode = &group;
return;
}
traverse(group);
}