Откуда этот пробел? - PullRequest
       64

Откуда этот пробел?

0 голосов
/ 09 июля 2019

Я выполняю постобработку вывода из скрипта Python, который генерирует GCODE для моего доморощенного перьевого плоттера.

Постпроцессор добавляет пробел в мой GCODE сразу после важной информации (после каждого Xи значение координаты Y), в результате чего 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 голосов
/ 09 июля 2019

Я приложил пример, который можно запустить, чтобы проверить это.Я нахожу это интересным, но я не смог найти способ решить это хорошим способом ... Я обновлю это с лучшим ответом, если я столкнусь с этим.

Пока я вижу, что нам нужнопоместить код между \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 функцию вместо % Я думаю ...

...