private static PMXFormat.Bone ConvertBone(PMDFormat pmd, int bone_index)
    {
        PMXFormat.Bone result   = new PMXFormat.Bone();
        PMDFormat.Bone pmd_bone = pmd.bone_list.bone[bone_index];

        result.bone_name         = pmd_bone.bone_name;
        result.bone_english_name = ((null != pmd.eg_bone_name_list)? pmd.eg_bone_name_list.bone_name_eg[bone_index]: null);
        result.bone_position     = pmd_bone.bone_head_pos;
        result.parent_bone_index = ((ushort.MaxValue == pmd_bone.parent_bone_index)? uint.MaxValue: (uint)pmd_bone.parent_bone_index);
        result.transform_level   = 0;
        switch (pmd_bone.bone_type)
        {
        case 0:         //回転
            result.bone_flag = PMXFormat.Bone.Flag.Movable | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate;
            break;

        case 1:         //回転と移動
            result.bone_flag = PMXFormat.Bone.Flag.Movable | PMXFormat.Bone.Flag.Rotatable | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate;
            break;

        case 2:         //IK
            result.bone_flag = PMXFormat.Bone.Flag.IkFlag | PMXFormat.Bone.Flag.DisplayFlag | PMXFormat.Bone.Flag.CanOperate;
            break;

        case 3:         //不明
            goto default;

        case 4:         //IK影響下
            goto default;

        case 5:           //回転影響下
            goto default; //付与親に変換しないといけないのかも

        case 6:           //IK接続先
            goto default;

        case 7:         //非表示
            goto default;

        case 8:         //捻り
            goto default;

        case 9:         //回転運動
            goto default;

        default:
            result.bone_flag = new PMXFormat.Bone.Flag();
            break;
        }
        result.position_offset         = Vector3.zero;
        result.connection_index        = 0;
        result.additional_parent_index = 0;
        result.additional_rate         = 0.0f;
        result.axis_vector             = Vector3.zero;
        result.x_axis_vector           = Vector3.zero;
        result.z_axis_vector           = Vector3.zero;
        result.key_value = 0;
        result.ik_data   = ConvertIKData(pmd.ik_list.ik_data.Where(x => x.ik_bone_index == bone_index).FirstOrDefault());
        return(result);
    }
    private static PMDFormat.Bone ConvertBone(PMXFormat pmx, int bone_index)
    {
        PMDFormat.Bone result   = new PMDFormat.Bone();
        PMXFormat.Bone pmx_bone = pmx.bone_list.bone[bone_index];
        result.bone_name           = pmx_bone.bone_name;
        result.parent_bone_index   = (ushort)((uint.MaxValue == pmx_bone.parent_bone_index)? ushort.MaxValue: pmx_bone.parent_bone_index);
        result.tail_pos_bone_index = ushort.MaxValue;
#if false
        //PMD側 0:回転 1:回転と移動 2:IK 3:不明 4:IK影響下 5:回転影響下 6:IK接続先 7:非表示 8:捻り 9:回転運動
        result.bone_type = pmx_bone.bone_flag;
 private PMDFormat.Bone ReadBone()
 {
     PMDFormat.Bone result = new PMDFormat.Bone();
     result.bone_name            = ConvertByteToString(binary_reader_.ReadBytes(20), "");
     result.parent_bone_index    = binary_reader_.ReadUInt16();
     result.tail_pos_bone_index  = binary_reader_.ReadUInt16();
     result.bone_type            = binary_reader_.ReadByte();
     result.ik_parent_bone_index = binary_reader_.ReadUInt16();
     result.bone_head_pos        = ReadSinglesToVector3(binary_reader_);
     return(result);
 }
	private PMDFormat.Bone ReadBone() {
		PMDFormat.Bone result = new PMDFormat.Bone();
		result.bone_name = ConvertByteToString(binary_reader_.ReadBytes(20), "");
		result.parent_bone_index = binary_reader_.ReadUInt16();
		result.tail_pos_bone_index = binary_reader_.ReadUInt16();
		result.bone_type = binary_reader_.ReadByte();
		result.ik_parent_bone_index = binary_reader_.ReadUInt16();
		result.bone_head_pos = ReadSinglesToVector3(binary_reader_);
		return result;
	}
	private static PMDFormat.Bone ConvertBone(PMXFormat pmx, int bone_index) {
		PMDFormat.Bone result = new PMDFormat.Bone();
		PMXFormat.Bone pmx_bone = pmx.bone_list.bone[bone_index];
		result.bone_name = pmx_bone.bone_name;
		result.parent_bone_index = (ushort)((uint.MaxValue == pmx_bone.parent_bone_index)? ushort.MaxValue: pmx_bone.parent_bone_index);
		result.tail_pos_bone_index = ushort.MaxValue;
#if false
		//PMD側 0:回転 1:回転と移動 2:IK 3:不明 4:IK影響下 5:回転影響下 6:IK接続先 7:非表示 8:捻り 9:回転運動
		result.bone_type = pmx_bone.bone_flag;