79 lines
1.5 KiB
ReStructuredText
79 lines
1.5 KiB
ReStructuredText
|
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.
|