Axiom.Core.StaticGeometry.Region.Assign C# (CSharp) Method

Assign() public method

public Assign ( Axiom.Core.QueuedSubMesh qsm ) : void
qsm Axiom.Core.QueuedSubMesh
return void
			public void Assign( QueuedSubMesh qsm )
			{
				queuedSubMeshes.Add( qsm );

				// update lod distances
				Mesh mesh = qsm.submesh.Parent;
				LodStrategy lodStrategy = mesh.LodStrategy;
				if ( this.lodStrategy == null )
				{
					this.lodStrategy = lodStrategy;
					// First LOD mandatory, and always from base lod value
					this.lodValues.Add( this.lodStrategy.BaseValue );
				}
				else
				{
					if ( this.lodStrategy != lodStrategy )
						throw new AxiomException( "Lod strategies do not match." );
				}

				int lodLevels = mesh.LodLevelCount;
				if ( qsm.geometryLodList.Count != lodLevels )
				{
					string msg = string.Format( "QueuedSubMesh '{0}' lod count of {1} does not match parent count of {2}", qsm.submesh.Name, qsm.geometryLodList.Count, lodLevels );
					throw new AxiomException( msg );
				}

				while ( lodValues.Count < lodLevels )
				{
					lodValues.Add( 0.0f );
				}
				// Make sure LOD levels are max of all at the requested level
				for ( ushort lod = 1; lod < lodLevels; ++lod )
				{
					MeshLodUsage meshLod = qsm.submesh.Parent.GetLodLevel( lod );
					lodValues[ lod ] = Utility.Max( (float)lodValues[ lod ], meshLod.Value );
				}

				// update bounds
				// Transform world bounds relative to our center
				AxisAlignedBox localBounds = new AxisAlignedBox( qsm.worldBounds.Minimum - center, qsm.worldBounds.Maximum - center );
				aabb.Merge( localBounds );
				foreach ( Vector3 corner in localBounds.Corners )
				{
					boundingRadius = Utility.Max( boundingRadius, corner.Length );
				}
			}