## 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