| 134 | # a parameter somewhere other than the end, use getClasses() |
| 135 | # and setClasses(). |
| 136 | def setClass( self, parameterOrParameterName, className, classVersion ) : |
| 137 | |
| 138 | if isinstance( parameterOrParameterName, str ) : |
| 139 | parameterName = parameterOrParameterName |
| 140 | parameter = self.parameter( parameterOrParameterName ) |
| 141 | if not parameter : |
| 142 | parameter = IECore.CompoundParameter( parameterName, "" ) |
| 143 | self.addParameter( parameter ) |
| 144 | else : |
| 145 | parameter = parameterOrParameterName |
| 146 | parameterName = parameter.name |
| 147 | |
| 148 | instance = self.__namesToInstances.setdefault( parameterName, [ None, "", 0 ] ) |
| 149 | |
| 150 | if [ className, classVersion ] != instance[1:] : |
| 151 | |
| 152 | loader = IECore.ClassLoader.defaultLoader( self.__searchPathEnvVar ) |
| 153 | instance[0] = loader.load( className, classVersion )() |
| 154 | instance[1] = className |
| 155 | instance[2] = classVersion |
| 156 | |
| 157 | parameter.clearParameters() |
| 158 | parameter.addParameters( instance[0].parameters().values() ) |
| 159 | |
| 160 | # copy user data over: |
| 161 | parameter.userData().copyFrom( instance[0].parameters().userData() ) |
| 162 | |
| 163 | ## Removes the class held by the named parameter. |
| 164 | def removeClass( self, parameterName ) : |