mirror of
https://github.com/XorTroll/EveryFileExplorer.git
synced 2024-11-26 19:30:26 +00:00
43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using LibEveryFileExplorer;
|
|
using LibEveryFileExplorer.Script;
|
|
using _3DS.NintendoWare.GFX;
|
|
using System.IO;
|
|
using CommonFiles;
|
|
|
|
namespace _3DS
|
|
{
|
|
public class N3DSPlugin : EFEPlugin
|
|
{
|
|
public override void OnLoad()
|
|
{
|
|
EFEScript.RegisterCommand("N3DS.NW4C.GFX.ToOBJ", (Action<String, int, String>)N3DS_NW4C_GFX_ToOBJ);
|
|
}
|
|
|
|
public static void N3DS_NW4C_GFX_ToOBJ(String BCMDLPath, int ModelIdx, String OBJPath)
|
|
{
|
|
CGFX c = new CGFX(File.ReadAllBytes(BCMDLPath));
|
|
if (c.Data.Models == null || c.Data.Models.Length <= ModelIdx) throw new Exception("Model does not exist in the specified CGFX file!");
|
|
CMDL Model = c.Data.Models[ModelIdx];
|
|
OBJ o = Model.ToOBJ();
|
|
o.MTLPath = Path.GetFileNameWithoutExtension(OBJPath) + ".mtl";
|
|
MTL m = Model.ToMTL(Path.GetFileNameWithoutExtension(OBJPath) + "_Tex");
|
|
byte[] d = o.Write();
|
|
byte[] d2 = m.Write();
|
|
File.Create(OBJPath).Close();
|
|
File.WriteAllBytes(OBJPath, d);
|
|
File.Create(Path.ChangeExtension(OBJPath, "mtl")).Close();
|
|
File.WriteAllBytes(Path.ChangeExtension(OBJPath, "mtl"), d2);
|
|
Directory.CreateDirectory(Path.GetDirectoryName(OBJPath) + "\\" + Path.GetFileNameWithoutExtension(OBJPath) + "_Tex");
|
|
foreach (var v in c.Data.Textures)
|
|
{
|
|
if (!(v is ImageTextureCtr)) continue;
|
|
((ImageTextureCtr)v).GetBitmap().Save(Path.GetDirectoryName(OBJPath) + "\\" + Path.GetFileNameWithoutExtension(OBJPath) + "_Tex\\" + v.Name + ".png");
|
|
}
|
|
}
|
|
}
|
|
}
|