From ff49e082e85883c22404d2d752ab5125953089bd Mon Sep 17 00:00:00 2001 From: localhorst Date: Mon, 13 Jun 2022 15:35:59 +0200 Subject: [PATCH] print number of generated points --- svg2gcode.py | 42 ++++++++++++++++++++++-------------------- test_data/test.gcode | 2 ++ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/svg2gcode.py b/svg2gcode.py index 11b7444..c5f8881 100755 --- a/svg2gcode.py +++ b/svg2gcode.py @@ -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() + obj_path = shape_obj.d_path() + obj_trans_matrix = 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)) + 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.001f\n" % (x, y)) num_points += 1 - if num_points == 1: - gcode_file.write("M3 I S150 ;start laser\n") - else: + if (num_points == 1): + gcode_write(gcode_file, "M3 I S150 ;start laser\n") + elif (debug): print("\n; Coordinates out of range:", "G1 X%0.01f Y%0.01f" % (x, y)) print("; Raw:", str(x), str(y), "\nScaled:", 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("\nGenerated", num_points, "points") + gcode_write(gcode_file, postamble) + print("\nGenerated", generated_points_count, "points") if __name__ == "__main__": sys.setrecursionlimit(20000) #needed for svg's with more indepented paths diff --git a/test_data/test.gcode b/test_data/test.gcode index fcf19e9..37280d9 100644 --- a/test_data/test.gcode +++ b/test_data/test.gcode @@ -1,6 +1,7 @@ G90 ;Absolute programming G21 ;Programming in millimeters (mm) M5 ;Disable laser +; == Start of rect == G1 X0.1 Y0.1 M3 I S150 ;start laser G1 X0.1 Y0.1 @@ -9,5 +10,6 @@ G1 X9.9 Y9.9 G1 X0.1 Y9.9 G1 X0.1 Y0.1 M5 ;stop laser +; == End of rect == G1 X0.0 Y0.0; Display printbed M02 ;End of program