/// <summary>
        ///     Combines two surfaces using the operator of this binary expression
        /// </summary>
        /// <param name="leftSurface"></param>
        /// <param name="rightSurface"></param>
        /// <returns></returns>
        private Surface CombineSurface(Surface leftSurface, Surface rightSurface)
        {
            Surface retVal = null;

            switch (Operation)
            {
                case Operator.Add:
                    retVal = leftSurface.AddSurface(rightSurface);
                    break;

                case Operator.Sub:
                    retVal = leftSurface.SubstractSurface(rightSurface);
                    break;

                case Operator.Mult:
                    retVal = leftSurface.MultiplySurface(rightSurface);
                    break;

                case Operator.Div:
                    retVal = leftSurface.DivideSurface(rightSurface);
                    break;
            }

            return retVal;
        }
        /// <summary>
        ///     Combines two surfaces using the operator of this binary expression
        /// </summary>
        /// <param name="leftSurface"></param>
        /// <param name="rightSurface"></param>
        /// <returns></returns>
        private Surface combineSurface(Surface leftSurface, Surface rightSurface)
        {
            Surface retVal = null;

            switch (Operation)
            {
                case OPERATOR.ADD:
                    retVal = leftSurface.AddSurface(rightSurface);
                    break;

                case OPERATOR.SUB:
                    retVal = leftSurface.SubstractSurface(rightSurface);
                    break;

                case OPERATOR.MULT:
                    retVal = leftSurface.MultiplySurface(rightSurface);
                    break;

                case OPERATOR.DIV:
                    retVal = leftSurface.DivideSurface(rightSurface);
                    break;
            }

            return retVal;
        }