public static void GenericTests<T>(T fbxCollection, FbxManager manager) where T : FbxCollection { // TODO: FbxScene has a member count of 3 instead of one (even after clearing), is this normal? int initialMemberCount = fbxCollection.GetMemberCount (); // test AddMember FbxObject obj = FbxObject.Create (manager, ""); bool result = fbxCollection.AddMember (obj); Assert.IsTrue (result); Assert.AreEqual(initialMemberCount+1, fbxCollection.GetMemberCount()); // test Clear fbxCollection.Clear (); Assert.AreEqual (initialMemberCount, fbxCollection.GetMemberCount()); // test GetAnimLayerMember() fbxCollection.AddMember(FbxAnimLayer.Create(manager, "animLayer")); var animLayer = fbxCollection.GetAnimLayerMember (); Assert.IsInstanceOf<FbxAnimLayer> (animLayer); var animLayer2 = fbxCollection.GetAnimLayerMember (0); Assert.AreEqual (animLayer, animLayer2); // check invalid Assert.IsNull(fbxCollection.GetAnimLayerMember (1)); Assert.IsNull(fbxCollection.GetAnimLayerMember (-1)); }
public void TestIdentity() { using (FbxObject obj = FbxObject.Create(m_fbxManager, "")) { FbxManager fbxManager2 = obj.GetFbxManager(); Assert.AreEqual(m_fbxManager, fbxManager2); } }
public void FbxObjectCreateTest() { int N = 5000; DefaultTest( "FbxObjectCreate", N, 10, () => { for (int i = 0; i < N; i++) { FbxObject.Create(m_fbxManager, ""); } } ); }
public void TestUsing() { // Test that the using statement works, and destroys the manager. FbxObject obj; using (var mgr = FbxManager.Create()) { obj = FbxObject.Create(mgr, "asdf"); } Assert.That(() => { obj.GetName(); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); // Also test explicit dispose. var mgr2 = FbxManager.Create(); obj = FbxObject.Create(mgr2, "hjkl"); mgr2.Dispose(); Assert.That(() => { obj.GetName(); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); }
public void BasicTests() { using (var manager = FbxManager.Create()) { // FbxPropertyT<FbxBool> example: VisibilityInheritance on a node var node = FbxNode.Create(manager, "node"); GenericPropertyTests <FbxPropertyBool> (node.VisibilityInheritance, node, "Visibility Inheritance", Globals.FbxVisibilityInheritanceDT); var property = node.VisibilityInheritance; property.Set(false); Assert.AreEqual(false, property.Get()); Assert.AreEqual(false, property.EvaluateValue()); Assert.AreEqual(false, property.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(false, property.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<FbxDouble> example: several of them on a Lambert shader var obj = FbxSurfaceLambert.Create(manager, "lambert"); GenericPropertyTests <FbxPropertyDouble> (obj.EmissiveFactor, obj, "EmissiveFactor", Globals.FbxDoubleDT); var property = obj.EmissiveFactor; property.Set(5.0); // bool Set<float> is not accessible here! Assert.AreEqual(5.0, property.Get()); Assert.AreEqual(5.0, property.EvaluateValue()); Assert.AreEqual(5.0, property.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(5.0, property.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<Double3> example: the LclTranslation on a node var node = FbxNode.Create(manager, "node"); GenericPropertyTests <FbxPropertyDouble3> (node.LclTranslation, node, "Lcl Translation", Globals.FbxLocalTranslationDT); var property = node.LclTranslation; property.Set(new FbxDouble3(1, 2, 3)); Assert.AreEqual(new FbxDouble3(1, 2, 3), property.Get()); Assert.AreEqual(new FbxDouble3(1, 2, 3), property.EvaluateValue()); Assert.AreEqual(new FbxDouble3(1, 2, 3), property.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(new FbxDouble3(1, 2, 3), property.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<float> example: the LeftBarnDoor on a light var light = FbxLight.Create(manager, "light"); GenericPropertyTests(light.LeftBarnDoor, light, "LeftBarnDoor", Globals.FbxFloatDT); var property = light.LeftBarnDoor; light.LeftBarnDoor.Set(5.0f); Assert.AreEqual(5.0f, light.LeftBarnDoor.Get()); Assert.AreEqual(5.0f, property.EvaluateValue()); Assert.AreEqual(5.0f, property.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(5.0f, property.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<int> example: the WorldUpType on an aim constraint var constraint = FbxConstraintAim.Create(manager, "constraint"); GenericPropertyTests(constraint.WorldUpType, constraint, "WorldUpType", Globals.FbxEnumDT); var property = constraint.WorldUpType; int value = (int)FbxConstraintAim.EWorldUp.eAimAtObjectUp; constraint.WorldUpType.Set(value); Assert.That(constraint.WorldUpType.Get(), Is.EqualTo(value)); Assert.That(property.EvaluateValue(), Is.EqualTo(value)); Assert.That(property.EvaluateValue(FbxTime.FromSecondDouble(5)), Is.EqualTo(value)); Assert.That(property.EvaluateValue(FbxTime.FromSecondDouble(5), true), Is.EqualTo(value)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<FbxString> example: the description of a shader implementation var impl = FbxImplementation.Create(manager, "name"); GenericPropertyTests <FbxPropertyString> (impl.RenderAPI, impl, "RenderAPI", Globals.FbxStringDT); var property = impl.RenderAPI; property.Set("a value"); Assert.AreEqual("a value", property.Get()); // animated strings come out as empty-string Assert.AreEqual("", property.EvaluateValue()); Assert.AreEqual("", property.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual("", property.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT for FbxTexture enums EBlendMode and EWrapMode var tex = FbxTexture.Create(manager, "tex"); FbxPropertyTest.GenericPropertyTests(tex.CurrentTextureBlendMode, tex, "CurrentTextureBlendMode", Globals.FbxEnumDT); tex.CurrentTextureBlendMode.Set(FbxTexture.EBlendMode.eAdditive); Assert.AreEqual(FbxTexture.EBlendMode.eAdditive, tex.CurrentTextureBlendMode.Get()); Assert.AreEqual(FbxTexture.EBlendMode.eAdditive, tex.CurrentTextureBlendMode.EvaluateValue()); Assert.AreEqual(FbxTexture.EBlendMode.eAdditive, tex.CurrentTextureBlendMode.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxTexture.EBlendMode.eAdditive, tex.CurrentTextureBlendMode.EvaluateValue(FbxTime.FromSecondDouble(5), true)); FbxPropertyTest.GenericPropertyTests(tex.WrapModeU, tex, "WrapModeU", Globals.FbxEnumDT); tex.WrapModeU.Set(FbxTexture.EWrapMode.eClamp); Assert.AreEqual(FbxTexture.EWrapMode.eClamp, tex.WrapModeU.Get()); Assert.AreEqual(FbxTexture.EWrapMode.eClamp, tex.WrapModeU.EvaluateValue()); Assert.AreEqual(FbxTexture.EWrapMode.eClamp, tex.WrapModeU.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxTexture.EWrapMode.eClamp, tex.WrapModeU.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<FbxNull.ELook> var null1 = FbxNull.Create(manager, "null1"); FbxPropertyTest.GenericPropertyTests(null1.Look, null1, "Look", Globals.FbxEnumDT); null1.Look.Set(FbxNull.ELook.eCross); Assert.AreEqual(FbxNull.ELook.eCross, null1.Look.Get()); Assert.AreEqual(FbxNull.ELook.eCross, null1.Look.EvaluateValue()); Assert.AreEqual(FbxNull.ELook.eCross, null1.Look.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxNull.ELook.eCross, null1.Look.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<FbxMarker.ELook> var marker1 = FbxMarker.Create(manager, "marker1"); FbxPropertyTest.GenericPropertyTests(marker1.Look, marker1, "Look", Globals.FbxEnumDT); marker1.Look.Set(FbxMarker.ELook.eCapsule); Assert.AreEqual(FbxMarker.ELook.eCapsule, marker1.Look.Get()); Assert.AreEqual(FbxMarker.ELook.eCapsule, marker1.Look.EvaluateValue()); Assert.AreEqual(FbxMarker.ELook.eCapsule, marker1.Look.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxMarker.ELook.eCapsule, marker1.Look.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT for FbxCamera enum EProjectionType var camera = FbxCamera.Create(manager, "camera"); FbxPropertyTest.GenericPropertyTests(camera.ProjectionType, camera, "CameraProjectionType", Globals.FbxEnumDT); camera.ProjectionType.Set(FbxCamera.EProjectionType.ePerspective); Assert.AreEqual(FbxCamera.EProjectionType.ePerspective, camera.ProjectionType.Get()); Assert.AreEqual(FbxCamera.EProjectionType.ePerspective, camera.ProjectionType.EvaluateValue()); Assert.AreEqual(FbxCamera.EProjectionType.ePerspective, camera.ProjectionType.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxCamera.EProjectionType.ePerspective, camera.ProjectionType.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT for FbxCamera enum EGateFit var camera = FbxCamera.Create(manager, "camera"); FbxPropertyTest.GenericPropertyTests(camera.GateFit, camera, "GateFit", Globals.FbxEnumDT); camera.GateFit.Set(FbxCamera.EGateFit.eFitHorizontal); Assert.AreEqual(FbxCamera.EGateFit.eFitHorizontal, camera.GateFit.Get()); Assert.AreEqual(FbxCamera.EGateFit.eFitHorizontal, camera.GateFit.EvaluateValue()); Assert.AreEqual(FbxCamera.EGateFit.eFitHorizontal, camera.GateFit.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxCamera.EGateFit.eFitHorizontal, camera.GateFit.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT<EInheritType> var node = FbxNode.Create(manager, "node"); FbxPropertyTest.GenericPropertyTests(node.InheritType, node, "InheritType", Globals.FbxEnumDT); node.InheritType.Set(FbxTransform.EInheritType.eInheritRSrs); Assert.AreEqual(FbxTransform.EInheritType.eInheritRSrs, node.InheritType.Get()); Assert.AreEqual(FbxTransform.EInheritType.eInheritRSrs, node.InheritType.EvaluateValue()); Assert.AreEqual(FbxTransform.EInheritType.eInheritRSrs, node.InheritType.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxTransform.EInheritType.eInheritRSrs, node.InheritType.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // FbxPropertyT for FbxLight enums var light = FbxLight.Create(manager, "light"); FbxPropertyTest.GenericPropertyTests(light.LightType, light, "LightType", Globals.FbxEnumDT); light.LightType.Set(FbxLight.EType.eSpot); Assert.AreEqual(FbxLight.EType.eSpot, light.LightType.Get()); Assert.AreEqual(FbxLight.EType.eSpot, light.LightType.EvaluateValue()); Assert.AreEqual(FbxLight.EType.eSpot, light.LightType.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxLight.EType.eSpot, light.LightType.EvaluateValue(FbxTime.FromSecondDouble(5), true)); FbxPropertyTest.GenericPropertyTests(light.AreaLightShape, light, "AreaLightShape", Globals.FbxEnumDT); light.AreaLightShape.Set(FbxLight.EAreaLightShape.eSphere); Assert.AreEqual(FbxLight.EAreaLightShape.eSphere, light.AreaLightShape.Get()); Assert.AreEqual(FbxLight.EAreaLightShape.eSphere, light.AreaLightShape.EvaluateValue()); Assert.AreEqual(FbxLight.EAreaLightShape.eSphere, light.AreaLightShape.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxLight.EAreaLightShape.eSphere, light.AreaLightShape.EvaluateValue(FbxTime.FromSecondDouble(5), true)); FbxPropertyTest.GenericPropertyTests(light.DecayType, light, "DecayType", Globals.FbxEnumDT); light.DecayType.Set(FbxLight.EDecayType.eCubic); Assert.AreEqual(FbxLight.EDecayType.eCubic, light.DecayType.Get()); Assert.AreEqual(FbxLight.EDecayType.eCubic, light.DecayType.EvaluateValue()); Assert.AreEqual(FbxLight.EDecayType.eCubic, light.DecayType.EvaluateValue(FbxTime.FromSecondDouble(5))); Assert.AreEqual(FbxLight.EDecayType.eCubic, light.DecayType.EvaluateValue(FbxTime.FromSecondDouble(5), true)); } using (var manager = FbxManager.Create()) { // Test all the create and destroy operations FbxProperty root, child; var obj = FbxObject.Create(manager, "obj"); Assert.IsNotNull(FbxProperty.Create(obj, Globals.FbxStringDT, "a")); Assert.IsNotNull(FbxProperty.Create(obj, Globals.FbxStringDT, "b", "label")); Assert.IsNotNull(FbxProperty.Create(obj, Globals.FbxStringDT, "c", "label", false)); bool didFind; Assert.IsNotNull(FbxProperty.Create(obj, Globals.FbxStringDT, "c", "label", true, out didFind)); Assert.IsTrue(didFind); root = FbxProperty.Create(obj, Globals.FbxCompoundDT, "root"); child = FbxProperty.Create(root, Globals.FbxStringDT, "a"); Assert.IsNotNull(child); Assert.IsNotNull(FbxProperty.Create(root, Globals.FbxStringDT, "b", "label")); Assert.IsNotNull(FbxProperty.Create(root, Globals.FbxStringDT, "c", "label", false)); Assert.IsNotNull(FbxProperty.Create(root, Globals.FbxStringDT, "c", "label", true, out didFind)); Assert.IsTrue(didFind); child.Destroy(); root.DestroyChildren(); Assert.IsNotNull(FbxProperty.Create(root, Globals.FbxStringDT, "c", "label", true, out didFind)); Assert.IsFalse(didFind); root.DestroyRecursively(); } }
// tests that should work for any subclass of FbxProperty public static void GenericPropertyTests <T>(T property, FbxObject parent, string propertyName, FbxDataType dataType) where T : FbxProperty { Assert.IsTrue(property.IsValid()); Assert.AreEqual(dataType, property.GetPropertyDataType()); Assert.AreEqual(propertyName, property.GetName()); Assert.AreEqual(propertyName, property.ToString()); Assert.AreEqual(propertyName, property.GetHierarchicalName()); Assert.AreEqual(propertyName, property.GetLabel(true)); property.SetLabel("label"); Assert.AreEqual("label", property.GetLabel()); Assert.AreEqual(parent, property.GetFbxObject()); Assert.AreEqual(property.GetFbxObject(), parent); // test it both ways just in case equals is busted // test the flags using the animatable flag property.ModifyFlag(FbxPropertyFlags.EFlags.eAnimatable, true); Assert.IsTrue(property.GetFlag(FbxPropertyFlags.EFlags.eAnimatable)); Assert.AreNotEqual(0, property.GetFlags() | FbxPropertyFlags.EFlags.eAnimatable); property.SetFlagInheritType(FbxPropertyFlags.EFlags.eAnimatable, FbxPropertyFlags.EInheritType.eInherit); Assert.AreEqual(FbxPropertyFlags.EInheritType.eInherit, property.GetFlagInheritType(FbxPropertyFlags.EFlags.eAnimatable)); // not clear when this ever returns true: whether we set animatable // to true or false it says it has the default value. Assert.IsFalse(property.ModifiedFlag(FbxPropertyFlags.EFlags.eAnimatable)); // Test setting the value with the generic float accessor. // The value may not round-trip: a bool property will go to 1.0 property.Set(5.0f); TestGetter(property.GetFloat()); TestGetter(property.GetBool()); TestGetter(property.GetDouble()); TestGetter(property.GetFbxColor()); TestGetter(property.GetFbxDouble3()); TestGetter(property.GetString()); TestGetter(property.GetInt()); // Test setting the value with color accessor property.Set(new FbxColor()); // test GetCurve(). Just make sure it doesn't crash. We can't // generically test actually getting curves, because the details // (channel names etc) depend on the type of property and its // flags. FbxAnimLayer layer = FbxAnimLayer.Create(parent, "layer"); property.GetCurve(layer); property.GetCurve(layer, true); property.GetCurve(layer, "asdf"); property.GetCurve(layer, "asdf", true); property.GetCurve(layer, "asdf", "hjkl", true); Assert.That(() => { property.GetCurve(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); // test GetCurveNode() (make sure it doesn't crash) FbxAnimCurveNode curveNode = property.GetCurveNode(); Assert.IsNull(curveNode); // didn't create one so should be null curveNode = property.GetCurveNode(true); // TODO: figure out why the curve node doesn't get created //Assert.IsNotNull (curveNode); property.GetCurveNode(FbxAnimStack.Create(parent, "anim stack")); property.GetCurveNode(FbxAnimStack.Create(parent, "anim stack"), true); property.GetCurveNode(FbxAnimLayer.Create(parent, "anim layer")); property.GetCurveNode(FbxAnimLayer.Create(parent, "anim layer"), true); Assert.That(() => { property.GetCurveNode((FbxAnimStack)null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.That(() => { property.GetCurveNode((FbxAnimLayer)null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); using (FbxManager manager = FbxManager.Create()) { // Test ConnectSrcObject functions FbxObject obj = FbxObject.Create(manager, "obj"); bool result = property.ConnectSrcObject(obj); Assert.IsTrue(result); Assert.IsTrue(property.IsConnectedSrcObject(obj)); Assert.AreEqual(1, property.GetSrcObjectCount()); Assert.AreEqual(obj, property.GetSrcObject()); Assert.AreEqual(obj, property.GetSrcObject(0)); Assert.AreEqual(obj, property.FindSrcObject("obj")); Assert.IsNull(property.FindSrcObject("obj", 1)); Assert.That(() => { property.FindSrcObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.IsTrue(property.DisconnectSrcObject(obj)); Assert.IsFalse(property.IsConnectedSrcObject(obj)); Assert.That(() => { property.ConnectSrcObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.IsTrue(property.ConnectSrcObject(obj, FbxConnection.EType.eData)); Assert.IsTrue(property.DisconnectAllSrcObject()); // Test ConnectDstObject functions result = property.ConnectDstObject(obj); Assert.IsTrue(result); Assert.IsTrue(property.IsConnectedDstObject(obj)); Assert.AreEqual(1, property.GetDstObjectCount()); Assert.AreEqual(obj, property.GetDstObject()); Assert.AreEqual(obj, property.GetDstObject(0)); Assert.AreEqual(obj, property.FindDstObject("obj")); Assert.IsNull(property.FindDstObject("obj", 1)); Assert.That(() => { property.FindDstObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.IsTrue(property.DisconnectDstObject(obj)); Assert.IsFalse(property.IsConnectedDstObject(obj)); Assert.That(() => { property.ConnectDstObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.IsTrue(property.ConnectDstObject(obj, FbxConnection.EType.eData)); Assert.IsTrue(property.DisconnectAllDstObject()); } // verify this in the future: will dispose destroy? property.Dispose(); }
public void TestVarious() { FbxObject obj; /************************************************************ * Test selection ************************************************************/ obj = CreateObject(); Assert.IsFalse(obj.GetSelected()); obj.SetSelected(true); Assert.IsTrue(obj.GetSelected()); /************************************************************ * Test name-related functions. ************************************************************/ /* * We use this also for testing that string handling works. * Make sure we can pass const char*, FbxString, and const * FbxString&. * Make sure we can return those too (though I'm not actually * seeing a return of a const-ref anywhere). */ // Test a function that takes const char*. obj = FbxObject.Create(Manager, "MyObject"); Assert.IsNotNull(obj); // Test a function that returns const char*. Assert.AreEqual("MyObject", obj.GetName()); // Test a function that takes an FbxString with an accent in it. obj.SetNameSpace("Accentué"); // Test a function that returns FbxString. Assert.AreEqual("MyObject", obj.GetNameWithoutNameSpacePrefix()); // Test a function that returns FbxString with an accent in it. Assert.AreEqual("Accentué", obj.GetNameSpaceOnly()); // Test a function that takes a const char* and returns an FbxString. // We don't want to convert the other StripPrefix functions, which // modify their argument in-place. Assert.AreEqual("MyObject", FbxObject.StripPrefix("NameSpace::MyObject")); obj.SetName("new name"); Assert.AreEqual("new name", obj.GetName()); obj.SetInitialName("init"); Assert.AreEqual("init", obj.GetInitialName()); /************************************************************ * Test shader implementations ************************************************************/ using (obj = FbxObject.Create(Manager, "MyObject")) { var impl = FbxImplementation.Create(obj, "impl"); Assert.IsTrue(obj.AddImplementation(impl)); Assert.IsTrue(obj.RemoveImplementation(impl)); Assert.IsTrue(obj.AddImplementation(impl)); Assert.IsTrue(obj.SetDefaultImplementation(impl)); Assert.AreEqual(impl, obj.GetDefaultImplementation()); Assert.IsTrue(obj.HasDefaultImplementation()); } /************************************************************ * Test property functions ************************************************************/ using (obj = CreateObject("theobj")) { using (var obj2 = CreateObject("otherobj")) { // Make a property and connect it from obj to obj2. var prop = FbxProperty.Create(obj, Globals.FbxBoolDT, "maybe"); var prop2 = FbxProperty.Create(obj, Globals.FbxFloatDT, "probability"); Assert.IsTrue(obj.ConnectSrcProperty(prop)); Assert.IsTrue(obj.ConnectSrcProperty(prop2)); Assert.IsTrue(obj2.ConnectDstProperty(prop)); Assert.IsTrue(obj.IsConnectedSrcProperty(prop)); Assert.IsTrue(obj2.IsConnectedDstProperty(prop)); Assert.AreEqual(2, obj.GetSrcPropertyCount()); Assert.AreEqual(1, obj2.GetDstPropertyCount()); Assert.AreEqual(prop, obj.GetSrcProperty()); Assert.AreEqual(prop, obj.GetSrcProperty(0)); Assert.AreEqual(prop2, obj.GetSrcProperty(1)); Assert.AreEqual(prop, obj2.GetDstProperty()); Assert.AreEqual(prop, obj2.GetDstProperty(0)); Assert.AreEqual(prop, obj.FindSrcProperty("maybe")); Assert.AreEqual(prop, obj2.FindDstProperty("maybe")); Assert.IsFalse(obj.FindSrcProperty("maybe", 1).IsValid()); Assert.IsFalse(obj2.FindDstProperty("maybe", 1).IsValid()); // Iterating over properties Assert.IsTrue(obj.GetFirstProperty().IsValid()); Assert.IsTrue(obj.GetNextProperty(obj.GetFirstProperty()).IsValid()); Assert.IsTrue(obj.GetClassRootProperty().IsValid()); // FindProperty Assert.AreEqual(prop, obj.FindProperty("maybe")); Assert.AreEqual(prop, obj.FindProperty("mayBE", false)); Assert.IsFalse(obj.FindProperty("mayBE", true).IsValid()); Assert.AreEqual(prop, obj.FindProperty("maybe", Globals.FbxBoolDT)); Assert.AreEqual(prop, obj.FindProperty("mayBE", Globals.FbxBoolDT, false)); // FindPropertyHierarchical Assert.AreEqual(prop, obj.FindPropertyHierarchical("maybe")); Assert.AreEqual(prop, obj.FindPropertyHierarchical("mayBE", false)); Assert.IsFalse(obj.FindPropertyHierarchical("mayBE", true).IsValid()); Assert.AreEqual(prop, obj.FindPropertyHierarchical("maybe", Globals.FbxBoolDT)); Assert.AreEqual(prop, obj.FindPropertyHierarchical("mayBE", Globals.FbxBoolDT, false)); // Disconnecting int nSrc = obj.GetSrcPropertyCount(); int nDst = obj2.GetDstPropertyCount(); Assert.IsTrue(obj.DisconnectSrcProperty(prop)); Assert.IsTrue(obj2.DisconnectDstProperty(prop)); Assert.AreEqual(nSrc - 1, obj.GetSrcPropertyCount()); Assert.AreEqual(nDst - 1, obj2.GetDstPropertyCount()); } } /************************************************************ * Test object connection functions ************************************************************/ // need to order them this way for FbxScene, which deletes obj if Source Object is destroyed using (var ownerObj = CreateObject("ownerObj")) { using (obj = CreateObject("obj")) { // Test ConnectSrcObject functions int origCount = ownerObj.GetSrcObjectCount(); bool result = ownerObj.ConnectSrcObject(obj); Assert.IsTrue(result); Assert.IsTrue(ownerObj.IsConnectedSrcObject(obj)); Assert.AreEqual(origCount + 1, ownerObj.GetSrcObjectCount()); if (origCount == 0) { Assert.AreEqual(obj, ownerObj.GetSrcObject()); } else { // FbxScene has more than one object set as source Assert.AreNotEqual(obj, ownerObj.GetSrcObject()); } Assert.AreEqual(obj, ownerObj.GetSrcObject(origCount)); Assert.AreEqual(obj, ownerObj.FindSrcObject("obj")); Assert.IsNull(ownerObj.FindSrcObject("obj", origCount + 1)); // TODO: Fix so this doesn't crash /*Assert.That (() => { * ownerObj.FindSrcObject (null); * }, Throws.Exception.TypeOf<System.ArgumentNullException> ());*/ result = ownerObj.DisconnectSrcObject(obj); Assert.IsTrue(result); Assert.IsFalse(ownerObj.IsConnectedSrcObject(obj)); Assert.That(() => { ownerObj.ConnectSrcObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException> ()); result = ownerObj.ConnectSrcObject(obj, FbxConnection.EType.eData); Assert.IsTrue(result); } } // need to order them this way for FbxScene, which deletes ownerObj if Destination Object is destroyed using (obj = CreateObject("obj")) { using (var ownerObj = CreateObject("ownerObj")) { // Test ConnectDstObject functions int origCount = ownerObj.GetDstObjectCount(); bool result = ownerObj.ConnectDstObject(obj); Assert.IsTrue(result); Assert.IsTrue(ownerObj.IsConnectedDstObject(obj)); Assert.AreEqual(origCount + 1, ownerObj.GetDstObjectCount()); if (origCount == 0) { Assert.AreEqual(obj, ownerObj.GetDstObject()); } else { // FbxAnimCurve has the scene as a DstObject Assert.AreNotEqual(obj, ownerObj.GetDstObject()); } Assert.AreEqual(obj, ownerObj.GetDstObject(origCount)); Assert.AreEqual(obj, ownerObj.FindDstObject("obj")); Assert.IsNull(ownerObj.FindDstObject("obj", origCount + 1)); // TODO: Fix so this doesn't crash /*Assert.That (() => { * ownerObj.FindDstObject (null); * }, Throws.Exception.TypeOf<System.ArgumentNullException> ());*/ result = ownerObj.DisconnectDstObject(obj); Assert.IsTrue(result); Assert.IsFalse(ownerObj.IsConnectedDstObject(obj)); Assert.That(() => { ownerObj.ConnectDstObject(null); }, Throws.Exception.TypeOf <System.ArgumentNullException> ()); result = ownerObj.ConnectDstObject(obj, FbxConnection.EType.eData); Assert.IsTrue(result); } } }
public void TestBasics() { var scene = FbxScene.Create(Manager, "scene"); using (FbxAnimCurve curve = FbxAnimCurve.Create(scene, "curve")) { // test KeyModifyBegin (make sure it doesn't crash) curve.KeyModifyBegin(); // test KeyAdd int last = 0; int index = curve.KeyAdd(FbxTime.FromFrame(5), ref last); Assert.GreaterOrEqual(index, 0); // test KeyAdd null FbxTime Assert.That(() => { curve.KeyAdd(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.That(() => { curve.KeyAdd(null, ref last); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); // test KeySet FbxTime keyTime = FbxTime.FromSecondDouble(3); curve.KeySet(index, keyTime, 5); // test KeyGetValue, KeyGetTime, KeyGetCount Assert.AreEqual(5, curve.KeyGetValue(index)); Assert.AreEqual(keyTime, curve.KeyGetTime(index)); Assert.AreEqual(1, curve.KeyGetCount()); // make sure none of the variations crash curve.KeySet(index, new FbxTime(), 5, FbxAnimCurveDef.EInterpolationType.eInterpolationConstant ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 4 ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 3); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0, 0, 0); // test KeyModifyEnd (make sure it doesn't crash) curve.KeyModifyEnd(); } // Also test that the AnimCurveBase can't be created. Assert.That(() => FbxAnimCurveBase.Create(Manager, ""), Throws.Exception.TypeOf <System.NotImplementedException>()); Assert.That(() => FbxAnimCurveBase.Create(FbxObject.Create(Manager, ""), ""), Throws.Exception.TypeOf <System.NotImplementedException>()); }
public void TestBasics() { var scene = FbxScene.Create(Manager, "scene"); using (FbxAnimCurve curve = FbxAnimCurve.Create(scene, "curve")) { // test KeyModifyBegin (make sure it doesn't crash) curve.KeyModifyBegin(); // test KeyAdd int last = 0; int index = curve.KeyAdd(FbxTime.FromFrame(5), ref last); Assert.GreaterOrEqual(index, 0); // test KeyAdd null FbxTime Assert.That(() => { curve.KeyAdd(null); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); Assert.That(() => { curve.KeyAdd(null, ref last); }, Throws.Exception.TypeOf <System.ArgumentNullException>()); // test KeySet FbxTime keyTime = FbxTime.FromSecondDouble(3); curve.KeySet(index, keyTime, 5); // test KeyGetValue, KeyGetTime, KeyGetCount Assert.AreEqual(5, curve.KeyGetValue(index)); Assert.AreEqual(keyTime, curve.KeyGetTime(index)); Assert.AreEqual(1, curve.KeyGetCount()); // test don't crash FbxAnimCurveKey key = curve.KeyGet(index); Assert.That(key, Is.Not.Null); // make sure none of the variations crash curve.KeySet(index, new FbxTime(), 5, FbxAnimCurveDef.EInterpolationType.eInterpolationConstant ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 4 ); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 3); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0, 0); curve.KeySet(index, new FbxTime(), 0, FbxAnimCurveDef.EInterpolationType.eInterpolationCubic, FbxAnimCurveDef.ETangentMode.eTangentAuto, 0, 0, FbxAnimCurveDef.EWeightedMode.eWeightedAll, 0, 0, 0, 0); // more setter test curve.KeySetTangentMode(index, FbxAnimCurveDef.ETangentMode.eTangentUser); Assert.That(curve.KeyGetTangentMode(index), Is.EqualTo(FbxAnimCurveDef.ETangentMode.eTangentUser)); curve.KeySetTangentMode(index, FbxAnimCurveDef.ETangentMode.eTangentGenericBreak); Assert.That(curve.KeyGetTangentMode(index), Is.EqualTo(FbxAnimCurveDef.ETangentMode.eTangentGenericBreak)); // test settings key parameters key.SetTangentMode(FbxAnimCurveDef.ETangentMode.eTangentUser); // Set break is only meaningful if tangent is eTangentAuto or eTangentUser key.SetBreak(true); Assert.True(key.GetBreak()); key.SetDataFloat(FbxAnimCurveDef.EDataIndex.eRightSlope, 1.0f); Assert.That(key.GetDataFloat(FbxAnimCurveDef.EDataIndex.eRightSlope), Is.EqualTo(1.0f).Within(float.Epsilon)); key.SetBreak(false); Assert.False(key.GetBreak()); // key.SetTangentWeightMode(FbxAnimCurveDef.EWeightedMode.eWeightedAll); key.SetTangentWeightMode(FbxAnimCurveDef.EWeightedMode.eWeightedAll, FbxAnimCurveDef.EWeightedMode.eWeightedAll); Assert.That(key.GetTangentWeightMode(), Is.EqualTo(FbxAnimCurveDef.EWeightedMode.eWeightedAll)); // key.SetBreak(true); key.SetTangentWeightAndAdjustTangent(FbxAnimCurveDef.EDataIndex.eRightSlope, 1.0); key.SetTangentWeightAndAdjustTangent(FbxAnimCurveDef.EDataIndex.eNextLeftSlope, 1.0); key.SetTangentWeightAndAdjustTangent(FbxAnimCurveDef.EDataIndex.eWeights, 1.0); key.SetTangentWeightAndAdjustTangent(FbxAnimCurveDef.EDataIndex.eRightWeight, 1.0); key.SetTangentWeightAndAdjustTangent(FbxAnimCurveDef.EDataIndex.eNextLeftWeight, 1.0); key.SetBreak(false); // key.SetTangentVelocityMode(FbxAnimCurveDef.EVelocityMode.eVelocityAll); key.SetTangentVelocityMode(FbxAnimCurveDef.EVelocityMode.eVelocityAll, FbxAnimCurveDef.EVelocityMode.eVelocityAll); Assert.That(key.GetTangentVelocityMode(), Is.EqualTo(FbxAnimCurveDef.EVelocityMode.eVelocityAll)); // key.SetTangentVisibility(FbxAnimCurveDef.ETangentVisibility.eTangentShowLeft); Assert.That(key.GetTangentVisibility(), Is.EqualTo(FbxAnimCurveDef.ETangentVisibility.eTangentShowLeft)); // test KeyModifyEnd (make sure it doesn't crash) curve.KeyModifyEnd(); } // Also test that the AnimCurveBase can't be created. Assert.That(() => FbxAnimCurveBase.Create(Manager, ""), Throws.Exception.TypeOf <System.NotImplementedException>()); Assert.That(() => FbxAnimCurveBase.Create(FbxObject.Create(Manager, ""), ""), Throws.Exception.TypeOf <System.NotImplementedException>()); }