Ejemplo n.º 1
0
    public void ImportFormula(DsonTypes.DsonDocument doc, DsonTypes.Formula formula)
    {
        FormulaRecipe recipe = new FormulaRecipe {
            Output     = ConvertChannelUri(doc, formula.output),
            Operations = new List <OperationRecipe>()
        };

        SplineOperationBuilder splineOperationBuilder = new SplineOperationBuilder();

        foreach (DsonTypes.Operation operation in formula.operations)
        {
            ImportOperation(splineOperationBuilder, recipe.Operations, doc, operation);
        }

        if (formula.stage == DsonTypes.Stage.Sum)
        {
            recipe.Stage = FormulaRecipe.FormulaStage.Sum;
        }
        else if (formula.stage == DsonTypes.Stage.Multiply)
        {
            recipe.Stage = FormulaRecipe.FormulaStage.Multiply;
        }
        else
        {
            throw new InvalidOperationException();
        }

        formulaRecipes.Add(recipe);
    }
Ejemplo n.º 2
0
    private void ImportOperation(SplineOperationBuilder splineOperationBuilder, List <OperationRecipe> operations, DsonTypes.DsonDocument doc, DsonTypes.Operation operation)
    {
        if (operation.op == DsonTypes.Operator.Push)
        {
            if (operation.url != null)
            {
                splineOperationBuilder.ConfirmInactive();
                string channelRef = ConvertChannelUri(doc, operation.url);
                operations.Add(OperationRecipe.MakePushChannel(channelRef));
            }
            else
            {
                Object val = operation.val;
                switch (val)
                {
                case JArray arrayValue:
                    float[] values = arrayValue.ToObject <float[]>();
                    splineOperationBuilder.AddValueArray(values);
                    break;

                default:
                    if (splineOperationBuilder.Active)
                    {
                        splineOperationBuilder.AddSize(Convert.ToInt32(operation.val));
                    }
                    else
                    {
                        float value = Convert.ToSingle(operation.val);
                        operations.Add(OperationRecipe.MakePushConstant(value));
                    }
                    break;
                }
            }
        }
        else if (operation.op == DsonTypes.Operator.Add)
        {
            splineOperationBuilder.ConfirmInactive();
            operations.Add(OperationRecipe.Make(OperationRecipe.OperationKind.Add));
        }
        else if (operation.op == DsonTypes.Operator.Sub)
        {
            splineOperationBuilder.ConfirmInactive();
            operations.Add(OperationRecipe.Make(OperationRecipe.OperationKind.Sub));
        }
        else if (operation.op == DsonTypes.Operator.Mult)
        {
            splineOperationBuilder.ConfirmInactive();
            operations.Add(OperationRecipe.Make(OperationRecipe.OperationKind.Mul));
        }
        else if (operation.op == DsonTypes.Operator.Div)
        {
            splineOperationBuilder.ConfirmInactive();
            operations.Add(OperationRecipe.Make(OperationRecipe.OperationKind.Div));
        }
        else if (operation.op == DsonTypes.Operator.SplineTcb)
        {
            operations.Add(splineOperationBuilder.Build());
        }
    }