Example #1
0
            private void SetupDualArguments(Database db, string operatorSign)
            {
                string[] parts = Value.Split(operatorSign.ToCharArray());
                if (parts.Length != 2)
                {
                    Computation = ComputationTypes.None;
                    return;
                }

                foreach (string p in parts)
                {
                    string text = p.Trim();

                    ComputationArgument arg = new ComputationArgument();

                    if (double.TryParse(text, out arg.Constant))
                    {
                        arg.IsContant = true;
                    }
                    else
                    {
                        arg.IsContant     = false;
                        arg.ItemReference = db.FindItem(text);
                        if (arg.ItemReference == null)
                        {
                            Computation = ComputationTypes.None;
                            return;
                        }

                        arg.ItemReference.Changed += DependentItem_Changed;
                    }
                    Arguments.Add(arg);
                }
            }
Example #2
0
    public IK_Chain(Transform target, Transform pole, ComputationTypes type)
    {
        _target = target;
        _pole   = pole;
        //_inverted = inverted;


        //_IK = new NgonIK_Incremental();

        switch (type)
        {
        case ComputationTypes.Convex_Spline:
            _IK = new SplineConvexIK()
            {
                ConvexityCorrections = true, TargetCorrections = true
            };
            break;

        case ComputationTypes.Fast_Incremental:
            _IK = new NgonIK_Incremental()
            {
                MixType = NgonIK_Incremental.MixTypes.Forward
            };
            break;
        }
    }
Example #3
0
            private void SetupAssignment(Database db)
            {
                Computation = ComputationTypes.Assignment;

                ComputationArgument arg = new ComputationArgument();

                arg.IsContant     = false;
                arg.ItemReference = db.FindItem(Value);
                if (arg.ItemReference == null)
                {
                    return;
                }
                arg.ItemReference.Changed += DependentItem_Changed;
                Arguments.Add(arg);
            }
Example #4
0
            internal void SetupValue(Database db)
            {
                foreach (var arg in Arguments)
                {
                    if (arg.ItemReference != null)
                    {
                        arg.ItemReference.Changed -= DependentItem_Changed;
                    }
                }
                Arguments.Clear();

                Value       = RawValue;
                VectorValue = Vector3F.Zero;
                DoubleValue = double.MinValue;
                Computation = ComputationTypes.None;

                double v = double.MinValue;

                if (double.TryParse(Value, out v))
                {
                    DoubleValue = v;
                    return;
                }

                if (Value.Contains("+"))
                {
                    SetupAdd(db);
                }
                else if (Value.Contains("-"))
                {
                    SetupSubtract(db);
                }
                else if (Value.Contains("*"))
                {
                    SetupMultiply(db);
                }
                else if (Value.Contains("/"))
                {
                    SetupDivide(db);
                }
                else if (Value != string.Empty && Value[0] == '_')
                {
                    SetupAssignment(db);
                }
            }
Example #5
0
 private void SetupMultiply(Database db)
 {
     Computation = ComputationTypes.Multiplication;
     SetupDualArguments(db, "*");
 }
Example #6
0
            private void SetupDivide(Database db)
            {
                Computation = ComputationTypes.Division;

                SetupDualArguments(db, "/");
            }
Example #7
0
 private void SetupSubtract(Database db)
 {
     Computation = ComputationTypes.Subtraction;
     SetupDualArguments(db, "-");
 }
Example #8
0
 private void SetupAdd(Database db)
 {
     Computation = ComputationTypes.Addition;
     SetupDualArguments(db, "+");
 }
Example #9
0
    public IK_Chain(IEnumerable <Transform> points, Transform target, Transform pole, ComputationTypes type)
        : this(target, pole, type)
    {
        if (points == null)
        {
            return;
        }

        _points.AddRange(points);
        _boundPoints = _points.Take(_points.Count - 1).ToArray();
    }