Object Hierarchy | Related C++ Class: CColor
v1.0
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|
/* 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; } |
set oSpot = GetValue("Scene_Root").AddLightRig("Spot").Light set oColor = oSpot.OGLLight.Color Application.LogMessage "color: " & oColor.Red & ", " & oColor.Green & ", " & oColor.Blue & ", " & oColor.Alpha |