Color

Object Hierarchy | Related C++ Class: CColor

Introduced

v1.0

Description

This object represents an RGBA color. The RBGA component values are stored as double precision numbers.

Note: if a component value is greater than a signed, single-precision value, the component value is interpreted as a negative value. In most cases, the component values are normalized to the range 0 to 1. TrianglePoint.Color is an exception, and returns values in the range 0 to 255.

Other Softimage objects and properties store colors differently:

- Shaders and Softimage objects have separate Parameter objects for each color component (for example, "Scene_Material.Phong.diffuse.Green"). These component values are normalized and use double precision.

- Vertex Color properties store color component values as arrays of doubles inside a ClusterProperty.

- Wireframe colors are encoded as 10-bit values (0 to 1023), with the least significant bit ignored. Each of the R,G,B channels is 3 bits (a number from 0 to 7), and the wireframe color is encoded as B2|B1|B0|G2|G1|G0|R2|R1|R0|0|

Properties

Alpha Blue Green Red

Examples

1. JScript Example

/*

	This example shows how to create a tool for changing the

	wireframe color of an object and how to map an RGB color to

	a wireframe color.

*/ 

CreateColorizeTool();

function CreateColorizeTool()

{

	var color_tool = ActiveSceneRoot.Properties("ColorizeTool");

	if (!color_tool)

	{

		var color_tool = ActiveSceneRoot.AddCustomProperty( "ColorizeTool" );

		var wirecolor = color_tool.AddParameter( "wirecolor", siInt4 );

		wirecolor.ReadOnly = true;

		var r = color_tool.AddParameter( "R", siDouble );

		var g = color_tool.AddParameter( "G", siDouble );

		var b = color_tool.AddParameter( "B", siDouble );

		var a = color_tool.AddParameter( "A", siDouble );

		var layout = color_tool.PPGLayout ;

		layout.AddRow();

		var item = layout.AddItem( "wirecolor", "wirecolor" );

		item.SetAttribute( "NoSlider", true );

		layout.AddButton( "ColorizeObject", "Colorize object" );

		layout.EndRow();

		layout.AddGroup( "Color" );

		item = layout.AddColor( "R", "",true );

		item.SetAttribute( "NoLabel", true );

		layout.EndGroup();

		layout.Language = "JScript" ;

		layout.Logic = 

			ColorizeTool_R_OnChanged.toString() + 

			ColorizeTool_G_OnChanged.toString() + 

			ColorizeTool_B_OnChanged.toString() + 

			RGBToWireframeColor.toString() + 

			ColorizeTool_ColorizeObject_OnClicked.toString();

		layout.SetAttribute( "LogicPrefix", "ColorizeTool_" ) ;

	}

	InspectObj( color_tool, "Colorize Tool", "", siLock ); 

}

function ColorizeTool_R_OnChanged()

{

	PSet.wirecolor.ReadOnly = false;

	PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value);

	PSet.wirecolor.ReadOnly = true;

}

function ColorizeTool_G_OnChanged()

{

	PSet.wirecolor.ReadOnly = false;

	PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value);

	PSet.wirecolor.ReadOnly = true;

}

function ColorizeTool_B_OnChanged()

{

	PSet.wirecolor.ReadOnly = false;

	PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value);

	PSet.wirecolor.ReadOnly = true;

}

function ColorizeTool_ColorizeObject_OnClicked()

{

	var color = PSet.wirecolor.Value;

	var o = null;

	var siRMB = 0;

	var button = -1, modifier;

	while ( o==null && button != siRMB )

	{

		Application.StatusBar ="Pick object to colorize";

		var rtn = PickObject( "Select object", "");

		o = rtn.Value("PickedElement");

		button = rtn.Value("ButtonPressed");

		modifier = rtn.Value("ModifierPressed");

	}

	if ( button == siRMB )

		return;

	var display = o.Properties("Display");

	if (display.isa(siSharedPSet))

	{

		display = MakeLocal( display, siNodePropagation )(0);

	}

	display.wirecol.Value = color;

	return color;

}

// Convert wireframe color index to double-precision RGB color

function WireframeColorToRGB(lWireframeColor)

{

	var aColor = new Array(3);

	aColor[0] = ((lWireframeColor >>> 1) & 0x7)/7;

	aColor[1] = ((lWireframeColor >>> 4) & 0x7)/7;

	aColor[2] = ((lWireframeColor >>> 7) & 0x7)/7;

	return aColor;

}

// Convert double-precision RGB color to wireframe color index

function RGBToWireframeColor(dR,dG,dB)

{

	// Convert RGB to wirecolor

	var wirecolR, wirecolG, wirecolB;

	wirecolR = (Math.round(dR * 7)) << 1

	wirecolG = (Math.round(dG * 7)) << 4

	wirecolB = (Math.round(dB * 7)) << 7

	return wirecolR | wirecolG | wirecolB;

}

2. VBScript Example

set oSpot = GetValue("Scene_Root").AddLightRig("Spot").Light

set oColor = oSpot.OGLLight.Color

Application.LogMessage "color: " & oColor.Red & ", " & oColor.Green & ", " & oColor.Blue & ", " & oColor.Alpha

See Also

ColorizeObject TrianglePoint.Color Triangle OGLLight.Color OGLMaterial Light Envelope.GetDeformerColor