CreateSurface() public method

Provides the surface of this function if it has been statically defined
public CreateSurface ( DataDictionary.Interpreter.InterpretationContext context, Parameter xParam, Parameter yParam, ExplanationPart explain ) : Surface
context DataDictionary.Interpreter.InterpretationContext the context used to create the surface
xParam Parameter The X axis of this surface
yParam Parameter The Y axis of this surface
explain ExplanationPart
return Surface
Ejemplo n.º 1
0
        /// <summary>
        ///     Provides the surface of this function if it has been statically defined
        /// </summary>
        /// <param name="context">the context used to create the surface</param>
        /// <param name="xParam">The X axis of this surface</param>
        /// <param name="yParam">The Y axis of this surface</param>
        /// <param name="explain"></param>
        /// <returns>The surface which corresponds to this expression</returns>
        public override Surface CreateSurface(InterpretationContext context, Parameter xParam, Parameter yParam,
                                              ExplanationPart explain)
        {
            Surface retVal = base.CreateSurface(context, xParam, yParam, explain);

            if (Term != null)
            {
                retVal = Surface.createSurface(xParam, yParam, GetValue(context, explain), explain);
            }
            else if (Expression != null)
            {
                if (UnaryOp == null)
                {
                    retVal = Expression.CreateSurface(context, xParam, yParam, explain);
                }
                else
                {
                    if (UnaryOp == Minus)
                    {
                        retVal = Expression.CreateSurface(context, xParam, yParam, explain);
                        retVal.Negate();
                    }
                    else
                    {
                        AddError("Cannot create surface with unary op " + UnaryOp, RuleChecksEnum.ExecutionFailed);
                    }
                }
            }
            retVal.XParameter = xParam;
            retVal.YParameter = yParam;

            return(retVal);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Provides the surface of this function if it has been statically defined
        /// </summary>
        /// <param name="context">the context used to create the surface</param>
        /// <param name="xParam">The X axis of this surface</param>
        /// <param name="yParam">The Y axis of this surface</param>
        /// <param name="explain"></param>
        /// <returns>The surface which corresponds to this expression</returns>
        public override Surface CreateSurface(InterpretationContext context, Parameter xParam, Parameter yParam,
                                              ExplanationPart explain)
        {
            Surface retVal = base.CreateSurface(context, xParam, yParam, explain);

            Function function = GetFunction(context, explain);
            Cast     cast     = function as Cast;

            if (cast != null)
            {
                // In case of cast, just take the surface of the enclosed expression
                Expression actual = ActualParameters[0];
                retVal = actual.CreateSurface(context, xParam, yParam, explain);
            }
            else
            {
                if (function == null)
                {
                    function = Called.GetCalled(context, explain) as Function;
                }

                if (function != null)
                {
                    Parameter xAxis;
                    Parameter yAxis;
                    SelectXandYAxis(xParam, yParam, function, out xAxis, out yAxis);
                    if (xAxis != null || yAxis != null)
                    {
                        int token = context.LocalScope.PushContext();
                        function.AssignParameters(context, AssignParameterValues(context, function, true, explain));
                        retVal = function.CreateSurfaceForParameters(context, xAxis, yAxis, explain);
                        context.LocalScope.PopContext(token);
                    }
                    else
                    {
                        IValue value = GetValue(context, explain);
                        if (value != null)
                        {
                            retVal = Surface.createSurface(value, xParam, yParam);
                        }
                        else
                        {
                            throw new Exception("Cannot create surface for expression");
                        }
                    }
                }
                else
                {
                    AddError("Cannot determine called function", RuleChecksEnum.SemanticAnalysisError);
                }
            }
            retVal.XParameter = xParam;
            retVal.YParameter = yParam;

            return(retVal);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Provides the surface of this function if it has been statically defined
        /// </summary>
        /// <param name="context">the context used to create the surface</param>
        /// <param name="xParam">The X axis of this surface</param>
        /// <param name="yParam">The Y axis of this surface</param>
        /// <param name="explain"></param>
        /// <returns>The surface which corresponds to this expression</returns>
        public override Surface CreateSurface(InterpretationContext context, Parameter xParam, Parameter yParam,
                                              ExplanationPart explain)
        {
            Surface retVal = base.CreateSurface(context, xParam, yParam, explain);

            if (xParam == null || yParam == null)
            {
                AddError("Cannot have null parameters for Function expression " + ToString(), RuleChecksEnum.ExecutionFailed);
            }
            else
            {
                int       token = context.LocalScope.PushContext();
                Parameter xAxis = Parameters[0];
                Parameter yAxis = Parameters[1];
                context.LocalScope.SetSurfaceParameters(xAxis, yAxis);
                retVal = Expression.CreateSurface(context, xAxis, yAxis, explain);
                context.LocalScope.PopContext(token);
            }
            retVal.XParameter = xParam;
            retVal.YParameter = yParam;

            return(retVal);
        }
        /// <summary>
        ///     Creates the graph for the unbount parameters provided
        /// </summary>
        /// <param name="context"></param>
        /// <param name="expression"></param>
        /// <param name="function"></param>
        /// <param name="unbound"></param>
        /// <param name="explain"></param>
        /// <returns></returns>
        private Surface CreateSurfaceForUnbound(InterpretationContext context, Expression expression, Function function,
            List<Parameter> unbound, ExplanationPart explain)
        {
            Surface retVal;

            if (unbound.Count == 0)
            {
                if (function != null)
                {
                    Parameter xAxis = null;

                    if (function.FormalParameters.Count > 0)
                    {
                        xAxis = (Parameter) function.FormalParameters[0];
                    }
                    Parameter yAxis = null;
                    if (function.FormalParameters.Count > 1)
                    {
                        yAxis = (Parameter) function.FormalParameters[1];
                    }
                    retVal = function.CreateSurfaceForParameters(context, xAxis, yAxis, explain);
                }
                else
                {
                    retVal = Surface.createSurface(expression.GetValue(context, explain), null, null);
                }
            }
            else if (unbound.Count == 1)
            {
                Graph graph = createGraphForUnbound(context, expression, function, unbound, explain);
                retVal = Surface.createSurface(graph.Function, unbound[0], null);
            }
            else
            {
                if (function == null)
                {
                    retVal = expression.CreateSurface(context, unbound[0], unbound[1], explain);
                }
                else
                {
                    retVal = function.CreateSurfaceForParameters(context, unbound[0], unbound[1], explain);
                }
            }
            return retVal;
        }