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); } }
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; } }
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); }
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); } }
private void SetupMultiply(Database db) { Computation = ComputationTypes.Multiplication; SetupDualArguments(db, "*"); }
private void SetupDivide(Database db) { Computation = ComputationTypes.Division; SetupDualArguments(db, "/"); }
private void SetupSubtract(Database db) { Computation = ComputationTypes.Subtraction; SetupDualArguments(db, "-"); }
private void SetupAdd(Database db) { Computation = ComputationTypes.Addition; SetupDualArguments(db, "+"); }
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(); }