Пример #1
0
        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));
        }
Пример #2
0
        public void FbxAnimCurveNode_Create_HasNamespacePrefix()
        {
            // given:
            var obj = new AnimCurveNode("asdf");

            // then:
            Assert.AreEqual("AnimCurveNode::", obj.GetNameSpacePrefix());
        }
Пример #3
0
        public void AnimCurveNodeTest_Create_NoChannels()
        {
            // given:

            // when:
            var acn = new AnimCurveNode("");

            // then:
            Assert.AreEqual(0, acn.GetChannelsCount());
            Assert.AreEqual(1, CountProperties(acn));
        }
Пример #4
0
        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());
        }
Пример #5
0
        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());
        }
Пример #6
0
        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());
        }
Пример #7
0
    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;
            }
        }
    }