#region License
#endregion
#region Using Statements
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Collections.ObjectModel;
#endregion
namespace
Microsoft.Xna.Framework.Graphics
{
/// <summary>
/// Represents a collection of ModelMesh objects.
/// </summary>
public
sealed
class
ModelMeshCollection : ReadOnlyCollection<ModelMesh>
{
#region Public Properties
/// <summary>
/// Retrieves a ModelMesh from the collection, given the name of the mesh.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to retrieve.
/// </param>
public
ModelMesh
this
[
string
meshName]
{
get
{
ModelMesh ret;
if
(!
this
.TryGetValue(meshName,
out
ret))
{
throw
new
KeyNotFoundException();
}
return
ret;
}
}
#endregion
#region Internal Constructor
internal
ModelMeshCollection(IList<ModelMesh> list) :
base
(list)
{
}
#endregion
#region Public Methods
/// <summary>
/// Finds a mesh with a given name if it exists in the collection.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to find.
/// </param>
/// <param name="value">
/// [OutAttribute] The mesh named meshName, if found.
/// </param>
public
bool
TryGetValue(
string
meshName,
out
ModelMesh value)
{
if
(
string
.IsNullOrEmpty(meshName))
{
throw
new
ArgumentNullException(
"meshName"
);
}
foreach
(ModelMesh mesh
in
this
)
{
if
(
string
.Compare(mesh.Name, meshName, StringComparison.Ordinal) == 0)
{
value = mesh;
return
true
;
}
}
value =
null
;
return
false
;
}
#endregion
#region Enumerator
/// <summary>
/// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.
/// </summary>
/// <returns></returns>
public
new
Enumerator GetEnumerator()
{
return
new
Enumerator(
this
);
}
/// <summary>
/// Provides the ability to iterate through the bones in an ModelMeshCollection.
/// </summary>
public
struct
Enumerator : IEnumerator<ModelMesh>
{
private
readonly
ModelMeshCollection collection;
private
int
position;
internal
Enumerator(ModelMeshCollection collection)
{
this
.collection = collection;
position = -1;
}
/// <summary>
/// Gets the current element in the ModelMeshCollection.
/// </summary>
public
ModelMesh Current
{
get
{
return
collection[position];
}
}
/// <summary>
/// Advances the enumerator to the next element of the ModelMeshCollection.
/// </summary>
public
bool
MoveNext()
{
position += 1;
return
(position < collection.Count);
}
/// <summary>
/// Immediately releases the unmanaged resources used by this object.
/// </summary>
public
void
Dispose()
{
}
object
IEnumerator.Current
{
get
{
return
collection[position];
}
}
void
IEnumerator.Reset()
{
position = -1;
}
}
#endregion
}
}