public MeshContent Process() { newMesh = new MeshContent(); newMesh.Name = splitter.mesh.Name + splitter.currentIndex.ToString(); SortedDictionary <string, object> faceBones = new SortedDictionary <string, object>(); GeometryContent newGeom = new GeometryContent(); while (index < geom.Indices.Count - 1) { int[] faceIndices = new int[] { geom.Indices[index], geom.Indices[index + 1], geom.Indices[index + 2] }; for (int i = 0; i < 3; i++) { BoneWeightCollection weightCollection = weightChannel[ geom.Indices[index + i]]; foreach (BoneWeight weight in weightCollection) { if (!meshBones.ContainsKey(weight.BoneName) && !faceBones.ContainsKey(weight.BoneName)) { faceBones.Add(weight.BoneName, null); } } } if (meshBones.Count + faceBones.Count > splitter.maxBones) { faceBones.Clear(); vertexEndIndex = index; break; } foreach (string s in faceBones.Keys) { meshBones.Add(s, null); } faceBones.Clear(); for (int i = 0; i < 3; i++) { if (oldToNewDict.ContainsKey(faceIndices[i])) { } else { int newIndex = newMesh.Positions.Count; newMesh.Positions.Add(geom.Vertices.Positions[faceIndices[i]]); oldToNewDict.Add(faceIndices[i], newIndex); newGeom.Vertices.Add(newIndex); } newGeom.Indices.Add(oldToNewDict[faceIndices[i]]); } index += 3; vertexEndIndex = index; } newMesh.Geometry.Add(newGeom); Finish(); return(newMesh); }