Skip to content

Commit b286fb4

Browse files
committed
merge master
2 parents ac05b7e + ef2f064 commit b286fb4

File tree

6 files changed

+413
-187
lines changed

6 files changed

+413
-187
lines changed

Assets/FbxExporters/Editor/ConvertToModel.cs

Lines changed: 200 additions & 168 deletions
Large diffs are not rendered by default.

Assets/FbxExporters/Editor/FbxExportSettings.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ public static void SetRelativeSavePath(string newPath) {
207207
/// </summary>
208208
public static string ConvertToAssetRelativePath(string fullPathInAssets, bool requireSubdirectory = true)
209209
{
210+
if (!Path.IsPathRooted(fullPathInAssets)) {
211+
fullPathInAssets = Path.GetFullPath(fullPathInAssets);
212+
}
210213
var relativePath = GetRelativePath(Application.dataPath, fullPathInAssets);
211214
if (requireSubdirectory && relativePath.StartsWith("..")) {
212215
if (relativePath.Length == 2 || relativePath[2] == '/') {

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,8 @@ public enum TransformExportType { Local, Global, Reset };
897897
/// <summary>
898898
/// Export all the objects in the set.
899899
/// Return the number of objects in the set that we exported.
900+
///
901+
/// This refreshes the asset database.
900902
/// </summary>
901903
public int ExportAll (IEnumerable<UnityEngine.Object> unityExportSet)
902904
{
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
using UnityEngine;
2+
using UnityEditor;
3+
using UnityEngine.TestTools;
4+
using NUnit.Framework;
5+
using System.Collections.Generic;
6+
using System.IO;
7+
using FbxExporters.Editor;
8+
9+
namespace FbxExporters.UnitTests
10+
{
11+
public class ConvertToModelTest : ExporterTestBase
12+
{
13+
public static List<string> ChildNames(Transform a) {
14+
var names = new List<string>();
15+
foreach(Transform child in a) {
16+
names.Add(child.name);
17+
}
18+
return names;
19+
}
20+
21+
[Test]
22+
public void TestStaticHelpers()
23+
{
24+
// Test IncrementFileName
25+
{
26+
var tempPath = Path.GetTempPath ();
27+
var basename = Path.GetFileNameWithoutExtension (Path.GetRandomFileName ());
28+
29+
var filename1 = basename + " 1.fbx";
30+
var filename2 = Path.Combine(tempPath, basename + " 2.fbx");
31+
Assert.AreEqual (filename2, ConvertToModel.IncrementFileName (tempPath, filename1));
32+
33+
filename1 = basename + "1.fbx";
34+
filename2 = Path.Combine(tempPath, basename + "2.fbx");
35+
Assert.AreEqual (filename2, ConvertToModel.IncrementFileName (tempPath, filename1));
36+
37+
filename1 = basename + "k.fbx";
38+
filename2 = Path.Combine(tempPath, basename + "k 1.fbx");
39+
Assert.AreEqual (filename2, ConvertToModel.IncrementFileName (tempPath, filename1));
40+
}
41+
42+
// Test EnforceUniqueNames
43+
{
44+
var a = new GameObject("a");
45+
var b = new GameObject("b");
46+
var a1 = new GameObject("a");
47+
var a2 = new GameObject("a");
48+
ConvertToModel.EnforceUniqueNames(new GameObject[] { a, b, a1, a2 });
49+
Assert.AreEqual("a", a.name);
50+
Assert.AreEqual("b", b.name);
51+
Assert.AreEqual("a 1", a1.name);
52+
Assert.AreEqual("a 2", a2.name);
53+
}
54+
55+
// Test FixSiblingOrder
56+
{
57+
var a = new GameObject("a").transform;
58+
var b = new GameObject("a").transform;
59+
60+
var a1 = new GameObject("a1").transform;
61+
var a2 = new GameObject("a2").transform;
62+
var a3 = new GameObject("a3").transform;
63+
64+
var b1 = new GameObject("a1").transform;
65+
var b2 = new GameObject("a2").transform;
66+
var b3 = new GameObject("a3").transform;
67+
68+
a1.parent = a;
69+
a2.parent = a;
70+
a3.parent = a;
71+
72+
b3.parent = b;
73+
b1.parent = b;
74+
b2.parent = b;
75+
76+
// Assert same set, different order.
77+
Assert.That(ChildNames(b), Is.EquivalentTo(ChildNames(a)));
78+
Assert.That(ChildNames(b), Is.Not.EqualTo(ChildNames(a)));
79+
80+
// Fix the sibling order. Now we have same set, same order!
81+
ConvertToModel.FixSiblingOrder(a, b);
82+
Assert.That(ChildNames(b), Is.EquivalentTo(ChildNames(a)));
83+
Assert.That(ChildNames(b), Is.EqualTo(ChildNames(a)));
84+
}
85+
86+
// Test CopyComponents
87+
{
88+
var a = new GameObject("a");
89+
var b = new GameObject("b");
90+
a.AddComponent<BoxCollider>();
91+
a.transform.localPosition += new Vector3(1,2,3);
92+
Assert.IsFalse(b.GetComponent<BoxCollider>());
93+
Assert.AreEqual(Vector3.zero, b.transform.localPosition);
94+
ConvertToModel.CopyComponents(a, b);
95+
Assert.IsTrue(b.GetComponent<BoxCollider>());
96+
Assert.AreEqual(new Vector3(1,2,3), b.transform.localPosition);
97+
}
98+
99+
// Test SetupImportedGameObject. Very similar but recursive.
100+
{
101+
var a = new GameObject ("a");
102+
var a1 = new GameObject ("AA");
103+
var a2 = new GameObject ("BB");
104+
a2.transform.parent = a.transform;
105+
a1.transform.parent = a.transform; // out of alpha order!
106+
var b = new GameObject ("b");
107+
var b1 = new GameObject ("AA");
108+
var b2 = new GameObject ("BB");
109+
b1.transform.parent = b.transform;
110+
b2.transform.parent = b.transform; // in alpha order
111+
a.AddComponent<BoxCollider> ();
112+
a1.transform.localPosition = new Vector3 (1, 2, 3);
113+
114+
Assert.IsFalse (b.GetComponent<BoxCollider> ());
115+
Assert.AreEqual ("BB", b.transform.GetChild (1).name);
116+
Assert.AreEqual (Vector3.zero, b1.transform.localPosition);
117+
118+
ConvertToModel.SetupImportedGameObject (a, b);
119+
120+
Assert.IsTrue (b.GetComponent<BoxCollider> ());
121+
Assert.AreEqual ("AA", b.transform.GetChild (1).name);
122+
Assert.AreEqual (new Vector3 (1, 2, 3), b1.transform.localPosition);
123+
}
124+
}
125+
126+
[Test]
127+
public void BasicTest()
128+
{
129+
// Get a random directory.
130+
var path = GetRandomFileNamePath(extName: "");
131+
132+
// Create a cube.
133+
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
134+
135+
// Convert it to a prefab.
136+
var cubePrefabInstance = ConvertToModel.Convert(cube,
137+
directoryFullPath: path, keepOriginal: true);
138+
139+
// Make sure it's what we expect.
140+
Assert.That(cube); // we kept the original
141+
Assert.That(cubePrefabInstance); // we got the new
142+
Assert.AreEqual("Cube", cubePrefabInstance.name); // it has the right name
143+
Assert.That(!EditorUtility.IsPersistent(cubePrefabInstance));
144+
var cubePrefabAsset = PrefabUtility.GetPrefabParent(cubePrefabInstance);
145+
Assert.That(cubePrefabAsset);
146+
147+
// it's a different mesh instance, but the same mesh
148+
Assert.AreNotEqual(
149+
cube.GetComponent<MeshFilter>().sharedMesh,
150+
cubePrefabInstance.GetComponent<MeshFilter>().sharedMesh);
151+
Assert.That(cubePrefabInstance.GetComponent<FbxPrefab>());
152+
153+
// Should be all the same triangles. But it isn't. TODO.
154+
// At least the indices should match in multiplicity.
155+
var cubeMesh = cube.GetComponent<MeshFilter>().sharedMesh;
156+
var cubePrefabMesh = cubePrefabInstance.GetComponent<MeshFilter>().sharedMesh;
157+
//Assert.That(
158+
// cubeMesh.triangles,
159+
// Is.EqualTo(cubePrefabMesh.triangles)
160+
//);
161+
Assert.That(cubeMesh.triangles, Is.EquivalentTo(cubeMesh.triangles));
162+
163+
// Make sure it's where we expect.
164+
var assetRelativePath = AssetDatabase.GetAssetPath(cubePrefabAsset);
165+
var assetFullPath = Path.GetFullPath(Path.Combine(Application.dataPath,
166+
"../" + assetRelativePath));
167+
Assert.AreEqual(Path.GetFullPath(path), Path.GetDirectoryName(assetFullPath));
168+
}
169+
}
170+
}

Assets/FbxExporters/Editor/UnitTests/FbxPrefabTest.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,6 @@ public void ManualToAuto() {
337337

338338
public class FbxPrefabRegressions : ExporterTestBase
339339
{
340-
[Ignore("ConvertToModel return value is messed up.")]
341340
[Test]
342341
public void TestCubeAtRoot()
343342
{
@@ -352,8 +351,8 @@ public void TestCubeAtRoot()
352351
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
353352
cube.name = "Cube";
354353
var cubeAssetPath = GetRandomFbxFilePath();
355-
var autoPrefab = FbxExporters.Editor.ConvertToModel.CreateInstantiatedModelPrefab(
356-
new GameObject[] { cube }, path: cubeAssetPath)[0];
354+
var autoPrefab = FbxExporters.Editor.ConvertToModel.Convert(cube,
355+
fbxFullPath: cubeAssetPath);
357356
Assert.IsTrue(autoPrefab);
358357

359358
// Make a maya locator.

Assets/Integrations/Autodesk/maya/scripts/unityOneClick/ui.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@
2929
# User Interface
3030
# ======================================================================'
3131

32-
kMainWndMenuName = 'UnityOneClick'
33-
kMainWndMenuLabel = 'Unity'
3432
kMayaVersionAdded = '2017'
33+
kMenuName = 'UnityOneClick'
34+
kMenuDivider = 'UnityOneClickDivider'
35+
kMenuLabel = 'UNITY'
36+
kMenuInsertAfter = 'exportActiveFileOptions'
3537

3638
def register(pluginFn):
3739
"""
@@ -51,40 +53,58 @@ def unregister(pluginFn):
5153

5254
return
5355

56+
def getParentMenu():
57+
result = maya.mel.eval('$tempVar = $gMainFileMenu;')
58+
maya.mel.eval("buildFileMenu")
59+
return result
60+
5461
def installMenu():
5562
"""
5663
install menu into main window
5764
@ingroup UnityUI
5865
"""
59-
maya.cmds.menu(kMainWndMenuName,
60-
parent='MayaWindow',
61-
label=kMainWndMenuLabel, tearOff=True,
62-
version=kMayaVersionAdded,
63-
familyImage=commands.importCmd.familyIconPath)
64-
65-
maya.cmds.menuItem(parent=kMainWndMenuName,
66+
parentMenu = getParentMenu()
67+
68+
maya.cmds.menuItem(kMenuDivider,
69+
divider=True,
70+
longDivider=False,
71+
insertAfter=kMenuInsertAfter,
72+
parent=parentMenu,
73+
version=kMayaVersionAdded)
74+
maya.cmds.menuItem(kMenuName,
75+
parent=parentMenu,
76+
insertAfter=kMenuDivider,
77+
image=commands.importCmd.familyIconPath(),
78+
subMenu=True,
79+
label=kMenuLabel,
80+
tearOff=True,
81+
version=kMayaVersionAdded)
82+
83+
maya.cmds.menuItem(parent=kMenuName,
6684
label=commands.importCmd.kShortLabel,
6785
annotation=commands.importCmd.kLabel,
6886
command=commands.importCmd.kScriptCommand,
69-
image=commands.importCmd.iconPath,
87+
image=commands.importCmd.iconPath(),
7088
version=kMayaVersionAdded)
71-
maya.cmds.menuItem(parent=kMainWndMenuName,
89+
maya.cmds.menuItem(parent=kMenuName,
7290
label=commands.reviewCmd.kShortLabel,
7391
annotation=commands.reviewCmd.kLabel,
7492
command=commands.reviewCmd.kScriptCommand,
75-
image=commands.importCmd.iconPath,
93+
image=commands.importCmd.iconPath(),
7694
version=kMayaVersionAdded)
77-
maya.cmds.menuItem(parent=kMainWndMenuName,
95+
maya.cmds.menuItem(parent=kMenuName,
7896
label=commands.publishCmd.kShortLabel,
7997
annotation=commands.publishCmd.kLabel,
8098
command=commands.publishCmd.kScriptCommand,
81-
image=commands.importCmd.iconPath,
99+
image=commands.importCmd.iconPath(),
82100
version=kMayaVersionAdded)
83101

84102
def uninstallMenu():
85103
"""
86104
uninstall the unityOneClick menu from main window
87105
@ingroup UnityUI
88106
"""
89-
if maya.cmds.menu(kMainWndMenuName, exists=True): # @UndefinedVariable
90-
maya.cmds.deleteUI(kMainWndMenuName, menu=True) # @UndefinedVariable
107+
if maya.cmds.menu(kMenuName, exists=True): # @UndefinedVariable
108+
maya.cmds.deleteUI(kMenuDivider, menuItem=True)
109+
maya.cmds.deleteUI(kMenuName, menuItem=True)
110+
maya.cmds.deleteUI(kMenuName, menu=True) # @UndefinedVariable

0 commit comments

Comments
 (0)