Skip to content

Commit 141d821

Browse files
author
Benoit Hudson
committed
Publicizing the ModelExporter API.
Adding unit tests while I'm at it. The goal is to make the API usable to Karl.
1 parent ef2f064 commit 141d821

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ public static ModelExporter Create ()
8585
/// </summary>
8686
const string UniqueNameFormat = "{0}_{1}";
8787

88+
/// <summary>
89+
/// Gets the version number of the FbxExporters plugin from the readme.
90+
/// </summary>
8891
public static string GetVersionFromReadme()
8992
{
9093
if (string.IsNullOrEmpty (ReadmeRelativePath)) {
@@ -119,10 +122,10 @@ public static string GetVersionFromReadme()
119122
/// return layer for mesh
120123
/// </summary>
121124
///
122-
private FbxLayer GetLayer(FbxMesh fbxMesh, int layer = 0 /* default layer */)
125+
public static FbxLayer GetOrCreateLayer(FbxMesh fbxMesh, int layer = 0 /* default layer */)
123126
{
124127
FbxLayer fbxLayer = fbxMesh.GetLayer (layer);
125-
if (fbxLayer == null) {
128+
while (fbxLayer == null) {
126129
fbxMesh.CreateLayer ();
127130
fbxLayer = fbxMesh.GetLayer (layer);
128131
}
@@ -135,7 +138,7 @@ public static string GetVersionFromReadme()
135138
public void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unmergedTriangles)
136139
{
137140
// Set the normals on Layer 0.
138-
FbxLayer fbxLayer = GetLayer(fbxMesh);
141+
FbxLayer fbxLayer = GetOrCreateLayer(fbxMesh);
139142

140143
using (var fbxLayerElement = FbxLayerElementNormal.Create (fbxMesh, "Normals")) {
141144
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
@@ -228,7 +231,7 @@ public void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unm
228231
/// <param name="fbxMesh">Fbx mesh.</param>
229232
/// <param name="mesh">Mesh.</param>
230233
/// <param name="unmergedTriangles">Unmerged triangles.</param>
231-
protected void ExportUVs(FbxMesh fbxMesh, MeshInfo mesh, int[] unmergedTriangles)
234+
protected static void ExportUVs(FbxMesh fbxMesh, MeshInfo mesh, int[] unmergedTriangles)
232235
{
233236
Vector2[][] uvs = new Vector2[][] {
234237
mesh.UV,
@@ -243,7 +246,7 @@ protected void ExportUVs(FbxMesh fbxMesh, MeshInfo mesh, int[] unmergedTriangles
243246
continue; // don't have these UV's, so skip
244247
}
245248

246-
FbxLayer fbxLayer = GetLayer (fbxMesh, k);
249+
FbxLayer fbxLayer = GetOrCreateLayer (fbxMesh, k);
247250
using (var fbxLayerElement = FbxLayerElementUV.Create (fbxMesh, "UVSet" + i))
248251
{
249252
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
@@ -276,7 +279,7 @@ protected void ExportUVs(FbxMesh fbxMesh, MeshInfo mesh, int[] unmergedTriangles
276279
/// Helper for ExportComponentAttributes()
277280
/// </summary>
278281
/// <returns>The right-handed FbxVector4.</returns>
279-
private FbxVector4 CreateRightHandedFbxVector4(Vector3 leftHandedVector)
282+
private static FbxVector4 CreateRightHandedFbxVector4(Vector3 leftHandedVector)
280283
{
281284
// negating the x component of the vector converts it from left to right handed coordinates
282285
return new FbxVector4 (

Assets/FbxExporters/Editor/UnitTests/ModelExporterTest.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,29 @@
1010
using UnityEngine.TestTools;
1111
using NUnit.Framework;
1212
using System.Collections.Generic;
13+
using Unity.FbxSdk;
14+
using FbxExporters.Editor;
1315

1416
namespace FbxExporters.UnitTests
1517
{
1618
public class ModelExporterTest : ExporterTestBase
1719
{
20+
[Test]
21+
public void TestBasics ()
22+
{
23+
Assert.That(!string.IsNullOrEmpty(ModelExporter.GetVersionFromReadme()));
24+
25+
using (var fbxManager = FbxManager.Create()) {
26+
var fbxMesh = FbxMesh.Create(fbxManager, "name");
27+
var layer0 = ModelExporter.GetOrCreateLayer(fbxMesh);
28+
Assert.That(layer0, Is.Not.Null);
29+
Assert.That(ModelExporter.GetOrCreateLayer(fbxMesh), Is.EqualTo(layer0));
30+
var layer5 = ModelExporter.GetOrCreateLayer(fbxMesh, layer: 5);
31+
Assert.That(layer5, Is.Not.Null);
32+
Assert.That(layer5, Is.Not.EqualTo(layer0));
33+
}
34+
}
35+
1836
[Test]
1937
public void TestFindCenter ()
2038
{

0 commit comments

Comments
 (0)