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