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);
 }
예제 #4
0
	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;
	}