Fede
Profilo di
Nome | Fede |
---|---|
Indirizzo email | n/a |
Messaggi | 2 |
-
- 2018-02-15 13:31:07
- Re: Interpretare codice
- Forum >> Principianti
- grazie del suggerimento, andro' a cercare informazioni in internet
Saluti
-
- 2018-02-14 22:39:45
- 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