fna-workbench

fna-workbench Git Source Tree


Root/src/Graphics/ModelMeshCollection.cs

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

Archive Download this file

Branches

Number of commits:
Page rendered in 0.23143s using 11 queries.