Imath::Box3d LiveScene::readBound( double time ) const { tbb::mutex::scoped_lock l( s_mutex ); if( fabs( MAnimControl::currentTime().as( MTime::kSeconds ) - time ) > 1.e-4 ) { throw Exception( "IECoreMaya::LiveScene::readBound: time must be the same as on the maya timeline!" ); } if( m_isRoot ) { MDagPathArray paths; getChildDags( m_dagPath, paths ); Imath::Box3d bound; for( unsigned i=0; i < paths.length(); ++i ) { MFnDagNode dagFn( paths[i] ); Imath::Box3d b = IECore::convert<Imath::Box3d, MBoundingBox>( dagFn.boundingBox() ); if( b.hasVolume() ) { bound.extendBy( b ); } } return bound; } else if( m_dagPath.length() == 0 ) { throw Exception( "IECoreMaya::LiveScene::readBound: Dag path no longer exists!" ); } else { MFnDagNode dagFn( m_dagPath ); Imath::Box3d ret = IECore::convert<Imath::Box3d, MBoundingBox>( dagFn.boundingBox() ); Imath::M44d invTransform = IECore::convert<Imath::M44d, MMatrix>( dagFn.transformationMatrix() ).inverse(); return Imath::transform( ret, invTransform ); } }