Profilo di Fede

Nome Fede
Indirizzo email n/a
Messaggi2
  • Re: Interpretare codice
    Forum >> Principianti
    grazie del suggerimento, andro' a cercare informazioni in internet
    Saluti
  • Interpretare codice
    Forum >> Principianti
    Salve a tutti, sono nuovo del forum e pure in questo linguaggio.
    Vorrei chiedervi cortesemente se qualcuno mi puo' spiegare le varie righe di questo codice:

    # Simple GCode to Arduino hex format converter.
    # It only understands G00 and G01 codes, nothing fancy!
    #
    # It will automatically scale the object to the full 12 bit
    # range for my Arduino laser project, to change that
    # you have to modify the scale in createObject().
    #
    # Typical files I worked with have been generated with
    # http://ncplot.com/stickfont/stickfont.htm (StickFont 1.1)
    #
    # Usage: python convertGCode.py ccc.nc outputfile.cpp

    import math
    import sys

    def createObject(name, cmds):
    minx = miny = 10000000
    maxx = maxy = 0
    string = ""
    for cmd in cmds:
    if cmd0 == 2:
    minx = min(minx,cmd1)
    miny = min(miny,cmd2)
    maxx = max(maxx,cmd1)
    maxy = max(maxy,cmd2)

    string += "const unsigned short draw_" + name + "[] PROGMEM = {\n";
    laserState = False

    biggestSide = max(maxx-minx, maxy-miny)
    # scale to the laser range
    scale = 4095. / biggestSide;
    print ("bounding box x: ", minx, maxx)
    print ("bounding box y: ", miny, maxy)
    print ("scale: ", scale)
    for cmd in cmds:
    if cmd0 == 0:laserState = False
    if cmd0 == 1:laserState = True
    if cmd0 == 2:
    x = int(math.floor((cmd1-minx) * scale))
    y = int(math.floor((cmd2-miny) * scale))
    if laserState:
    x += 0x8000
    string += hex(x) + "," + hex(y) + ",\n"
    string += "};\n"
    return string

    def run(input, output):
    result = ""
    f = open(input);
    lines = f.readlines()
    drawing = False
    posx = posy = 0.

    cmds = []
    for l in lines:
    if l.startswith("G00"):
    if drawing:
    cmds.append((0,))
    drawing = False
    elif l.startswith("G01"):
    drawing = True
    cmds.append((1,))
    elif l.startswith("X"):
    parts = l.split("Y")
    newposx = float(parts0[1:])
    newposy = float(parts1)
    cmds.append((2,newposx,newposy))
    posx = newposx
    posy = newposy

    result = createObject("object", cmds)

    o = open(output,"w")
    o.write(result)

    if __name__ == "__main__":
    if len(sys.argv) < 3:
    print ("Usage: convertGCode.py inputfile.nc outputfile.cpp")
    else:
    run(sys.argv1, sys.argv2)


    che trasforma un codice in Gcode come questo:
    G00Z0.0
    X50.8555Y60.9307
    G01Z0,0F0,0
    X56.7262Y57.1182
    X58.9047Y60.4729
    G00Z0.0

    in questo:
    const unsigned short draw_object[] PROGMEM = {
    0x0,0x793,
    0x8baa,0x0,
    0x8fff,0x6aa,
    };

    Il fine ultimo e' di poter ricostruire i passaggi per fare lo stesso convertitore con altro linguaggio (java), di cui sono piu pratico
    Grazie per l'aiuto