diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b0b3e49..35fb6f6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +7.05.2021 + + - fixed the Gerber parser to work for the case of having coordinates with negative values and the trailing zeros are removed and leading zeros are kept + 3.05.2021 - changed the save_project() method such that when the project is saved as compressed now the compression is first done in memory and only after that the app will attempt to write it to a file on disk diff --git a/appParsers/ParseGerber.py b/appParsers/ParseGerber.py index bdf60c22..7f19ede8 100644 --- a/appParsers/ParseGerber.py +++ b/appParsers/ParseGerber.py @@ -2647,20 +2647,20 @@ def parse_gerber_number(strnumber, int_digits, frac_digits, zeros): """ Parse a single number of Gerber coordinates. - :param strnumber: String containing a number in decimal digits - from a coordinate data block, possibly with a leading sign. - :type strnumber: str - :param int_digits: Number of digits used for the integer - part of the number - :type frac_digits: int - :param frac_digits: Number of digits used for the fractional - part of the number - :type frac_digits: int - :param zeros: If 'L', leading zeros are removed and trailing zeros are kept. Same situation for 'D' when - no zero suppression is done. If 'T', is in reverse. - :type zeros: str - :return: The number in floating point. - :rtype: float + :param strnumber: String containing a number in decimal digits + from a coordinate data block, possibly with a leading sign. + :type strnumber: str + :param int_digits: Number of digits used for the integer + part of the number + :type frac_digits: int + :param frac_digits: Number of digits used for the fractional + part of the number + :type frac_digits: int + :param zeros: If 'L', leading zeros are removed and trailing zeros are kept. Same situation for 'D' when + no zero suppression is done. If 'T', is in reverse. + :type zeros: str + :return: The number in floating point. + :rtype: float """ ret_val = None @@ -2670,6 +2670,19 @@ def parse_gerber_number(strnumber, int_digits, frac_digits, zeros): if zeros == 'T': int_val = int(strnumber) - ret_val = (int_val * (10 ** ((int_digits + frac_digits) - len(strnumber)))) * (10 ** (-frac_digits)) + if int_val >= 0: + ret_val = (int_val * (10 ** ((int_digits + frac_digits) - len(strnumber)))) * (10 ** (-frac_digits)) + else: + # negative number therefore we have a '-' char in front of the strnumber + ret_val = (int_val * (10 ** ((int_digits + frac_digits + 1) - len(strnumber)))) * (10 ** (-frac_digits)) + + # if strnumber[0] == '-': + # int_val = strnumber[:(int_digits+1)] + # frac_val = strnumber[(int_digits+1):] + # else: + # int_val = strnumber[:int_digits] + # frac_val = strnumber[(int_digits):] + # ret_val = '%s.%s' % (int_val, frac_val) + # ret_val = float(ret_val) return ret_val