Forum >> Principianti >> Interpretare codice

Pagina: 1

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


Cioè fammi capire, vuoi che qualcuno ti descriva il funzionamento dello script, anche piuttosto lunghetto, per permetterti di tradurlo in Java e probabilmente non vederti più su Python? Non ha molto senso permettimi.

Uso il mio tempo libero per aiutare nella comprensione di questo linguaggio sempre molto volentieri, lo faccio quasi mai scrivendo codice ma cercando invece di indirizzare verso la soluzione e/o la comprensione di una determinata problematica. Ma la tua richiesta di "traduzione" è una cosa nuova, mi spiazza e non mi piace per nulla. Posso suggerirti di studiare le basi del linguaggio da una qualsiasi risorsa online e cercare di capire i vari passaggi dello script, che non mi sembrano particolarmente complicati.

Cya
grazie del suggerimento, andro' a cercare informazioni in internet
Saluti


Pagina: 1



Esegui il login per scrivere una risposta.