79 lines
1.5 KiB
Plaintext
79 lines
1.5 KiB
Plaintext
Active Bugs
|
|
===================
|
|
|
|
Drill number parsing
|
|
--------------------
|
|
|
|
The screenshot below show the problematic file:
|
|
|
|
.. image:: drill_parse_problem1.png
|
|
:align: center
|
|
|
|
The file reads::
|
|
|
|
G81
|
|
M48
|
|
METRIC
|
|
T1C00.127
|
|
T2C00.889
|
|
T3C00.900
|
|
T4C01.524
|
|
T5C01.600
|
|
T6C02.032
|
|
T7C02.540
|
|
%
|
|
T002
|
|
X03874Y08092
|
|
X03874Y23333
|
|
X06414Y08092
|
|
X06414Y23333
|
|
X08954Y08092
|
|
...
|
|
T007
|
|
X02664Y03518
|
|
X02664Y41618
|
|
X76324Y03518
|
|
X76324Y41618
|
|
...
|
|
|
|
After scaling by 10.0:
|
|
|
|
.. image:: drill_parse_problem2.png
|
|
:align: center
|
|
|
|
The code involved is:
|
|
|
|
.. code-block:: python
|
|
|
|
def __init__(self):
|
|
...
|
|
self.zeros = "T"
|
|
...
|
|
|
|
def parse_number(self, number_str):
|
|
|
|
if self.zeros == "L":
|
|
match = self.leadingzeros_re.search(number_str)
|
|
return float(number_str)/(10**(len(match.group(2))-2+len(match.group(1))))
|
|
else: # Trailing
|
|
return float(number_str)/10000
|
|
|
|
The numbers are being divided by 10000. If "L" had been specified,
|
|
the following regex would have applied:
|
|
|
|
.. code-block:: python
|
|
|
|
# Parse coordinates
|
|
self.leadingzeros_re = re.compile(r'^(0*)(\d*)')
|
|
|
|
Then the number 02664 would have been divided by 10**(4-2+1) = 10**3 = 1000,
|
|
which is what is desired.
|
|
|
|
Leading zeros weren't specified, but www.excellon.com says:
|
|
|
|
The CNC-7 uses leading zeros unless you specify
|
|
otherwise through a part program or the console.
|
|
|
|
.. note::
|
|
The parser has been modified to default to leading
|
|
zeros. |