/// <summary> /// Parse the command arguments for the bounding-box command. /// </summary> /// <param name="args"></param> /// <param name="idx"></param> /// <param name="switchOut"></param> /// <returns></returns> public override int Parse(string[] args, int idx, out Switch switchOut) { // check next argument. if (args.Length < idx + 3) { throw new SwitchParserException("None", "Invalid bounding-box command!"); } bool topOk = false, bottomOk = false, leftOk = false, rightOk = false; float top = 0, bottom = 0, left = 0, right = 0; for (int currentArg = idx; currentArg < idx + 4; currentArg++) { string[] argSplit = args[currentArg].Split('='); if (argSplit.Length != 2 || argSplit[0] == null || argSplit[1] == null) { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } argSplit[0] = argSplit[0].ToLower(); argSplit[0] = SwitchParser.RemoveQuotes(argSplit[0]); argSplit[1] = SwitchParser.RemoveQuotes(argSplit[1]); if (argSplit[0] == "top") { if ( !float.TryParse(argSplit[1], NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out top)) { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } topOk = true; } else if (argSplit[0] == "left") { if ( !float.TryParse(argSplit[1], NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out left)) { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } leftOk = true; } else if (argSplit[0] == "bottom") { if ( !float.TryParse(argSplit[1], NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out bottom)) { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } bottomOk = true; } else if (argSplit[0] == "right") { if ( !float.TryParse(argSplit[1], NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out right)) { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } rightOk = true; } else { throw new SwitchParserException(args[currentArg], "Invalid boundary condition for boundingbox command!"); } } if (!(bottomOk && topOk && leftOk && rightOk)) { throw new SwitchParserException("None", "Invalid bounding-box command, at least one of the boundaries is missing!"); } // everything ok, take the next argument as the filename. switchOut = new SwitchFilterBoundingBox() { Top = top, Bottom = bottom, Left = left, Right = right }; return(4); }