#!/usr/bin/python # AUTHOR: # Carlosgs (http://carlosgs.es) # LICENSE: # Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/) # # DISCLAIMER: # This software is provided "as is", and you use the software at your own risk. Under no # circumstances shall Carlosgs be liable for direct, indirect, special, incidental, or # consequential damages resulting from the use, misuse, or inability to use this software, # even if Carlosgs has been advised of the possibility of such damages. # Begin modules import sys import numpy as np from scipy import interpolate import matplotlib.pyplot as plt import GcodeParser as gcp # End modules def plotPoints(path_list, color, linewidth): # Thanks to pprzemek (http://stackoverflow.com/questions/2282727/draw-points-using-matplotlib-pyplot-x1-y1-x2-y2) for path in path_list : a = np.array(path) # Give to plot() the points in the adequate format line, = plt.plot(a[:,0], a[:,1], color, linewidth=linewidth*3) #line.set_antialiased(False) # turn off antialising def plotPath(etch_moves, travel_moves, etch_color, travel_color, etch_diam, travel_diam): plotPoints(etch_moves, etch_color, etch_diam) plotPoints(travel_moves, travel_color, travel_diam) def pltShowNonBlocking(): plt.ion() # Enable real-time plotting to avoid blocking behaviour for plt.show() plt.show() plt.ioff() # Disable real-time plotting def view(filePath,fileName,showAll=0,showEtch=0,showEtch2=0,showEtch3=0,showDrill=0,showEdge=0): #filePath = "../GcodeGenerators/pyGerber2Gcode_CUI/out/" #fileName = "printshield" # sys.argv[1] fig = plt.figure() drill_diam = 0.8 etch_diam = 0.1 etch2pass_diam = 0.5 etch3pass_diam = 1 edge_diam = 2.4 travel_diam = etch_diam # b: blue # g: green # r: red # c: cyan # m: magenta # y: yellow # k: black # w: white drill_color = 'r' etch_color = '#00DF00' etch2pass_color = '#50EF00' etch3pass_color = '#A0FF00' edge_color = 'b' travel_color = 'c' plt.hold(True) plt.title("Gcode viewer") plt.axis('equal') # 1:1 aspect ratio if showAll or showEtch: print "\n Loading etch..." gcode_file = filePath+fileName+"_etch.gcode" (etch_moves, travel_moves, gcode_originXY, grid_sizeXY) = gcp.parseGcodeRaw(gcode_file) (etch_moves, travel_moves) = gcp.optimize(etch_moves) plotPath(etch_moves, travel_moves, etch_color, travel_color, etch_diam, travel_diam) if showAll or showEtch2: print "\n Loading etch (2nd pass)..." gcode_file = filePath+fileName+"_etch2pass.gcode" (etch_moves, travel_moves, gcode_originXY, grid_sizeXY) = gcp.parseGcodeRaw(gcode_file) (etch_moves, travel_moves) = gcp.optimize(etch_moves) plotPath(etch_moves, travel_moves, etch2pass_color, travel_color, etch2pass_diam, travel_diam) if showAll or showEtch3: print "\n Loading etch (3nd pass)..." gcode_file = filePath+fileName+"_etch3pass.gcode" (etch_moves, travel_moves, gcode_originXY, grid_sizeXY) = gcp.parseGcodeRaw(gcode_file) (etch_moves, travel_moves) = gcp.optimize(etch_moves) plotPath(etch_moves, travel_moves, etch3pass_color, travel_color, etch3pass_diam, travel_diam) if showAll or showDrill: print "\n Loading drill..." gcode_file = filePath+fileName+"_drill.gcode" (etch_moves, travel_moves, gcode_originXY, grid_sizeXY) = gcp.parseGcodeRaw(gcode_file) (etch_moves, travel_moves) = gcp.optimize(etch_moves) plotPath(etch_moves, travel_moves, drill_color, travel_color, drill_diam, travel_diam) if showAll or showEdge: print "\n Loading edge..." gcode_file = filePath+fileName+"_edge.gcode" (etch_moves, travel_moves, gcode_originXY, grid_sizeXY) = gcp.parseGcodeRaw(gcode_file) (etch_moves, travel_moves) = gcp.optimize(etch_moves) plotPath(etch_moves, travel_moves, edge_color, travel_color, edge_diam, travel_diam) pltShowNonBlocking() return (etch_moves, travel_moves, fig)