@ -15,7 +15,7 @@ example_usage = "-i test_data/Test_H.svg -o test_data/test.gcode"
svg_shapes = set ( [ ' rect ' , ' circle ' , ' ellipse ' , ' line ' , ' polyline ' , ' polygon ' , ' path ' ] )
gcode_file_path = " "
def gcode_write ( gcode ) :
def gcode_write ( gcode _file, gcode ) :
if ( debug ) :
for cmd in gcode . split ( " \n " ) :
if len ( cmd ) :
@ -53,7 +53,8 @@ def read_input_file(svg_file_path):
print ( " unable to read svg file: \n " + str ( e ) )
sys . exit ( 1 )
def generate_gcode ( svg_file_root_tree , gcode_file ) :
def generate_gcode ( svg_file_root_tree , gcode_file ) :
generated_points_count = 0
width = svg_file_root_tree . get ( ' width ' )
height = svg_file_root_tree . get ( ' height ' )
if width == None or height == None :
@ -69,9 +70,9 @@ def generate_gcode(svg_file_root_tree, gcode_file):
print ( " [SVG loaded] With: " + str ( width ) + " mm Height: " + str ( height ) + " mm " )
#generate start cmds's
gcode_write ( preamble)
gcode_write ( gcode_file, preamble)
num_points = 0
for elem in svg_file_root_tree . iter ( ) :
try :
_ , tag_suffix = elem . tag . split ( ' } ' )
@ -80,29 +81,30 @@ def generate_gcode(svg_file_root_tree, gcode_file):
if tag_suffix in svg_shapes :
shape_class = getattr ( shapes_pkg , tag_suffix )
shape_obj = shape_class ( elem )
d = shape_obj . d_path ( )
m = shape_obj . transformation_matrix ( )
if d :
#gcode_file.write(shape_preamble)
p = point_generator ( d , m , smoothness )
for x , y in p :
#print(";X: " + str(x) + " Y: " + str(y))
obj_path = shape_obj . d_path ( )
obj_trans_matrix = shape_obj . transformation_matrix ( )
if obj_path :
gcode_write ( gcode_file , " ; == Start of " + tag_suffix + " == \n " )
points = point_generator ( obj_path , obj_trans_matrix , smoothness )
num_points = 0
for x , y in points :
if ( debug ) : print ( " [Point] X: " + str ( x ) + " Y: " + str ( y ) )
if x > 0 and x < bed_max_x and y > 0 and y < bed_max_y :
gcode_ file. write ( " G1 X %0.01f Y %0. 01f\n " % ( x , y ) )
gcode_ write( gcode_file , " G1 X %0.001f Y %0.0 01f\n " % ( x , y ) )
num_points + = 1
if num_points == 1 :
gcode_ file. write ( " M3 I S150 ;start laser \n " )
el se :
if ( num_points == 1 ) :
gcode_ write( gcode_file , " M3 I S150 ;start laser \n " )
el if ( debug ) :
print ( " \n ; Coordinates out of range: " , " G1 X %0.01f Y %0.01f " % ( x , y ) )
print ( " ; Raw: " , str ( x ) , str ( y ) , " \n Scaled: " , str ( x ) , str ( y ) , " \n " )
close_on_failure ( )
gcode_ file. write ( " M5 ;stop laser \n " )
num_points = 0
#gcode_file.write(shape_postamble)
gcode_ write( gcode_file , " M5 ;stop laser \n " )
gcode_write( gcode_file , " ; == End of " + tag_suffix + " == \n " )
generated_points_count + = num_points
gcode_ file. write ( postamble )
print ( " \n Generated " , num_points , " points " )
gcode_ write( gcode_file , postamble )
print ( " \n Generated " , generated_points_count , " points " )
if __name__ == " __main__ " :
sys . setrecursionlimit ( 20000 ) #needed for svg's with more indepented paths