首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析gcode文件以提取坐标

解析gcode文件以提取坐标
EN

Stack Overflow用户
提问于 2018-03-10 22:15:09
回答 1查看 3.4K关注 0票数 0

我有一个充满文本的gcode文件,特别是在机器上。我正在尝试读取文件,剥离无用的信息,这样我就可以在将它们发送到机器之前对协调好的执行操作。

到目前为止,我有:

代码语言:javascript
复制
file = open('TestCube.gcode','r')
lines = file.readlines()
file.close

for line in lines:
    line = line.strip() 

现在我有了文件中所有行的列表,我应该如何继续获取相关的X和Y坐标?

fo TestCube.gcode示例:

代码语言:javascript
复制
;TYPE:SKIN
G1 F1200 X-9.914 Y-9.843 E3.36222
G0 F9000 X-9.843 Y-9.914
G1 F1200 X9.914 Y9.843 E3.65844
G0 F9000 X9.914 Y9.702
G1 F1200 X-9.702 Y-9.914 E3.95254
G0 F9000 X-9.560 Y-9.914
G1 F1200 X9.914 Y9.560 E4.24451
G0 F9000 X9.914 Y9.419
G1 F1200 X-9.419 Y-9.914 E4.53437
G0 F9000 X-9.277 Y-9.914
G1 F1200 X9.914 Y9.277 E4.82211
G0 F9000 X9.914 Y9.136
G1 F1200 X-9.136 Y-9.914 E5.10772
G0 F9000 X-8.995 Y-9.914
G1 F1200 X9.914 Y8.995 E5.39123
G0 F9000 X9.914 Y8.853
G1 F1200 X-8.853 Y-9.914 E5.67260

编辑:

代码语言:javascript
复制
import re

file = open('TestCube.gcode','r')
gcode = file.readlines()

for line in gcode:
    coord = re.findall(r'[XY]-\d.\d\d\d', line)
    if coord:
        print("{} - {}".format(coord[0], coord[1]))
EN

回答 1

Stack Overflow用户

发布于 2018-03-11 00:20:32

Regex似乎做到了这一点:

代码语言:javascript
复制
import re

gcode = [
    ';TYPE:SKIN',
    'G1 F1200 X-9.914 Y-9.843 E3.36222',
    'G0 F9000 X-9.843 Y-9.914',
    'G1 F1200 X9.914 Y9.843 E3.65844',
    'G0 F9000 X9.914 Y9.702',
    'G1 F1200 X-9.702 Y-9.914 E3.95254',
    'G0 F9000 X-9.560 Y-9.914',
    'G1 F1200 X9.914 Y9.560 E4.24451',
    'G0 F9000 X9.914 Y9.419',
    'G1 F1200 X-9.419 Y-9.914 E4.53437',
    'G0 F9000 X-9.277 Y-9.914',
    'G1 F1200 X9.914 Y9.277 E4.82211',
    'G0 F9000 X9.914 Y9.136',
    'G1 F1200 X-9.136 Y-9.914 E5.10772',
    'G0 F9000 X-8.995 Y-9.914',
    'G1 F1200 X9.914 Y8.995 E5.39123',
    'G0 F9000 X9.914 Y8.853',
    'G1 F1200 X-8.853 Y-9.914 E5.67260'
    ]

for line in gcode:
    coord = re.findall(r'[XY]-\d.\d\d\d', line)
    if coord:
        print("{} - {}".format(coord[0], coord[1]))

结果:

代码语言:javascript
复制
X-9.914 - Y-9.843
X-9.843 - Y-9.914
X-9.702 - Y-9.914
X-9.560 - Y-9.914
X-9.419 - Y-9.914
X-9.277 - Y-9.914
X-9.136 - Y-9.914
X-8.995 - Y-9.914
X-8.853 - Y-9.914

编辑:

请尝试以下操作。我已经将您的代码与我提供的示例集成在一起,并进行了一些调整:

代码语言:javascript
复制
import re

with open('PI_25mm_cube.gcode') as gcode:
    for line in gcode:
        line = line.strip()
        coord = re.findall(r'[XY].?\d+.\d+', line)
        if coord:
            print("{} - {}".format(coord[0], coord[1]))

通过用with替换open,它可以防止您忘记close()文件,并减少导致任何内存问题的风险,据我所知。

由于不清楚您的代码是否将用于其他gcode文件,我的初始正则表达式可能不适合。我使用Cura创建了一个gcode文件,并检查了所提供的坐标。基于这些信息,您可能会发现模式'[XY].?\d+.\d+'更有用。Regex101是一个很好的测试这些功能的网站

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49210059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档