## PolygonMesh.AddVertexColor

### Introduced

v3.0

### Description

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

### C# Syntax

    ClusterProperty PolygonMesh.AddVertexColor( String Name );

### Scripting Syntax

    oReturn = PolygonMesh.AddVertexColor( [Name] );

### Return Value

ClusterProperty

### Parameters

Parameter | Type | Description
--- | --- | ---
Name | String | Name of new vertex color property Default Value: Vertex_Color

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