public CreateSurface ( DataDictionary.Interpreter.InterpretationContext context, Parameter xParam, Parameter yParam, |
||
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 | ||
return | Surface |
/// <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); }
/// <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); }
/// <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; }