void ProceduralHolderUI::unhiliteGroupChildren( const std::string &name, IECoreGL::GroupPtr group, IECoreGL::StateComponentPtr base ) const { assert( base ); assert( group ); /// Add state so that the group hilite state doesn't propogate down the hierarchy past the given name IECoreGL::ConstNameStateComponentPtr n = group->getState()->get< IECoreGL::NameStateComponent >(); if ( n && n->name() != name ) { if ( m_stateMap.find( group.get() ) == m_stateMap.end() ) { IECoreGL::StatePtr oldState = new IECoreGL::State( *(group->getState()) ); assert( oldState ); m_stateMap[ group.get() ] = oldState; } group->getState()->add( base ); return; } const IECoreGL::Group::ChildContainer &children = group->children(); for ( IECoreGL::Group::ChildContainer::const_iterator it = children.begin(); it != children.end(); ++it ) { assert( *it ); IECoreGL::GroupPtr childGroup = IECore::runTimeCast< IECoreGL::Group >( *it ); if ( childGroup ) { unhiliteGroupChildren( name, childGroup, base ); } } }
IECoreGL::ConstRenderablePtr StandardLightVisualiser::pointRays() { IECoreGL::GroupPtr group = new IECoreGL::Group(); addWireframeCurveState( group.get() ); IECore::CompoundObjectPtr parameters = new CompoundObject; parameters->members()["aimType"] = new IntData( 1 ); group->getState()->add( new IECoreGL::ShaderStateComponent( ShaderLoader::defaultShaderLoader(), TextureLoader::defaultTextureLoader(), faceCameraVertexSource(), "", IECoreGL::Shader::constantFragmentSource(), parameters ) ); IntVectorDataPtr vertsPerCurve = new IntVectorData; V3fVectorDataPtr p = new V3fVectorData; const int numRays = 8; for( int i = 0; i < numRays; ++i ) { const float angle = M_PI * 2.0f * float(i)/(float)numRays; const V2f dir( cos( angle ), sin( angle ) ); addRay( dir * .5, dir * 1, vertsPerCurve->writable(), p->writable() ); } IECoreGL::CurvesPrimitivePtr curves = new IECoreGL::CurvesPrimitive( IECore::CubicBasisf::linear(), false, vertsPerCurve ); curves->addPrimitiveVariable( "P", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Vertex, p ) ); curves->addPrimitiveVariable( "Cs", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Constant, new Color3fData( Color3f( 1.0f, 0.835f, 0.07f ) ) ) ); group->addChild( curves ); return group; }
void ProceduralHolderUI::hiliteGroups( const ProceduralHolder::ComponentToGroupMap::mapped_type &groups, IECoreGL::StateComponentPtr hilite, IECoreGL::StateComponentPtr base ) const { assert( base ); for( ProceduralHolder::ComponentToGroupMap::mapped_type::const_iterator it = groups.begin(); it != groups.end(); ++it ) { unhiliteGroupChildren( it->first, it->second, base ); } for( ProceduralHolder::ComponentToGroupMap::mapped_type::const_iterator it = groups.begin(); it != groups.end(); ++it ) { IECoreGL::GroupPtr group = it->second; assert( group ); if ( m_stateMap.find( group.get() ) == m_stateMap.end() ) { IECoreGL::StatePtr oldState = new IECoreGL::State( *(group->getState()) ); assert( oldState ); m_stateMap[ group.get() ] = oldState; } group->getState()->add( hilite ); } }
void SceneShapeUI::hiliteGroups( IECoreGL::GroupPtr group, IECoreGL::StateComponentPtr hilite, IECoreGL::StateComponentPtr base ) const { assert( base ); if( group ) { IECoreGL::ConstNameStateComponentPtr n = group->getState()->get< IECoreGL::NameStateComponent >(); if( n ) { const std::string &name = n->name(); unhiliteGroupChildren( name, group, base ); } if ( m_stateMap.find( group.get() ) == m_stateMap.end() ) { IECoreGL::StatePtr oldState = new IECoreGL::State( *(group->getState()) ); assert( oldState ); m_stateMap[ group.get() ] = oldState; } group->getState()->add( hilite ); } }
IECoreGL::ConstRenderablePtr StandardLightVisualiser::spotlightCone( float innerAngle, float outerAngle, float lensRadius ) { IECoreGL::GroupPtr group = new IECoreGL::Group(); addWireframeCurveState( group.get() ); group->getState()->add( new IECoreGL::CurvesPrimitive::GLLineWidth( 1.0f ) ); IECore::CompoundObjectPtr parameters = new CompoundObject; parameters->members()["aimType"] = new IntData( 0 ); group->getState()->add( new IECoreGL::ShaderStateComponent( ShaderLoader::defaultShaderLoader(), TextureLoader::defaultTextureLoader(), faceCameraVertexSource(), "", IECoreGL::Shader::constantFragmentSource(), parameters ) ); IntVectorDataPtr vertsPerCurve = new IntVectorData; V3fVectorDataPtr p = new V3fVectorData; addCone( innerAngle, lensRadius, vertsPerCurve->writable(), p->writable() ); IECoreGL::CurvesPrimitivePtr curves = new IECoreGL::CurvesPrimitive( IECore::CubicBasisf::linear(), false, vertsPerCurve ); curves->addPrimitiveVariable( "P", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Vertex, p ) ); curves->addPrimitiveVariable( "Cs", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Constant, new Color3fData( Color3f( 1.0f, 0.835f, 0.07f ) ) ) ); group->addChild( curves ); if( fabs( innerAngle - outerAngle ) > 0.1 ) { IECoreGL::GroupPtr outerGroup = new Group; outerGroup->getState()->add( new IECoreGL::CurvesPrimitive::GLLineWidth( 0.5f ) ); IntVectorDataPtr vertsPerCurve = new IntVectorData; V3fVectorDataPtr p = new V3fVectorData; addCone( outerAngle, lensRadius, vertsPerCurve->writable(), p->writable() ); IECoreGL::CurvesPrimitivePtr curves = new IECoreGL::CurvesPrimitive( IECore::CubicBasisf::linear(), false, vertsPerCurve ); curves->addPrimitiveVariable( "P", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Vertex, p ) ); curves->addPrimitiveVariable( "Cs", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Constant, new Color3fData( Color3f( 1.0f, 0.835f, 0.07f ) ) ) ); outerGroup->addChild( curves ); group->addChild( outerGroup ); } return group; }
IECoreGL::ConstRenderablePtr StandardLightVisualiser::ray() { IECoreGL::GroupPtr group = new IECoreGL::Group(); addWireframeCurveState( group.get() ); IECore::CompoundObjectPtr parameters = new CompoundObject; parameters->members()["aimType"] = new IntData( 0 ); group->getState()->add( new IECoreGL::ShaderStateComponent( ShaderLoader::defaultShaderLoader(), TextureLoader::defaultTextureLoader(), faceCameraVertexSource(), "", IECoreGL::Shader::constantFragmentSource(), parameters ) ); IntVectorDataPtr vertsPerCurve = new IntVectorData; V3fVectorDataPtr p = new V3fVectorData; addRay( V2f( 0 ), V2f( 1, 0 ), vertsPerCurve->writable(), p->writable() ); IECoreGL::CurvesPrimitivePtr curves = new IECoreGL::CurvesPrimitive( IECore::CubicBasisf::linear(), false, vertsPerCurve ); curves->addPrimitiveVariable( "P", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Vertex, p ) ); curves->addPrimitiveVariable( "Cs", IECore::PrimitiveVariable( IECore::PrimitiveVariable::Constant, new Color3fData( Color3f( 1.0f, 0.835f, 0.07f ) ) ) ); group->addChild( curves ); return group; }