public void LoadSkeletalMesh(int index) { try { DisableLODs(); skm = new SkeletalMesh(pcc, index); skmold = new SkeletalMeshOld(pcc, pcc.Exports[index].Data); hb1.ByteProvider = new DynamicByteProvider(pcc.Exports[index].Data); Preview3D.StatMesh = null; Preview3D.SkelMesh = skm; Preview3D.CamDistance = skm.Bounding.r * 2.0f; Preview3D.CamOffset = skm.Bounding.origin; treeView1.Nodes.Clear(); treeView1.Nodes.Add(skm.ToTree()); treeView1.Nodes[0].Expand(); lODToolStripMenuItem.Visible = true; lOD1ToolStripMenuItem.Enabled = true; lOD1ToolStripMenuItem.Checked = true; if (skm.LODModels.Count > 1) lOD2ToolStripMenuItem.Enabled = true; if (skm.LODModels.Count > 2) lOD3ToolStripMenuItem.Enabled = true; if (skm.LODModels.Count > 3) lOD4ToolStripMenuItem.Enabled = true; } catch (Exception) { } }
public override void handleUpdate(List<PackageUpdate> updates) { IEnumerable<PackageUpdate> relevantUpdates = updates.Where(x => x.change != PackageChange.Import && x.change != PackageChange.ImportAdd && x.change != PackageChange.Names); List<int> updatedExports = relevantUpdates.Select(x => x.index).ToList(); if (skm != null && updatedExports.Contains(skm.MyIndex)) { int index = skm.MyIndex; //loaded SkeletalMesh is no longer a SkeletalMesh if (pcc.getExport(index).ClassName != "SkeletalMesh") { skm = null; skmold = null; Preview3D.SkelMesh = null; treeView1.Nodes.Clear(); hb1.ByteProvider = new DynamicByteProvider(new List<byte>()); RefreshMeshList(); } else { LoadSkeletalMesh(index); } updatedExports.Remove(index); } else if (stm != null && updatedExports.Contains(stm.index)) { int index = stm.index; //loaded SkeletalMesh is no longer a SkeletalMesh if (pcc.getExport(index).ClassName != "StaticMesh") { stm = null; Preview3D.StatMesh = null; treeView1.Nodes.Clear(); hb1.ByteProvider = new DynamicByteProvider(new List<byte>()); RefreshMeshList(); } else { LoadStaticMesh(index); } updatedExports.Remove(index); } if (updatedExports.Intersect(Materials).Count() > 0) { RefreshMaterialList(); } else { foreach (var i in updatedExports) { string className = pcc.getExport(i).ClassName; if (className == "MaterialInstanceConstant" || className == "Material") { RefreshMaterialList(); break; } } } if (updatedExports.Intersect(Objects).Count() > 0) { RefreshMeshList(); } else { foreach (var i in updatedExports) { string className = pcc.getExport(i).ClassName; if (className == "SkeletalMesh" || className == "StaticMesh") { RefreshMeshList(); break; } } } }
private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e) { int n = listBox1.SelectedIndex; if (n == -1) return; lODToolStripMenuItem.Visible = false; UnCheckLODs(); stm = null; skm = null; skmold = null; Preview3D.SkelMesh = null; Preview3D.StatMesh = null; if (pcc.Exports[Objects[n].index].ClassName == "StaticMesh") LoadStaticMesh(Objects[n].index); if (pcc.Exports[Objects[n].index].ClassName == "SkeletalMesh") LoadSkeletalMesh(Objects[n].index); }
public void LoadSkeletalMesh(int index) { try { DisableLODs(); UnCheckLODs(); skm = new SkeletalMesh(pcc as ME3Package, index); skmold = new SkeletalMeshOld(pcc as ME3Package, index); hb1.ByteProvider = new DynamicByteProvider(pcc.Exports[index].Data); bool foundTex = false; try { for (int i = 0; i < skm.MatInsts.Count; i++) { for (int j = 0; j < skm.MatInsts[i].Textures.Count; j++) { if (skm.MatInsts[i].Textures[j].Desc.Contains("Diffuse")) { Preview3D.setTex(skm.MatInsts[i].Textures[j].Texture); foundTex = true; break; } } } } catch { } if (!foundTex) { Preview3D.setTex(); } Preview3D.StatMesh = null; Preview3D.SkelMesh = skm; Preview3D.CamDistance = skm.Bounding.r * 2.0f; Preview3D.CamOffset = skm.Bounding.origin; treeView1.BeginUpdate(); treeView1.Nodes.Clear(); treeView1.Nodes.Add(skm.ToTree()); treeView1.Nodes[0].Expand(); treeView1.EndUpdate(); lODToolStripMenuItem.Visible = true; lOD0ToolStripMenuItem.Enabled = true; lOD0ToolStripMenuItem.Checked = true; if (skm.LODModels.Count > 1) lOD1ToolStripMenuItem.Enabled = true; if (skm.LODModels.Count > 2) lOD2ToolStripMenuItem.Enabled = true; if (skm.LODModels.Count > 3) lOD3ToolStripMenuItem.Enabled = true; } catch { return; } }