static IECore::ObjectPtr getClipboardContents( ApplicationRoot &a ) { IECore::ConstObjectPtr o = a.getClipboardContents(); if( o ) { return o->copy(); } return 0; }
void VectorTypedParameterHandler<ParameterType>::setParameterValue() { IECore::ConstObjectPtr o = m_plug->getValue(); if( o ) { m_parameter->setValue( o->copy() ); } else { m_parameter->setValue( m_parameter->defaultValue()->copy() ); } }
IECore::RunTimeTypedPtr ToGLMeshConverter::doConversion( IECore::ConstObjectPtr src, IECore::ConstCompoundObjectPtr operands ) const { IECore::MeshPrimitivePtr mesh = IECore::staticPointerCast<IECore::MeshPrimitive>( src->copy() ); // safe because the parameter validated it for us if( !mesh->variableData<IECore::V3fVectorData>( "P", IECore::PrimitiveVariable::Vertex ) ) { throw IECore::Exception( "Must specify primitive variable \"P\", of type V3fVectorData and interpolation type Vertex." ); } if( mesh->variables.find( "N" )==mesh->variables.end() ) { // the mesh has no normals - we need to explicitly add some. if it's a polygon // mesh (interpolation==linear) then we add per-face normals for a faceted look // and if it's a subdivision mesh we add smooth per-vertex normals. IECore::MeshNormalsOpPtr normalOp = new IECore::MeshNormalsOp(); normalOp->inputParameter()->setValue( mesh ); normalOp->copyParameter()->setTypedValue( false ); normalOp->interpolationParameter()->setNumericValue( mesh->interpolation() == "linear" ? IECore::PrimitiveVariable::Uniform : IECore::PrimitiveVariable::Vertex ); normalOp->operate(); } IECore::TriangulateOpPtr op = new IECore::TriangulateOp(); op->inputParameter()->setValue( mesh ); op->throwExceptionsParameter()->setTypedValue( false ); // it's better to see something than nothing op->copyParameter()->setTypedValue( false ); op->operate(); IECore::FaceVaryingPromotionOpPtr faceVaryingOp = new IECore::FaceVaryingPromotionOp; faceVaryingOp->inputParameter()->setValue( mesh ); faceVaryingOp->copyParameter()->setTypedValue( false ); faceVaryingOp->operate(); MeshPrimitivePtr glMesh = new MeshPrimitive( mesh->vertexIds() ); for ( IECore::PrimitiveVariableMap::iterator pIt = mesh->variables.begin(); pIt != mesh->variables.end(); ++pIt ) { if ( pIt->second.data ) { glMesh->addPrimitiveVariable( pIt->first, pIt->second ); } else { IECore::msg( IECore::Msg::Warning, "ToGLMeshConverter", boost::format( "No data given for primvar \"%s\"" ) % pIt->first ); } } IECore::PrimitiveVariableMap::const_iterator sIt = mesh->variables.find( "s" ); IECore::PrimitiveVariableMap::const_iterator tIt = mesh->variables.find( "t" ); if ( sIt != mesh->variables.end() && tIt != mesh->variables.end() ) { if ( sIt->second.interpolation != IECore::PrimitiveVariable::Constant && tIt->second.interpolation != IECore::PrimitiveVariable::Constant && sIt->second.interpolation == tIt->second.interpolation ) { IECore::ConstFloatVectorDataPtr s = IECore::runTimeCast< const IECore::FloatVectorData >( sIt->second.data ); IECore::ConstFloatVectorDataPtr t = IECore::runTimeCast< const IECore::FloatVectorData >( tIt->second.data ); if ( s && t ) { /// Should hold true if primvarsAreValid assert( s->readable().size() == t->readable().size() ); IECore::V2fVectorDataPtr stData = new IECore::V2fVectorData(); stData->writable().resize( s->readable().size() ); for ( unsigned i = 0; i < s->readable().size(); i++ ) { stData->writable()[i] = Imath::V2f( s->readable()[i], t->readable()[i] ); } glMesh->addPrimitiveVariable( "st", IECore::PrimitiveVariable( sIt->second.interpolation, stData ) ); } else { IECore::msg( IECore::Msg::Warning, "ToGLMeshConverter", "If specified, primitive variables \"s\" and \"t\" must be of type FloatVectorData and interpolation type FaceVarying." ); } } else { IECore::msg( IECore::Msg::Warning, "ToGLMeshConverter", "If specified, primitive variables \"s\" and \"t\" must be of type FloatVectorData and non-Constant interpolation type." ); } } else if ( sIt != mesh->variables.end() || tIt != mesh->variables.end() ) { IECore::msg( IECore::Msg::Warning, "ToGLMeshConverter", "Primitive variable \"s\" or \"t\" found, but not both." ); } return glMesh; }
static IECore::ObjectPtr getValue( Detail::PythonObjectKnob &knob ) { check( knob ); IECore::ConstObjectPtr v = knob.objectKnob->getValue(); return v ? v->copy() : 0; }