private void ViewAllModelInfo() { var sb = new StringBuilder(); sb.AppendLine($"Model: {ModelName}"); sb.AppendLine(); sb.AppendLine("Submeshes:"); for (int i = 0; i < FlverSubmeshes.Count; i++) { var sm = FlverSubmeshes[i]; sb.AppendLine($" {(sm.GetName() ?? $"<Unnamed Submesh #{(i + 1)}>")}"); if (sm.Material == null) { continue; } sb.AppendLine($" {sm.Material.Name}"); sb.AppendLine($" {sm.Material.MTDName}"); foreach (var p in sm.Material.Parameters) { sb.AppendLine($" {p.ToString()}"); } } sb.AppendLine(); sb.AppendLine("Bones:"); for (int i = 0; i < BoneNames.Count; i++) { sb.Append(" "); for (int j = 0; j < BoneIndents[i]; j++) { sb.Append(" "); } sb.AppendLine("-" + BoneNames[i]); } sb.AppendLine(); sb.Append("Included dummy IDs:"); int h = 9000; foreach (var dmy in DummyIDs) { if (h >= 8) { h = 0; sb.AppendLine(); sb.Append(" "); } if (h > 0) { sb.Append(", "); } sb.Append(dmy); h++; } sb.AppendLine(); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(); var infoWindow = new ModelListInfoPopup(); infoWindow.TextBoxInfo.Text = sb.ToString(); infoWindow.ShowDialog(); }
private void ViewAllModelInfo() { var sb = new StringBuilder(); var faceSetFlagValues = (FlverFaceSetFlags[])Enum.GetValues(typeof(FlverFaceSetFlags)); sb.AppendLine($"Model: {ModelName}"); sb.AppendLine(); sb.AppendLine("Submeshes:"); for (int i = 0; i < FlverSubmeshes.Count; i++) { var sm = FlverSubmeshes[i]; sb.AppendLine($" {(sm.GetName() ?? $"<Unnamed Submesh #{(i + 1)}>")}"); if (sm.Material == null) { continue; } sb.AppendLine($" {sm.Material.Name}"); sb.AppendLine($" {sm.Material.MTDName}"); foreach (var p in sm.Material.Parameters) { sb.AppendLine($" {p.ToString()}"); } sb.AppendLine($" {sm.FaceSets.Count} Face Sets. Flags of Face Sets:"); for (int j = 0; j < sm.FaceSets.Count; j++) { List <FlverFaceSetFlags> flagsThisThingHas = new List <FlverFaceSetFlags>(); foreach (var flag in faceSetFlagValues) { if ((sm.FaceSets[j].Flags & flag) != 0) { flagsThisThingHas.Add(flag); } } sb.AppendLine($" Face Set {(j + 1)}: {string.Join(", ", flagsThisThingHas)}"); } } sb.AppendLine(); sb.AppendLine("Bones:"); for (int i = 0; i < BoneNames.Count; i++) { sb.Append(" "); for (int j = 0; j < BoneIndents[i]; j++) { sb.Append(" "); } sb.AppendLine("-" + BoneNames[i] + $"[POS<{ActualBones[i].Translation.X}, {ActualBones[i].Translation.Y}, {ActualBones[i].Translation.Z}> " + $"ROT<{(ActualBones[i].EulerRadian.X / Math.PI * 180)}°, {(ActualBones[i].EulerRadian.Y / Math.PI * 180)}°, {(ActualBones[i].EulerRadian.Z / Math.PI * 180)}°> " + $"SCL<{ActualBones[i].Scale.X}, {ActualBones[i].Scale.Y}, {ActualBones[i].Scale.Z}>]" + (ActualBones[i].BoundingBoxMin != null ? $"BBm<{ActualBones[i].BoundingBoxMin.X}, {ActualBones[i].BoundingBoxMin.Y}, {ActualBones[i].BoundingBoxMin.Z}>" : "BBm<NULL>") + (ActualBones[i].BoundingBoxMax != null ? $"BBM<{ActualBones[i].BoundingBoxMax.X}, {ActualBones[i].BoundingBoxMax.Y}, {ActualBones[i].BoundingBoxMax.Z}>" : "BBM<NULL>")); } sb.AppendLine(); sb.AppendLine("Dummies:"); foreach (var dmy in Dummies) { sb.AppendLine($" {dmy.TypeID} [ParentNode:\"{(dmy.ParentBoneIndex >= 0 ? BoneNames[dmy.ParentBoneIndex] : "<None>")}\" " + $"FollowBone:\"{(dmy.SomeSortOfParentIndex >= 0 ? BoneNames[dmy.SomeSortOfParentIndex] : "<None>")}\" " + $"POS:<{dmy.Position.X}, {dmy.Position.Y}, {dmy.Position.Z}>" + $"UP:<{dmy.Row2.X}, {dmy.Row2.Y}, {dmy.Row2.Z}>" + $"FWD:<{dmy.Row3.X}, {dmy.Row3.Y}, {dmy.Row3.Z}>]"); } sb.AppendLine(); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(); var infoWindow = new ModelListInfoPopup(); infoWindow.TextBoxInfo.Text = sb.ToString(); infoWindow.ShowDialog(); }