如何检查 IF 语句中的数字是否已更改,然后才执行脚本?

How to check if a number inside an IF statement has changed and only then execute a script?

我正在为笔式绘图仪创建一个工具更换器,它只会在每次源文件移动以从新层(在 inkscape 内)读取数据时更改工具。该脚本在每个层更改时注入一段 GCODE(基于 CNC 的机器需要知道它应该做什么的代码)。

我已经准备好所有变量,只需要知道如何查看层数在变为“2”之前保持“1”的时间,以便脚本知道何时注入 'tool change gcode' .

经过几个小时搜索可能的解决方案后,我还是没能成功。我尝试了一些 while 语句,但都失败了,我什至让我的软件崩溃了几次。我已经走到现在用 're.sub' 从它的字符中剥离所有层数据并使变量 'layer number' 包含'1'或'2'或'3'(应该能够扩展到 9 或更远)。

        try :
            self.last_used_tool == None
        except :
            self.last_used_tool = None
        print_("working on curve")
        print_(curve)

        if tool != self.last_used_tool :
            layernumber = re.sub('[^0-9]','', layer.get(inkex.addNS('label','inkscape'))) 
            g += ("Layer %s" % layernumber + "\n;(Change tool to %s)\n" % re.sub("\"'\(\)\\"," ",tool["name"]) ) + tool["tool change gcode"] + "\n"

此脚本有效,但在此脚本中 'self.last_used_tool' 在其他任何地方都不存在,因此我认为它是一个伪代码。

现在if语句每次开始在新路径上工作时都会输出工具更改gcode,导致一层中同一工具的多次工具更改。我需要工具更改仅在它第一次移动到新层时发生。

我正在寻找一种方法来让 if 语句查看层数是上升还是下降,并仅在这种情况下相应地更改工具。稍后我可能不会检查层号,而是检查工具号,但是,就目前而言,在我的工作方式中,我更清楚地使用层号,因为无论如何该数字都与工具号相对应,并且直觉上我觉得这样做更清楚。

感谢您的时间和精力,我希望有人能够帮助我找到解决方案。脚本完成后,我会将其发布到网上,以便其他人也可以使用它。我正在处理的脚本是一个旧的开源项目,该项目已被放弃并且显然缺少一些功能。我已经修复了大部分扩展(包括语言),但工具更改从未奏效。

您似乎缺少设置

self.last_used_tool = tool

在您的 if 块的末尾。没有它,self.last_used_tool 将永远是 None 并且永远不会比较等于 tool.