private static void ReadMeshes(FSHP fshp, Shape shp) { fshp.lodMeshes.Clear(); foreach (Mesh msh in shp.Meshes) { uint FaceCount = msh.IndexCount; uint[] indicesArray = msh.GetIndices().ToArray(); FSHP.LOD_Mesh lod = new FSHP.LOD_Mesh(); foreach (SubMesh subMsh in msh.SubMeshes) { FSHP.LOD_Mesh.SubMesh sub = new FSHP.LOD_Mesh.SubMesh(); sub.size = subMsh.Count; sub.offset = subMsh.Offset; lod.subMeshes.Add(sub); } lod.IndexFormat = (STIndexFormat)msh.IndexFormat; lod.PrimitiveType = (STPolygonType)msh.PrimitiveType; lod.FirstVertex = msh.FirstVertex; for (int face = 0; face < FaceCount; face++) { lod.faces.Add((int)indicesArray[face] + (int)msh.FirstVertex); } fshp.lodMeshes.Add(lod); } }
private static void ReadMeshes(FSHP fshp, Shape shp) { fshp.lodMeshes.Clear(); foreach (Mesh msh in shp.Meshes) { uint FaceCount = msh.IndexCount; uint[] indicesArray = msh.GetIndices().ToArray(); FSHP.LOD_Mesh lod = new FSHP.LOD_Mesh(); foreach (SubMesh subMsh in msh.SubMeshes) { FSHP.LOD_Mesh.SubMesh sub = new FSHP.LOD_Mesh.SubMesh(); sub.size = subMsh.Count; sub.offset = subMsh.Offset; lod.subMeshes.Add(sub); } lod.IndexFormat = (STIndexFormat)msh.IndexFormat; switch (msh.PrimitiveType) { case GX2PrimitiveType.Triangles: lod.PrimativeType = STPrimitiveType.Triangles; break; case GX2PrimitiveType.TriangleStrip: lod.PrimativeType = STPrimitiveType.TrangleStrips; break; case GX2PrimitiveType.Quads: lod.PrimativeType = STPrimitiveType.Quads; break; case GX2PrimitiveType.Lines: lod.PrimativeType = STPrimitiveType.Lines; break; case GX2PrimitiveType.LineStrip: lod.PrimativeType = STPrimitiveType.LineStrips; break; case GX2PrimitiveType.Points: lod.PrimativeType = STPrimitiveType.Points; break; } lod.FirstVertex = msh.FirstVertex; for (int face = 0; face < FaceCount; face++) { lod.faces.Add((int)indicesArray[face] + (int)msh.FirstVertex); } fshp.lodMeshes.Add(lod); } }
private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e) { if (listViewCustom1.SelectedIndices.Count > 0 && activeMesh != null) { int index = listViewCustom1.SelectedIndices[0]; activeSubMesh = activeMesh.subMeshes[index]; FaceCountUD.Value = activeSubMesh.size; offsetUD.Value = activeSubMesh.offset; int MeshIndex = activeShape.lodMeshes.IndexOf(activeMesh); int boundIndex = MeshIndex; centerXUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Center.X; centerYUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Center.Y; centerZUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Center.Z; extendXUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Extend.X; extendYUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Extend.Y; extendZUD.Value = (decimal)activeShape.boundingBoxes[boundIndex].Extend.Z; if (activeShape.boundingRadius.Count > 1) { radiusUD.Value = (decimal)activeShape.boundingRadius[MeshIndex]; } else { radiusUD.Value = (decimal)activeShape.boundingRadius[0]; } } else { activeSubMesh = null; FaceCountUD.Value = 0; offsetUD.Value = 0; centerXUD.Value = 0; centerYUD.Value = 0; centerZUD.Value = 0; extendXUD.Value = 0; extendYUD.Value = 0; extendZUD.Value = 0; radiusUD.Value = 0; } }