Add option to export lm2 dark moon models
This commit is contained in:
parent
1fb66d4490
commit
5582f31c38
@ -12,6 +12,55 @@ using OpenTK;
|
||||
|
||||
namespace FirstPlugin.LuigisMansion.DarkMoon
|
||||
{
|
||||
public class LM2_ModelFolder : TreeNodeCustom, IContextMenuNode
|
||||
{
|
||||
public LM2_DICT DataDictionary;
|
||||
|
||||
public LM2_ModelFolder(LM2_DICT dict)
|
||||
{
|
||||
DataDictionary = dict;
|
||||
Text = "Models";
|
||||
}
|
||||
|
||||
public ToolStripItem[] GetContextMenuItems()
|
||||
{
|
||||
List<ToolStripItem> Items = new List<ToolStripItem>();
|
||||
Items.Add(new ToolStripMenuItem("Export", null, ExportModelAction, Keys.Control | Keys.E));
|
||||
return Items.ToArray();
|
||||
}
|
||||
|
||||
private void ExportModelAction(object sender, EventArgs args)
|
||||
{
|
||||
ExportModel();
|
||||
}
|
||||
|
||||
private void ExportModel()
|
||||
{
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.Filter = "Supported Formats|*.dae;";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
ExportModel(sfd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void ExportModel(string FileName)
|
||||
{
|
||||
AssimpSaver assimp = new AssimpSaver();
|
||||
ExportModelSettings settings = new ExportModelSettings();
|
||||
|
||||
List<STGenericMaterial> Materials = new List<STGenericMaterial>();
|
||||
// foreach (var msh in DataDictionary.Renderer.Meshes)
|
||||
// Materials.Add(msh.GetMaterial());
|
||||
|
||||
var model = new STGenericModel();
|
||||
model.Materials = Materials;
|
||||
model.Objects = DataDictionary.Renderer.Meshes;
|
||||
|
||||
assimp.SaveFromModel(model, FileName, new List<STGenericTexture>(), new STSkeleton());
|
||||
}
|
||||
}
|
||||
|
||||
public class LM2_Model : TreeNodeCustom
|
||||
{
|
||||
public LM2_DICT DataDictionary;
|
||||
|
@ -210,7 +210,6 @@ namespace FirstPlugin
|
||||
long pos = reader.Position;
|
||||
|
||||
uint entryCount = reader.ReadUInt32();
|
||||
Console.WriteLine($"entryCount {entryCount}");
|
||||
|
||||
uint[] Offsets = reader.ReadUInt32s((int)entryCount);
|
||||
for (int i =0; i < entryCount; i++)
|
||||
|
@ -87,7 +87,7 @@ namespace Toolbox.Library
|
||||
int MeshIndex = 0;
|
||||
foreach (var obj in Meshes)
|
||||
{
|
||||
var mesh = SaveMesh((STGenericObject)obj, MeshIndex++, skeleton, NodeArray);
|
||||
var mesh = SaveMesh((STGenericObject)obj, scene, MeshIndex++, skeleton, NodeArray);
|
||||
scene.Meshes.Add(mesh);
|
||||
}
|
||||
Node geomNode = new Node(Path.GetFileNameWithoutExtension(FileName), scene.RootNode);
|
||||
@ -102,11 +102,15 @@ namespace Toolbox.Library
|
||||
scene.RootNode.Children.Add(geomNode);
|
||||
}
|
||||
|
||||
private Mesh SaveMesh(STGenericObject genericObj, int index, STSkeleton skeleton, List<int> NodeArray)
|
||||
private Mesh SaveMesh(STGenericObject genericObj, Scene scene, int index, STSkeleton skeleton, List<int> NodeArray)
|
||||
{
|
||||
//Assimp is weird so use mesh_# for the name. We'll change it back after save
|
||||
Mesh mesh = new Mesh($"mesh_{ index }", PrimitiveType.Triangle);
|
||||
mesh.MaterialIndex = genericObj.MaterialIndex;
|
||||
|
||||
if (genericObj.MaterialIndex < scene.MaterialCount && genericObj.MaterialIndex > 0)
|
||||
mesh.MaterialIndex = genericObj.MaterialIndex;
|
||||
else
|
||||
mesh.MaterialIndex = 0;
|
||||
|
||||
List<Vector3D> textureCoords0 = new List<Vector3D>();
|
||||
List<Vector3D> textureCoords1 = new List<Vector3D>();
|
||||
@ -527,6 +531,14 @@ namespace Toolbox.Library
|
||||
}
|
||||
}
|
||||
|
||||
if (Materials.Count == 0)
|
||||
{
|
||||
Material material = new Material();
|
||||
material.Name = "New Material";
|
||||
scene.Materials.Add(material);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var mat in Materials)
|
||||
{
|
||||
var genericMat = (STGenericMaterial)mat;
|
||||
@ -585,7 +597,7 @@ namespace Toolbox.Library
|
||||
Scene scene = new Scene();
|
||||
scene.RootNode = new Node("Root");
|
||||
|
||||
var mesh = SaveMesh(genericObject,0, null, null);
|
||||
var mesh = SaveMesh(genericObject, scene, 0, null, null);
|
||||
mesh.MaterialIndex = 0;
|
||||
scene.Meshes.Add(mesh);
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user