public void AnimCurveNodeTest_ConnectToChannel_AddsSrcConnection() { // given: var acn = new AnimCurveNode("acn"); var ac = new AnimCurve("ac"); acn.AddChannel <float>("channel1", 0.0f); // require: Assert.AreEqual(2, CountProperties(acn)); Assert.AreEqual(1, acn.GetChannelsCount()); Assert.AreEqual(0, acn.GetCurveCount(0)); // when: acn.ConnectToChannel(ac, 0U); // then: Assert.AreEqual(2, CountProperties(acn)); Assert.AreEqual(1, acn.GetChannelsCount()); Assert.AreEqual(1, acn.GetCurveCount(0)); Assert.AreEqual(1, ac.GetDstPropertyCount()); Assert.AreEqual("channel1", ac.GetDstProperty(0).GetName()); var prop = acn.GetFirstProperty(); Assert.True(prop.IsValid()); prop = acn.GetNextProperty(prop); Assert.True(prop.IsValid()); Assert.AreEqual(1, prop.GetSrcObjectCount()); Assert.AreSame(ac, prop.GetSrcObject(0)); }
public void FbxAnimCurveNode_Create_HasNamespacePrefix() { // given: var obj = new AnimCurveNode("asdf"); // then: Assert.AreEqual("AnimCurveNode::", obj.GetNameSpacePrefix()); }
public void AnimCurveNodeTest_Create_NoChannels() { // given: // when: var acn = new AnimCurveNode(""); // then: Assert.AreEqual(0, acn.GetChannelsCount()); Assert.AreEqual(1, CountProperties(acn)); }
public void Property_AttachCurveNode_IsAnimated() { // given: var node = new Node("node"); var acn = new AnimCurveNode("acn"); var x = new AnimCurve("x"); var scene = new Scene("scene"); var layer = new AnimLayer("layer"); var stack = new AnimStack("stack"); var time = new FbxTime(0); var key = new AnimCurveKey(time, 1.0f); x.KeyAdd(time, key); scene.ConnectSrcObject(node); scene.ConnectSrcObject(acn); scene.ConnectSrcObject(x); scene.ConnectSrcObject(layer); scene.ConnectSrcObject(stack); layer.ConnectSrcObject(acn); stack.ConnectSrcObject(layer); acn.AddChannel <double>("x", 1.0); acn.ConnectToChannel(x, 0U); // require: Assert.False(node.LclTranslation.IsAnimated()); // when: node.LclTranslation.ConnectSrcObject(acn); // then: Assert.True(node.LclTranslation.IsAnimated()); }
public void AnimCurveNodeTest_AddChannel_TwoPropertiesOneChannel() { // given: var acn = new AnimCurveNode(""); // require: Assert.AreEqual(0, acn.GetChannelsCount()); Assert.AreEqual(1, CountProperties(acn)); // when: acn.AddChannel <float>("channel1", 0.0f); // then: Assert.AreEqual(2, CountProperties(acn)); Assert.AreEqual(1, acn.GetChannelsCount()); Assert.AreEqual(0, acn.GetCurveCount(0)); var prop = acn.GetFirstProperty(); Assert.True(prop.IsValid()); prop = acn.GetNextProperty(prop); Assert.True(prop.IsValid()); Assert.AreEqual("channel1", prop.GetName()); }
public void Property_MultipleStacks_GetCurveNodeOnlyGetsCurvesOnTheCurrentStack() { // given: var node = new Node("node"); var scene = new Scene("scene"); var acn1 = new AnimCurveNode("acn1"); var ac1 = new AnimCurve("ac1"); var layer1 = new AnimLayer("layer1"); var stack1 = new AnimStack("stack1"); var acn2 = new AnimCurveNode("acn2"); var ac2 = new AnimCurve("ac2"); var layer2 = new AnimLayer("layer2"); var stack2 = new AnimStack("stack2"); var time = new FbxTime(0); var key = new AnimCurveKey(time, 1.0f); ac1.KeyAdd(time, key); var time2 = new FbxTime(0); var key2 = new AnimCurveKey(time2, 1.0f); ac2.KeyAdd(time2, key2); scene.ConnectSrcObject(node); scene.ConnectSrcObject(acn1); scene.ConnectSrcObject(ac1); scene.ConnectSrcObject(layer1); scene.ConnectSrcObject(stack1); scene.ConnectSrcObject(acn2); scene.ConnectSrcObject(ac2); scene.ConnectSrcObject(layer2); scene.ConnectSrcObject(stack2); acn1.AddChannel <double>("x", 1.0); acn1.ConnectToChannel(ac1, 0U); layer1.ConnectSrcObject(acn1); stack1.ConnectSrcObject(layer1); acn2.AddChannel <double>("y", -1.0); acn2.ConnectToChannel(ac2, 0U); layer2.ConnectSrcObject(acn2); stack2.ConnectSrcObject(layer2); scene.SetCurrentAnimationStack(stack1); node.LclTranslation.ConnectSrcObject(acn1); node.LclRotation.ConnectSrcObject(acn2); // require: Assert.AreSame(stack1, scene.GetCurrentAnimationStack()); Assert.AreSame(acn1, node.LclTranslation.GetCurveNode()); Assert.Null(node.LclRotation.GetCurveNode()); // when: scene.SetCurrentAnimationStack(stack2); // then: Assert.Null(node.LclTranslation.GetCurveNode()); Assert.AreSame(acn2, node.LclRotation.GetCurveNode()); }
private void Run( ) { this.IsDone = false; this.animCurveNode = new Dictionary <string, AnimCurveNode>(); this.animCurve = new Dictionary <string, AnimCurve> (); int f = this.list.FindIndex(x => x.Contains("\"AnimCurveNode::")); if (f == -1) { return; } string[] data = new string[0]; for (int i = f; i < list.Count; i++) { if (list[i].Contains("\"AnimCurveNode::")) { data = list[i].Split(new char[] { ':', ',', '\"' }); string id = data[1].Trim(); string property = data[5].Trim(); AnimCurveNode acn = new AnimCurveNode(); acn.id = id; acn.property = property; switch (property) { case "T": for (int j = i + 2; j < (i + 5); j++) { if (list[j].Contains("d|X")) { data = list[j].Split(','); acn.value.x = -float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Y")) { data = list[j].Split(','); acn.value.y = float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Z")) { data = list[j].Split(','); acn.value.z = float.Parse(data[data.Length - 1]); } } break; case "R": for (int j = i + 2; j < (i + 5); j++) { if (list[j].Contains("d|X")) { data = list[j].Split(','); acn.value.x = float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Y")) { data = list[j].Split(','); acn.value.y = -float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Z")) { data = list[j].Split(','); acn.value.z = -float.Parse(data[data.Length - 1]); } } break; case "S": for (int j = i + 2; j < (i + 5); j++) { if (list[j].Contains("d|X")) { data = list[j].Split(','); acn.value.x = float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Y")) { data = list[j].Split(','); acn.value.y = float.Parse(data[data.Length - 1]); } else if (list[j].Contains("d|Z")) { data = list[j].Split(','); acn.value.z = float.Parse(data[data.Length - 1]); } } break; } acn.value *= this.setting.meshes.scaleFactor; this.animCurveNode.Add(id, acn); } else if (list[i].Contains("\"AnimCurve::")) { AnimCurve acn = new AnimCurve(); data = list[i].Split(new char[] { ':', ',', '\"' }); acn.id = data[1].Trim(); acn.name = data[5].Trim(); for (int j = i; j < (i + 10); j++) { if (this.list[j].Contains("KeyValueFloat: *")) { int dnValue = j + 1; string group = ""; list[dnValue] = list[dnValue].Replace("a:", "").Trim(); for (int v = dnValue; v < list.Count; v++) { if (list[v].Contains("}")) { break; } group += list[v]; } acn.data = group; break; } } this.animCurve.Add(acn.id, acn); i = i + 20; } else if (list[i].Contains("Connections: {")) { if (this.animCurveNode.Count > 0) { Connections_Run(); } this.IsDone = true; return; } } }