Root/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | #region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2016 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #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 } } |