public IResult Invoke(string opName, IGeometry geometry, object[] args)
        {
            var opCode = OverlayOpCode(opName);

            // if not an overlay op, do the default
            if (opCode < 0)
            {
                return(_chainOp.Invoke(opName, geometry, args));
            }
            return(InvokeValidatedOverlayOp(opCode, geometry, args));
        }
        /// <summary>
        /// Invokes the named operation
        /// </summary>
        /// <param name="op">The name of the operation</param>
        /// <param name="geometry">The geometry to process</param>
        /// <param name="args">The arguments to the operation (which may be typed as Strings)</param>
        /// <exception cref="Exception">If some error was encountered trying to find or process the operation</exception>
        public IResult Invoke(XmlTestType op, IGeometry geometry, Object[] args)
        {
            string opName     = op.ToString();
            bool   isBufferOp = opName.Equals("buffer", StringComparison.InvariantCultureIgnoreCase);

            // if not a buffer op, do the default
            if (!isBufferOp)
            {
                return(_chainOp.Invoke(opName, geometry, args));
            }
            ParseArgs(args);
            return(InvokeBufferOpValidated(geometry /*, args */));
        }
        public IResult Invoke(String opName, Geometry geometry, Object[] args)
        {
            RunTeeOp(opName, geometry, args);

            return(_chainOp.Invoke(opName, geometry, args));
        }