白色空间从哪里来?

时间:2019-07-09 10:55:32

标签: python rounding inkscape g-code cnc

我正在对python脚本的输出进行后期处理,该脚本会为自制笔式绘图仪生成GCODE。

后处理器在关键信息之后(在每个X和Y坐标值之后)在我的GCODE中添加一个空格,导致GCODE无效。

外观示例: should

输出内容示例: looks

我尝试从可疑的代码段中删除\ s运算符,我尝试在各个区域中使用.lstrip()删除空白,但无济于事。我还删除了代码中存在的所有双精度空格,到目前为止没有任何帮助。

我怀疑这段代码正在这样做:

def round_coordinates(self,parameters) :
    try: 
        round_ = int(parameters)
    except :    
        self.error("Bad parameters for round. Round should be an integer! \n(Parameters: '%s')"%(parameters), "error")      
    gcode = ""
    for s in self.gcode.split("\n"):
        for a in "xyzijkaf" :
            r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
            if r : 

                if r.group(2)!="":
                    s = re.sub(
                                r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
                                (r"\1 %0."+str(round_)+"f" if round_>0 else r"\1 %d")%round(float(r.group(2)),round_),
                                s)
        gcode += s + "\n"
    self.gcode = gcode

我希望能够找出空格的来源,我可能未显示正确的代码,所以我已经链接了源文件。它出现在第2648行,在第5440行,还存在一个似乎相关的舍入函数。

这是完整代码的粘贴框: https://pastebin.com/s8J1H8r6

1 个答案:

答案 0 :(得分:0)

我附上了一个例子,可以运行检查此问题。我觉得这很有趣,但是我找不到一种很好的方法来解决它……如果碰到它,我会用更好的答案来更新它。

现在,我看到我们需要在\1%d之间放置一些字符,以便代码正常工作。我不会使用以下方法解决问题,但至少可以奏效。我所做的是将---放在两者之间,然后使用replace函数将其删除。

import re
def round_coordinates() :
    round_ = 5 

    gcode = """O1000
T1 M6
G0 G90 G40 G21 G17 G94 G80
G54 X-75 Y-25 S500 M3  
G43 Z100 H1
Z5
G1 Z-20 F100
X-50 M8            
Y0                 
X0 Y50               
X50 Y0             
X0 Y-50           
X-50 Y0      
Y25          
X-75  
G0 Z100
M30"""

    for s in gcode.split("\n"):
        for a in "xyzijkaf" :
            r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
            if r : 

                if r.group(2)!="":
                    s = re.sub(
                                r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
                                (r"\1---%0."+str(round_)+"f" if round_>0 else r"\1---%d")%round(float(r.group(2)),round_),
                                s)
                    s = s.replace("---", "")
        gcode += s + "\n"
    return gcode

print(round_coordinates())

PS。我会使用format函数代替%我猜...