Color

Object Hierarchy | Related C++ Class: CColor

Introduced

1.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

Particle.Color

Envelope.GetDeformerColor



Autodesk Softimage v7.5