Color Functions Manual

About

Along with the ColorSwatchData and ColorSwatchGroup types these utility functions were introduced to handle colors. The functions are defined in the lib_colorchooser.h header file.

String Conversion

These functions convert a given RGB color value to a formatted String:

// This example reads the color parameter of the given material
// and prints the value as RGB and HSV.
// access MATERIAL_COLOR_COLOR parameter
GeData data;
if (!material->GetParameter(MATERIAL_COLOR_COLOR, data, DESCFLAGS_GET::NONE))
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
const Vector color = data.GetVector();
const String rgbString = ColorRGBToString(color);
const String hsvString = ColorHSVToString(color);
ApplicationOutput("Material Color: RGB " + rgbString + ", HSV " + hsvString);
Definition: c4d_gedata.h:83
const Vector & GetVector(void) const
Definition: c4d_gedata.h:451
Definition: c4d_string.h:39
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:210
String ColorHSVToString(const Vector &color)
String ColorRGBToString(const Vector &color)
@ MATERIAL_COLOR_COLOR
Definition: mmaterial.h:56

Color Format Conversion

The following functions allow easy conversion of colors stored in different formats.

These functions convert float colors (0.0 ... 1.0) to 8-bit colors (0 .. 255):

These functions convert float colors (0.0 ... 1.0) to 16-bit colors (0 .. 65536):

Also, a Kelvin color temperature can be converted:

// This example calculates a RGB value from a light temperature
// and applies it to the given "Light" object.
const Float kelvin = 2600.0; // light bulb
const Vector rgb = ColorKelvinTemperatureToRGB(kelvin);
light->SetParameter(LIGHT_COLOR, rgb, DESCFLAGS_SET::NONE);
maxon::Float Float
Definition: ge_sys_math.h:66
Vector ColorKelvinTemperatureToRGB(Float kelvinDegrees, Float tint=0.0)
@ LIGHT_COLOR
Definition: olight.h:6

Color Harmony

These functions are used to calculate color palettes based on the given input color.

Note
The output maxon::BaseArray contains also the original color.
// This example reads the color value from the given material.
// The complementary color is calculated and applied to a new material.
// access MATERIAL_COLOR_COLOR parameter
GeData data;
if (!material->GetParameter(MATERIAL_COLOR_COLOR, data, DESCFLAGS_GET::NONE))
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
// the original color
const Vector color = data.GetVector();
// calculate the complementary color
if (!ColorHarmonyGetComplementary(color, false, results))
return maxon::UnknownError(MAXON_SOURCE_LOCATION);
// check if the result contains both the original and complementary color
if (results.GetCount() != 2)
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
// get the result color
const Vector complementaryColor = results[1];
// create new material with complementary color
if (newMaterial == nullptr)
return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
newMaterial->SetParameter(MATERIAL_COLOR_COLOR, complementaryColor, DESCFLAGS_SET::NONE);
doc->InsertMaterial(newMaterial);
Definition: c4d_basematerial.h:28
static BaseMaterial * Alloc(Int32 type)
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
Definition: basearray.h:412
MAXON_ATTRIBUTE_FORCE_INLINE Int GetCount() const
Definition: basearray.h:573
#define Mmaterial
Standard material.
Definition: ge_prepass.h:992
Bool ColorHarmonyGetComplementary(const Vector &color, Bool ryb, maxon::BaseArray< Vector > &palette)
const char * doc
Definition: pyerrors.h:226

Further Reading