private static PMXFormat.MorphList ConvertMorphList(PMDFormat pmd) { PMXFormat.MorphList result = new PMXFormat.MorphList(); //頂点インデックス用辞書の作成 PMDFormat.SkinData pmd_skin_data_base = pmd.skin_list.skin_data.Where(x => 0 == x.skin_type).First(); Dictionary <uint, uint> morph_vertex_index_dictionary = new Dictionary <uint, uint>(pmd_skin_data_base.skin_vert_data.Length); for (uint i = 0, i_max = (uint)pmd_skin_data_base.skin_vert_data.Length; i < i_max; ++i) { morph_vertex_index_dictionary.Add(i, pmd_skin_data_base.skin_vert_data[i].skin_vert_index); } //base以外の変換 result.morph_data = new PMXFormat.MorphData[pmd.skin_list.skin_data.Where(x => 0 != x.skin_type).Count()]; //base分を除外 int morph_data_count = 0; for (int i = 0, i_max = pmd.skin_list.skin_data.Length; i < i_max; ++i) { if (0 != pmd.skin_list.skin_data[i].skin_type) { //base以外なら string eg_skin_name = (((null != pmd.eg_skin_name_list) && (1 <= i))? pmd.eg_skin_name_list.skin_name_eg[i - 1]: null); result.morph_data[morph_data_count++] = ConvertMorphData(pmd.skin_list.skin_data[i], eg_skin_name, morph_vertex_index_dictionary); } } return(result); }
private static PMXFormat.MorphData ConvertMorphData(PMDFormat.SkinData pmd_skin, string pmd_eg_skin_name, Dictionary <uint, uint> morph_vertex_index_dictionary) { PMXFormat.MorphData result = new PMXFormat.MorphData(); result.morph_name = pmd_skin.skin_name; result.morph_english_name = pmd_eg_skin_name; result.handle_panel = (PMXFormat.MorphData.Panel)pmd_skin.skin_type; result.morph_type = PMXFormat.MorphData.MorphType.Vertex; result.morph_offset = pmd_skin.skin_vert_data.Select(x => ConvertVertexMorphOffset(x, morph_vertex_index_dictionary)).ToArray(); return(result); }
private PMDFormat.SkinData ReadSkinData() { PMDFormat.SkinData result = new PMDFormat.SkinData(); result.skin_name = ConvertByteToString(binary_reader_.ReadBytes(20), ""); result.skin_vert_count = binary_reader_.ReadUInt32(); result.skin_type = binary_reader_.ReadByte(); result.skin_vert_data = new PMDFormat.SkinVertexData[result.skin_vert_count]; for (int i = 0; i < result.skin_vert_count; i++) { result.skin_vert_data[i] = ReadSkinVertexData(); } return(result); }
private PMDFormat.SkinData ReadSkinData() { PMDFormat.SkinData result = new PMDFormat.SkinData(); result.skin_name = ConvertByteToString(binary_reader_.ReadBytes(20), ""); result.skin_vert_count = binary_reader_.ReadUInt32(); result.skin_type = binary_reader_.ReadByte(); result.skin_vert_data = new PMDFormat.SkinVertexData[result.skin_vert_count]; for (int i = 0; i < result.skin_vert_count; i++) { result.skin_vert_data[i] = ReadSkinVertexData(); } return result; }