Skip to content

Commit

Permalink
improved model export
Browse files Browse the repository at this point in the history
  • Loading branch information
Perfare committed Jul 15, 2019
1 parent e001dff commit 50c17c2
Show file tree
Hide file tree
Showing 5 changed files with 294 additions and 395 deletions.
51 changes: 20 additions & 31 deletions AssetStudio/IImported.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

Expand Down Expand Up @@ -29,6 +28,21 @@ public class ImportedFrame

public int Count => children.Count;

public string Path
{
get
{
var frame = this;
var path = frame.Name;
while (frame.Parent != null)
{
frame = frame.Parent;
path = frame.Name + "/" + path;
}
return path;
}
}

public ImportedFrame(int childrenCount = 0)
{
children = new List<ImportedFrame>(childrenCount);
Expand All @@ -48,19 +62,15 @@ public void Remove(ImportedFrame frame)

public ImportedFrame FindFrameByPath(string path)
{
var splitPath = path.Split('/');
if (Name != splitPath[0])
throw new Exception($"Couldn't find path {path}");
var curFrame = this;
for (int i = 1; i < splitPath.Length; i++)
var name = path.Substring(path.LastIndexOf('/') + 1);
foreach (var frame in FindChilds(name))
{
curFrame = curFrame.FindChild(splitPath[i], false);
if (curFrame == null)
if (frame.Path.EndsWith(path, StringComparison.Ordinal))
{
throw new Exception($"Couldn't find path {path}");
return frame;
}
}
return curFrame;
return null;
}

public ImportedFrame FindFrame(string name)
Expand Down Expand Up @@ -265,27 +275,6 @@ public static ImportedMesh FindMesh(string path, List<ImportedMesh> importedMesh
return null;
}

public static ImportedMesh FindMesh(ImportedFrame frame, List<ImportedMesh> importedMeshList)
{
var framePath = frame.Name;
var root = frame;
while (root.Parent != null)
{
root = root.Parent;
framePath = root.Name + "/" + framePath;
}

foreach (var mesh in importedMeshList)
{
if (mesh.Path == framePath)
{
return mesh;
}
}

return null;
}

public static ImportedMaterial FindMaterial(string name, List<ImportedMaterial> importedMats)
{
foreach (var mat in importedMats)
Expand Down
2 changes: 0 additions & 2 deletions AssetStudioFBX/AssetStudioFBX.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#include <fbxsdk.h>
#include <fbxsdk/fileio/fbxiosettings.h>
#include "AssetStudioFBX.h"

namespace AssetStudio
Expand Down
18 changes: 9 additions & 9 deletions AssetStudioFBX/AssetStudioFBX.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#pragma once

#include <fbxsdk.h>

#ifdef IOS_REF
#undef IOS_REF
#define IOS_REF (*(pSdkManager->GetIOSettings()))
Expand Down Expand Up @@ -48,39 +50,37 @@ namespace AssetStudio {
{
public:
static void Export(String^ path, IImported^ imported, bool eulerFilter, float filterPrecision, bool allFrames, bool allBones, bool skins, float boneSize, float scaleFactor, bool flatInbetween, int versionIndex, bool isAscii);
static void ExportMorph(String^ path, IImported^ imported, bool morphMask, bool flatInbetween, bool skins, float boneSize, float scaleFactor, int versionIndex, bool isAscii);

private:
HashSet<String^>^ frameNames;
bool exportSkins;
float boneSize;

IImported^ imported;
HashSet<String^>^ framePaths;
Dictionary<ImportedFrame^, size_t>^ frameToNode;
List<ImportedFrame^>^ meshFrames;

char* cDest;
FbxManager* pSdkManager;
FbxScene* pScene;
FbxExporter* pExporter;
FbxArray<FbxSurfacePhong*>* pMaterials;
FbxArray<FbxFileTexture*>* pTextures;
FbxArray<FbxNode*>* pMeshNodes;
FbxPose* pBindPose;

Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, float scaleFactor, int versionIndex, bool isAscii, bool normals);
Exporter(String^ path, IImported^ imported, bool allFrames, bool allBones, bool skins, float boneSize, float scaleFactor, int versionIndex, bool isAscii);
~Exporter();

void Exporter::LinkTexture(ImportedMaterialTexture^ texture, FbxFileTexture* pTexture, FbxProperty& prop);
void SetJointsNode(FbxNode* pNode, HashSet<String^>^ boneNames, bool allBones);
void SetJointsNode(ImportedFrame^ frame, HashSet<String^>^ bonePaths, bool allBones);
HashSet<String^>^ SearchHierarchy();
void SearchHierarchy(ImportedFrame^ frame, HashSet<String^>^ exportFrames);
void SetJointsFromImportedMeshes(bool allBones);
void ExportFrame(FbxNode* pParentNode, ImportedFrame^ frame);
void ExportMesh(FbxNode* pFrameNode, ImportedMesh^ meshList, bool normals);
FbxNode* FindNodeByPath(String ^ path);
void ExportMesh(FbxNode* pFrameNode, ImportedMesh^ meshList);
FbxFileTexture* ExportTexture(ImportedTexture^ matTex);
void ExportAnimations(bool eulerFilter, float filterValue, bool flatInbetween);
void ExportKeyframedAnimation(ImportedKeyframedAnimation^ parser, FbxString& kTakeName, FbxAnimCurveFilterUnroll* eulerFilter, float filterPrecision, bool flatInbetween);
void ExportMorphs(IImported^ imported, bool morphMask, bool flatInbetween);
void ExportMorphs(bool morphMask, bool flatInbetween);
};
};
}
Loading

0 comments on commit 50c17c2

Please sign in to comment.