AddVertexColor (PolygonMesh)

Introduced

3.0

Description

Adds a new vertex color property to this polygon mesh object.

Scripting Syntax

PolygonMesh.AddVertexColor( [Name] )

C# Syntax

ClusterProperty PolygonMesh.AddVertexColor( String Name );

Parameters

Parameter

Type

Description

Name

String

Name of new vertex color property

Default Value: Vertex_Color

Return Value

ClusterProperty

Examples

JScript Example

// create scene with sphere
NewScene( null, false );
CreatePrim("Sphere", "MeshSurface", null, null);

// get selected elements from scene
if ( Selection.count == 0 )
{
LogMessage( "Nothing selected", siError );
}
else
{    
var objs = Selection;

// get selected meshes from selection list
var meshes = SIFilter( objs, "polygon_mesh", true, siQuickSearch );

if ( !meshes )
{
LogMessage( "No polygon meshes selected", siError );
}

// process selected models
freezeNormalColors( meshes );
}

function freezeNormalColors( objs )
{
// process all meshes
for ( var i = 0; i < objs.count; i++ )
{
// get current mesh (type : "polyMsh")
var obj = objs( i );

// get obj material
var mat = obj.Material;

// if material is not local add one
if ( mat.IsA(siSharedPSet) )
{
mat = obj.AddMaterial();
}      

// get polygon mesh geometry
var polymesh = obj.ActivePrimitive.Geometry;

// get current vertex color property
var vc = polymesh.CurrentVertexColor;

// current vertex color property not set yet
if ( vc == null )
{
// no vertex color properties installed, add one. 
vc = polymesh.AddVertexColor();

// set the vertex color to be used by the polgon obj's 
// material.
polymesh.CurrentVertexColor = vc;
}

// set vertex colours from shading normal vectors

// the parent of the vertex color is
// a cluster. This maintains the relationship
// between the actual node index and the corresponding
// cluster index.
var vcClsElems = vc.parent.elements;

var nodes2 = new VBArray( vc.Elements.Array ); 
var nodes = nodes2.toArray();
var clsElemIndex = 0;

// visit all polygons
for ( var j = 0; j < polymesh.Polygons.Count; j++ )
{
// get pointer on polygon
poly = polymesh.Polygons( j );

// visit all polynodes
var polynodes = poly.Nodes

for ( var k = 0; k < polynodes.Count; k++ )
{
var node = polynodes( k );

// get polynode normal
var normal = node.normal;

// lookup node index for vertex color
clsElemIndex = vcClsElems.FindIndex( node.Index ) * 4;

// compute corresponding color channels
nodes[ clsElemIndex ]     = ( normal.x + 1.0 ) * 0.5;
nodes[ clsElemIndex + 1 ] = ( normal.y + 1.0 ) * 0.5;
nodes[ clsElemIndex + 2 ] = ( normal.z + 1.0 ) * 0.5;
nodes[ clsElemIndex + 3 ] = 1.0;
}
}

// put the new colors back into the vertex colour 
vc.Elements.Array = nodes;
}

return;
}

See Also

PolygonMesh.CurrentVertexColor

PolygonMesh.VertexColors

ClusterProperty

CreateVertexColorSupport



Autodesk Softimage v7.5