static Plug *loadCompoundNumericParameter( const OSLQuery::Parameter *parameter, Gaffer::CompoundPlug *parent ) { typedef typename PlugType::ValueType ValueType; typedef typename ValueType::BaseType BaseType; ValueType defaultValue( 0 ); if( parameter->idefault.size() ) { for( size_t i = 0; i < PlugType::ValueType::dimensions(); ++i ) { defaultValue[i] = BaseType( parameter->idefault[i] ); } } else if( parameter->fdefault.size() ) { for( size_t i = 0; i < PlugType::ValueType::dimensions(); ++i ) { defaultValue[i] = BaseType( parameter->fdefault[i] ); } } /// \todo Get from metadata ValueType minValue( Imath::limits<BaseType>::min() ); ValueType maxValue( Imath::limits<BaseType>::max() ); const string name = plugName( parameter ); PlugType *existingPlug = parent->getChild<PlugType>( name ); if( existingPlug && existingPlug->defaultValue() == defaultValue && existingPlug->minValue() == minValue && existingPlug->maxValue() == maxValue ) { return existingPlug; } typename PlugType::Ptr plug = new PlugType( name, parent->direction(), defaultValue, minValue, maxValue, Plug::Default | Plug::Dynamic ); if( existingPlug ) { typedef typename PlugType::ChildType ChildType; for( size_t i = 0, e = existingPlug->children().size(); i < e; ++i ) { transferConnectionOrValue( existingPlug->template GraphComponent::getChild<ChildType>( i ), plug->template GraphComponent::getChild<ChildType>( i ) ); } } parent->setChild( name, plug ); return plug; }
static void loadCompoundNumericParameter( Gaffer::CompoundPlug *parametersPlug, const std::string &name, const typename PlugType::ValueType &defaultValue, const CompoundData *annotations ) { typename PlugType::ValueType minValue( Imath::limits<float>::min() ); typename PlugType::ValueType maxValue( Imath::limits<float>::max() ); const StringData *minValueData = annotations->member<StringData>( name + ".min" ); if( minValueData ) { minValue = typename PlugType::ValueType( boost::lexical_cast<float>( minValueData->readable() ) ); } const StringData *maxValueData = annotations->member<StringData>( name + ".max" ); if( maxValueData ) { maxValue = typename PlugType::ValueType( boost::lexical_cast<float>( maxValueData->readable() ) ); } PlugType *existingPlug = parametersPlug->getChild<PlugType>( name ); if( existingPlug && existingPlug->defaultValue() == defaultValue && existingPlug->minValue() == minValue && existingPlug->maxValue() == maxValue ) { return; } typename PlugType::Ptr plug = new PlugType( name, Plug::In, defaultValue, minValue, maxValue, Plug::Default | Plug::Dynamic ); if( existingPlug ) { for( size_t i = 0, e = existingPlug->children().size(); i < e; i++ ) { FloatPlug *existingComponentPlug = static_cast<GraphComponent *>( existingPlug )->getChild<FloatPlug>( i ); FloatPlug *componentPlug = static_cast<GraphComponent *>( plug.get() )->getChild<FloatPlug>( i ); if( existingComponentPlug->getInput<Plug>() ) { componentPlug->setInput( existingComponentPlug->getInput<Plug>() ); } else { componentPlug->setValue( existingComponentPlug->getValue() ); } } } parametersPlug->setChild( name, plug ); }
static void loadNumericParameter( Gaffer::CompoundPlug *parametersPlug, const std::string &name, typename PlugType::ValueType defaultValue, const CompoundData *annotations ) { typename PlugType::ValueType minValue( Imath::limits<typename PlugType::ValueType>::min() ); typename PlugType::ValueType maxValue( Imath::limits<typename PlugType::ValueType>::max() ); const StringData *minValueData = annotations->member<StringData>( name + ".min" ); if( minValueData ) { minValue = typename PlugType::ValueType( boost::lexical_cast<typename PlugType::ValueType>( minValueData->readable() ) ); } const StringData *maxValueData = annotations->member<StringData>( name + ".max" ); if( maxValueData ) { maxValue = typename PlugType::ValueType( boost::lexical_cast<typename PlugType::ValueType>( maxValueData->readable() ) ); } PlugType *existingPlug = parametersPlug->getChild<PlugType>( name ); if( existingPlug && existingPlug->defaultValue() == defaultValue && existingPlug->minValue() == minValue && existingPlug->maxValue() == maxValue ) { return; } typename PlugType::Ptr plug = new PlugType( name, Plug::In, defaultValue, minValue, maxValue, Plug::Default | Plug::Dynamic ); if( existingPlug ) { if( existingPlug->template getInput<Plug>() ) { plug->setInput( existingPlug->template getInput<Plug>() ); } else { plug->setValue( existingPlug->getValue() ); } } parametersPlug->setChild( name, plug ); }
static Plug *loadNumericParameter( const OSLQuery::Parameter *parameter, Gaffer::CompoundPlug *parent ) { typedef typename PlugType::ValueType ValueType; ValueType defaultValue( 0 ); if( parameter->idefault.size() ) { defaultValue = ValueType( parameter->idefault[0] ); } else if( parameter->fdefault.size() ) { defaultValue = ValueType( parameter->fdefault[0] ); } /// \todo Get from metadata ValueType minValue( Imath::limits<ValueType>::min() ); ValueType maxValue( Imath::limits<ValueType>::max() ); const string name = plugName( parameter ); PlugType *existingPlug = parent->getChild<PlugType>( name ); if( existingPlug && existingPlug->defaultValue() == defaultValue && existingPlug->minValue() == minValue && existingPlug->maxValue() == maxValue ) { return existingPlug; } typename PlugType::Ptr plug = new PlugType( name, parent->direction(), defaultValue, minValue, maxValue, Plug::Default | Plug::Dynamic ); transferConnectionOrValue( existingPlug, plug.get() ); parent->setChild( name, plug ); return plug; }