MStatus OpHolder<B>::createResultAttribute() { IECore::OpPtr op = IECore::runTimeCast<IECore::Op>( ParameterisedHolder<B>::m_parameterised ); if( !op ) { MString nodeName = ParameterisedHolder<B>::name(); msg( Msg::Error, "OpHolder::createResultAttribute", boost::format( "No Op found on node \"%s\"." ) % nodeName.asChar() ); return MStatus::kFailure; } MStatus s = ParameterisedHolder<B>::createOrUpdateAttribute( const_cast<IECore::Parameter *>( op->resultParameter() ), "result" ); if( !s ) { MString nodeName = ParameterisedHolder<B>::name(); msg( Msg::Error, "OpHolder::createResultAttribute", boost::format( "Unable to update result attribute to represent class \"%s\" on node \"%s\"." ) % op->typeName() % nodeName.asChar() ); return s; } MFnDependencyNode fnDN( B::thisMObject() ); MObject attribute = fnDN.attribute( "result" ); MFnAttribute fnAttr( attribute ); fnAttr.setWritable( false ); fnAttr.setStorable( false ); return MStatus::kSuccess; }