BaseOverride Manual
A BaseOverride defines the settings for a specific BaseList2D object in a certain take.
// get the active material BaseMaterial * const material = doc-> GetActiveMaterial ();
// check if the active material is the Cinema 4D standard material if (material == nullptr || material-> GetType () != Mmaterial ) return maxon::OK ;
// create 10 takes with variations for ( Int32 i = 0; i < 10; ++i) { const String takeName = "Variation " + String::IntToString (i); BaseTake * const materialVariation = takeData-> AddTake (takeName, nullptr , nullptr ); if (materialVariation == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );
// new color const 向量 hsv { Float (i) * 0.1, 1.0, 1.0 }; const 向量 rgb = HSVToRGB (hsv); const GeData newValue { rgb };
// create override BaseOverride * const overrideNode = materialVariation-> FindOrAddOverrideParam (takeData, material, matColID, newValue); if (overrideNode == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );
Existing BaseOverride objects can be accessed from the BaseTake 或 TakeData object:
Overrides are created using the host BaseTake :
// prepare parameter ID and new value const DescLevel cubeSizeLevel { PRIM_CUBE_LEN , DTYPE_VECTOR , 0 }; const DescLevel vectorXLevel { VECTOR_X , DTYPE_REAL , 0 }; const DescID ID { cubeSizeLevel, vectorXLevel }; const GeData newValue { 300.0 };
// create override BaseOverride * const overrideNode = take-> FindOrAddOverrideParam (takeData, cube, ID, newValue); if (overrideNode == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );
// update the object overrideNode-> UpdateSceneNode (takeData, ID);
BaseOverride instances are organized in a BaseList2D list:
nullptr
.
nullptr
.
The following properties can be accessed:
A BaseOverride stores the values of different parameters. These parameters can be accessed in different ways:
// check if the given object is a "Sphere" object if (object-> GetType () != Osphere ) return maxon::IllegalArgumentError( MAXON_SOURCE_LOCATION ); BaseOverride * const baseOverride = take-> FindOverride (takeData, object ); if (baseOverride == nullptr ) return maxon::IllegalArgumentError( MAXON_SOURCE_LOCATION );
// the "Radius" parameter of a sphere const DescID ID { DescLevel { PRIM_SPHERE_RAD , DTYPE_REAL , 0 } };
// check if the "Radius" parameter is overridden if (baseOverride-> IsOverriddenParam (ID)) { GeData data; baseOverride-> GetParameter (ID, data, DESCFLAGS_GET::NONE ); // change parameter data = data. GetFloat () + 10.0; // update override baseOverride-> SetParameter (ID, data, DESCFLAGS_SET::NONE ); // update node baseOverride-> UpdateSceneNode (takeData, ID); }