【问题标题】:Where is this white space coming from?这个空白是从哪里来的?
【发布时间】:2019-11-18 22:01:27
【问题描述】:

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

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

外观示例:

我的输出外观示例:

我尝试从可疑代码片段中删除 \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 之间的空格:r"\1 %0."+str(round_)+"f" if round_>0 else r"\1 %d")%round(float(r.group(2)),round_),
  • 感谢您的提示,我确实也尝试过那个,但它破坏了我的脚本。它破坏了组引用。

标签: python rounding inkscape g-code cnc


【解决方案1】:

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

现在,我看到我们需要在 \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 函数而不是% 我猜...

【讨论】:

  • 谢谢你是对的,这也是我所期望的。我应该在代码的第一个空白处添加一个字符,看看是否是那个地方。确实添加了这个作品。但是,它现在完全弄乱了生成的 gcode。也许最初的开发者从来没有完成轮函数。
  • 你能解释一下为什么这会弄乱你的代码吗?我的意思是,我只是希望这会删除空间而不是别的......
  • 另外,您发布的pastebin代码中没有round函数!哦,我错过了什么吗?
  • 对不起,我犯了一个错误,我的解决方案不知何故还删除了单个减号“-”,因此将负数变成了正数。我修好了它。现在脚本只有一个问题,但我想我必须为那个问题创建一个新主题,因为这是一个非常不同的问题,需要一个非常清晰的书面描述。这是关于 gcode 中的工具更改,现在应用于绘制的每条路径,而工具更改只应用于每次图层更改。
  • 哦,好吧!无论您使用什么来代替---,只要确保它永远不会出现在您正在处理的代码中......否则只会导致输出错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2020-07-31
  • 2018-09-25
相关资源
最近更新 更多