Added 2&3 extra tool passes (for more clearance). Fixed bug when parsing oval shapes from gerber files.
							parent
							
								
									a828e2a0d1
								
							
						
					
					
						commit
						ce7c72bd00
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,60 +1,59 @@
 | 
			
		|||
(Generated by ./pygerber2gcode_cui_MOD.py )
 | 
			
		||||
( 2013-05-29 04:57:18 )
 | 
			
		||||
( 2013-05-29 17:29:04 )
 | 
			
		||||
(Initialize)
 | 
			
		||||
G92 X0.000000 Y0.000000 Z0.000000
 | 
			
		||||
 | 
			
		||||
(Start form here)
 | 
			
		||||
G0 Z2.000000
 | 
			
		||||
G0 X58.713215 Y57.951215
 | 
			
		||||
G0 X59.163215 Y58.401215
 | 
			
		||||
G1 Z-0.271429 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-0.542857 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-0.814286 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-1.085714 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-1.357143 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-1.628571 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
G1 Z-1.900000 F30.000000
 | 
			
		||||
G1 X2.579215 F50.000000
 | 
			
		||||
G1 Y4.103215 F50.000000
 | 
			
		||||
G1 Y3.849215 F50.000000
 | 
			
		||||
G1 X59.983215 F50.000000
 | 
			
		||||
G1 Y57.951215 F50.000000
 | 
			
		||||
G1 X58.713215 F50.000000
 | 
			
		||||
G1 X3.029215 F50.000000
 | 
			
		||||
G1 Y4.553215 F50.000000
 | 
			
		||||
G1 Y4.299215 F50.000000
 | 
			
		||||
G1 X60.433215 F50.000000
 | 
			
		||||
G1 Y58.401215 F50.000000
 | 
			
		||||
G1 X59.163215 F50.000000
 | 
			
		||||
 | 
			
		||||
(Goto to Initial position)
 | 
			
		||||
G0 Z2.000000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -11,6 +11,10 @@ ROT_ANG = 0
 | 
			
		|||
OUT_DIR = "./out"
 | 
			
		||||
OUT_FRONT_FILE = ""
 | 
			
		||||
OUT_BACK_FILE = "printshield_etch.gcode"
 | 
			
		||||
OUT_FRONT_2PASS_FILE = ""
 | 
			
		||||
OUT_BACK_2PASS_FILE = "printshield_etch2pass.gcode"
 | 
			
		||||
OUT_FRONT_3PASS_FILE = ""
 | 
			
		||||
OUT_BACK_3PASS_FILE = "printshield_etch3pass.gcode"
 | 
			
		||||
OUT_DRILL_FILE = "printshield_drill.gcode"
 | 
			
		||||
OUT_EDGE_FILE = "printshield_edge.gcode"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +33,8 @@ DRILL_SPEED=30
 | 
			
		|||
DRILL_DEPTH=-1.7
 | 
			
		||||
CUT_DEPTH=-0.04
 | 
			
		||||
TOOL_D=0.1
 | 
			
		||||
TOOL_2PASS_D=0.5
 | 
			
		||||
TOOL_3PASS_D=1
 | 
			
		||||
DRILL_D=0.5
 | 
			
		||||
CAD_UNIT=0.00254
 | 
			
		||||
DRILL_UNIT=0.00254
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,9 @@ Z_SPEED = 60
 | 
			
		|||
DRILL_SPEED = 50	#Drill down speed
 | 
			
		||||
DRILL_DEPTH = -1.2#Drill depth
 | 
			
		||||
CUT_DEPTH = -0.07	#pattern cutting depth
 | 
			
		||||
TOOL_D = 0.2		#Tool diameter
 | 
			
		||||
TOOL_D = 0.1		#Tool diameter
 | 
			
		||||
TOOL_2PASS_D = 0.5		#Tool diameter
 | 
			
		||||
TOOL_3PASS_D = 1		#Tool diameter
 | 
			
		||||
DRILL_D = 0.8		#Drill diameter
 | 
			
		||||
EDGE_TOOL_D = 1.0		#Edge Tool diameter
 | 
			
		||||
EDGE_DEPTH = -1.2 #edge depth
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +85,11 @@ MIRROR_EDGE = 0
 | 
			
		|||
ROT_ANG = 0
 | 
			
		||||
OUT_DIR = ""
 | 
			
		||||
OUT_FRONT_FILE = ""
 | 
			
		||||
OUT_FRONT_2PASS_FILE = ""
 | 
			
		||||
OUT_FRONT_3PASS_FILE = ""
 | 
			
		||||
OUT_BACK_FILE = ""
 | 
			
		||||
OUT_BACK_2PASS_FILE = ""
 | 
			
		||||
OUT_BACK_3PASS_FILE = ""
 | 
			
		||||
OUT_DRILL_FILE = ""
 | 
			
		||||
OUT_EDGE_FILE = ""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +102,10 @@ gXSHIFT = 0
 | 
			
		|||
gYSHIFT = 0
 | 
			
		||||
gFRONT_DATA = ""
 | 
			
		||||
gBACK_DATA = ""
 | 
			
		||||
gFRONT_2PASS_DATA = ""
 | 
			
		||||
gBACK_2PASS_DATA = ""
 | 
			
		||||
gFRONT_3PASS_DATA = ""
 | 
			
		||||
gBACK_3PASS_DATA = ""
 | 
			
		||||
gDRILL_DATA = ""
 | 
			
		||||
gEDGE_DATA = ""
 | 
			
		||||
gTMP_X = INI_X 
 | 
			
		||||
| 
						 | 
				
			
			@ -221,6 +231,7 @@ class GCODE:
 | 
			
		|||
 | 
			
		||||
#functions
 | 
			
		||||
def main():
 | 
			
		||||
	global TOOL_D
 | 
			
		||||
	if len(sys.argv) > 1:
 | 
			
		||||
		read_config(sys.argv[1])
 | 
			
		||||
	else :
 | 
			
		||||
| 
						 | 
				
			
			@ -229,6 +240,10 @@ def main():
 | 
			
		|||
	gcode_init()
 | 
			
		||||
	front_poly = []
 | 
			
		||||
	back_poly = []
 | 
			
		||||
	front_poly_2pass = []
 | 
			
		||||
	back_poly_2pass = []
 | 
			
		||||
	front_poly_3pass = []
 | 
			
		||||
	back_poly_3pass = []
 | 
			
		||||
	if FRONT_FILE:
 | 
			
		||||
		#print "Front file =",FRONT_FILE
 | 
			
		||||
		front_gerber = read_Gerber(GERBER_DIR,FRONT_FILE)
 | 
			
		||||
| 
						 | 
				
			
			@ -243,6 +258,42 @@ def main():
 | 
			
		|||
		if MIRROR_FRONT:
 | 
			
		||||
			front_poly = mirror_poly(front_poly)
 | 
			
		||||
		print len(front_poly)
 | 
			
		||||
		if TOOL_2PASS_D > 0:
 | 
			
		||||
			print "Processing 2nd pass..."
 | 
			
		||||
			PREV_TOOL_D = TOOL_D
 | 
			
		||||
			TOOL_D = TOOL_2PASS_D # Set the thicker tool
 | 
			
		||||
			#print "Front file =",FRONT_FILE
 | 
			
		||||
			front_gerber_2pass = read_Gerber(GERBER_DIR,FRONT_FILE)
 | 
			
		||||
			#front_gerber = gm.merge_lines(front_gerber)
 | 
			
		||||
			front_gerber_2pass = gm.check_duplication(front_gerber_2pass)
 | 
			
		||||
			#print len(front_gerber)
 | 
			
		||||
			front_poly_2pass = gerber2polygon(front_gerber_2pass)
 | 
			
		||||
			#print len(front_poly)
 | 
			
		||||
			front_poly_2pass = gm.merge(front_poly_2pass, LINE, gLINES,gLINES2)
 | 
			
		||||
			if abs(float(ROT_ANG)) > TINY:
 | 
			
		||||
				front_poly_2pass = rot_poly(front_poly_2pass)
 | 
			
		||||
			if MIRROR_FRONT:
 | 
			
		||||
				front_poly_2pass = mirror_poly(front_poly_2pass)
 | 
			
		||||
			print len(front_poly_2pass)
 | 
			
		||||
			TOOL_D = PREV_TOOL_D
 | 
			
		||||
		if TOOL_3PASS_D > 0:
 | 
			
		||||
			print "Processing 3nd pass..."
 | 
			
		||||
			PREV_TOOL_D = TOOL_D
 | 
			
		||||
			TOOL_D = TOOL_3PASS_D # Set the thicker tool
 | 
			
		||||
			#print "Front file =",FRONT_FILE
 | 
			
		||||
			front_gerber_3pass = read_Gerber(GERBER_DIR,FRONT_FILE)
 | 
			
		||||
			#front_gerber = gm.merge_lines(front_gerber)
 | 
			
		||||
			front_gerber_3pass = gm.check_duplication(front_gerber_3pass)
 | 
			
		||||
			#print len(front_gerber)
 | 
			
		||||
			front_poly_3pass = gerber2polygon(front_gerber_3pass)
 | 
			
		||||
			#print len(front_poly)
 | 
			
		||||
			front_poly_3pass = gm.merge(front_poly_3pass, LINE, gLINES,gLINES2)
 | 
			
		||||
			if abs(float(ROT_ANG)) > TINY:
 | 
			
		||||
				front_poly_3pass = rot_poly(front_poly_3pass)
 | 
			
		||||
			if MIRROR_FRONT:
 | 
			
		||||
				front_poly_3pass = mirror_poly(front_poly_3pass)
 | 
			
		||||
			print len(front_poly_3pass)
 | 
			
		||||
			TOOL_D = PREV_TOOL_D
 | 
			
		||||
	if BACK_FILE:
 | 
			
		||||
		back_gerber = read_Gerber(GERBER_DIR,BACK_FILE)
 | 
			
		||||
		#back_gerber = gm.merge_lines(back_gerber)
 | 
			
		||||
| 
						 | 
				
			
			@ -254,6 +305,36 @@ def main():
 | 
			
		|||
		if MIRROR_BACK:
 | 
			
		||||
			back_poly = mirror_poly(back_poly)
 | 
			
		||||
		print len(back_poly)
 | 
			
		||||
		if TOOL_2PASS_D > 0:
 | 
			
		||||
			print "Processing 2nd pass..."
 | 
			
		||||
			PREV_TOOL_D = TOOL_D
 | 
			
		||||
			TOOL_D = TOOL_2PASS_D # Set the thicker tool
 | 
			
		||||
			back_gerber_2pass = read_Gerber(GERBER_DIR,BACK_FILE)
 | 
			
		||||
			#back_gerber = gm.merge_lines(back_gerber)
 | 
			
		||||
			back_gerber_2pass = gm.check_duplication(back_gerber_2pass)
 | 
			
		||||
			back_poly_2pass = gerber2polygon(back_gerber_2pass)
 | 
			
		||||
			back_poly_2pass = gm.merge(back_poly_2pass, LINE, gLINES,gLINES2)
 | 
			
		||||
			if abs(float(ROT_ANG)) > TINY:
 | 
			
		||||
				back_poly_2pass = rot_poly(back_poly_2pass)
 | 
			
		||||
			if MIRROR_BACK:
 | 
			
		||||
				back_poly_2pass = mirror_poly(back_poly_2pass)
 | 
			
		||||
			print len(back_poly_2pass)
 | 
			
		||||
			TOOL_D = PREV_TOOL_D
 | 
			
		||||
		if TOOL_3PASS_D > 0:
 | 
			
		||||
			print "Processing 3nd pass..."
 | 
			
		||||
			PREV_TOOL_D = TOOL_D
 | 
			
		||||
			TOOL_D = TOOL_3PASS_D # Set the thicker tool
 | 
			
		||||
			back_gerber_3pass = read_Gerber(GERBER_DIR,BACK_FILE)
 | 
			
		||||
			#back_gerber = gm.merge_lines(back_gerber)
 | 
			
		||||
			back_gerber_3pass = gm.check_duplication(back_gerber_3pass)
 | 
			
		||||
			back_poly_3pass = gerber2polygon(back_gerber_3pass)
 | 
			
		||||
			back_poly_3pass = gm.merge(back_poly_3pass, LINE, gLINES,gLINES2)
 | 
			
		||||
			if abs(float(ROT_ANG)) > TINY:
 | 
			
		||||
				back_poly_3pass = rot_poly(back_poly_3pass)
 | 
			
		||||
			if MIRROR_BACK:
 | 
			
		||||
				back_poly_3pass = mirror_poly(back_poly_3pass)
 | 
			
		||||
			print len(back_poly_3pass)
 | 
			
		||||
			TOOL_D = PREV_TOOL_D
 | 
			
		||||
	if DRILL_FILE:
 | 
			
		||||
		read_Drill_file(GERBER_DIR,DRILL_FILE)
 | 
			
		||||
		if(len(gDRILLS) > 0):
 | 
			
		||||
| 
						 | 
				
			
			@ -265,12 +346,12 @@ def main():
 | 
			
		|||
			edge2gcode()
 | 
			
		||||
	#gm.merge(gPOLYGONS, LINE, gLINES,gLINES2)
 | 
			
		||||
 | 
			
		||||
	end(front_poly,back_poly)
 | 
			
		||||
	end(front_poly,back_poly,front_poly_2pass,back_poly_2pass,front_poly_3pass,back_poly_3pass)
 | 
			
		||||
 | 
			
		||||
def read_config(config_file):
 | 
			
		||||
	global INI_X, INI_Y, INI_Z, MOVE_HEIGHT, OUT_INCH_FLAG, IN_INCH_FLAG, MCODE_FLAG, XY_SPEED, Z_SPEED, LEFT_X, LOWER_Y, DRILL_SPEED, DRILL_DEPTH, CUT_DEPTH, TOOL_D, DRILL_D, CAD_UNIT, EDGE_TOOL_D, EDGE_DEPTH, EDGE_SPEED, EDGE_Z_SPEED, MERGE_DRILL_DATA, Z_STEP, GERBER_COLOR, DRILL_COLOR, EDGE_COLOR , CONTOUR_COLOR, GERBER_EXT, DRILL_EXT, EDGE_EXT, GCODE_EXT, GDRILL_EXT, GEDGE_EXT, DRILL_UNIT, EDGE_UNIT, CUT_FLAG, CUT_OV
 | 
			
		||||
	global INI_X, INI_Y, INI_Z, MOVE_HEIGHT, OUT_INCH_FLAG, IN_INCH_FLAG, MCODE_FLAG, XY_SPEED, Z_SPEED, LEFT_X, LOWER_Y, DRILL_SPEED, DRILL_DEPTH, CUT_DEPTH, TOOL_D, TOOL_2PASS_D, TOOL_3PASS_D, DRILL_D, CAD_UNIT, EDGE_TOOL_D, EDGE_DEPTH, EDGE_SPEED, EDGE_Z_SPEED, MERGE_DRILL_DATA, Z_STEP, GERBER_COLOR, DRILL_COLOR, EDGE_COLOR , CONTOUR_COLOR, GERBER_EXT, DRILL_EXT, EDGE_EXT, GCODE_EXT, GDRILL_EXT, GEDGE_EXT, DRILL_UNIT, EDGE_UNIT, CUT_FLAG, CUT_OV
 | 
			
		||||
	global GERBER_DIR,FRONT_FILE,BACK_FILE,DRILL_FILE,EDGE_FILE,MIRROR_FRONT,MIRROR_BACK,MIRROR_DRILL,MIRROR_EDGE,ROT_ANG
 | 
			
		||||
	global OUT_DIR,OUT_FRONT_FILE,OUT_BACK_FILE,OUT_DRILL_FILE,OUT_EDGE_FILE
 | 
			
		||||
	global OUT_DIR,OUT_FRONT_FILE,OUT_FRONT_2PASS_FILE,OUT_FRONT_3PASS_FILE,OUT_BACK_FILE,OUT_BACK_2PASS_FILE,OUT_BACK_3PASS_FILE,OUT_DRILL_FILE,OUT_EDGE_FILE
 | 
			
		||||
	try:
 | 
			
		||||
		f = open(config_file,'r')
 | 
			
		||||
	except IOError, (errno, strerror):
 | 
			
		||||
| 
						 | 
				
			
			@ -282,8 +363,9 @@ def read_config(config_file):
 | 
			
		|||
			if not config:
 | 
			
		||||
				break
 | 
			
		||||
			#cfg = re.search("([A-Z\_]+)[\d\s\ ]*\=[\ \"]*([\s\/\-\d\.\_]+)\"*",config)
 | 
			
		||||
			cfg = re.search("([A-Z\_]+)[\d\s\ ]*\=[\ \"]*([^\ \"\n\r]+)\"*",config)
 | 
			
		||||
			cfg = re.search("([A-Z0-9\_]+)[\d\s\ ]*\=[\ \"]*([^\ \"\n\r]+)\"*",config) # FIXED: Now variable names can have numbers
 | 
			
		||||
			if (cfg):
 | 
			
		||||
				#print str(cfg.group(1)),"=",str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="INI_X"):
 | 
			
		||||
					#print "ini x =",cfg.group(2)
 | 
			
		||||
					INI_X = float(cfg.group(2))
 | 
			
		||||
| 
						 | 
				
			
			@ -319,6 +401,10 @@ def read_config(config_file):
 | 
			
		|||
					CUT_DEPTH = float(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="TOOL_D"):
 | 
			
		||||
					TOOL_D = float(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="TOOL_2PASS_D"):
 | 
			
		||||
					TOOL_2PASS_D = float(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="TOOL_3PASS_D"):
 | 
			
		||||
					TOOL_3PASS_D = float(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="DRILL_D"):
 | 
			
		||||
					DRILL_D = float(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="CAD_UNIT"):
 | 
			
		||||
| 
						 | 
				
			
			@ -388,6 +474,14 @@ def read_config(config_file):
 | 
			
		|||
					OUT_FRONT_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_BACK_FILE"):
 | 
			
		||||
					OUT_BACK_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_FRONT_2PASS_FILE"):
 | 
			
		||||
					OUT_FRONT_2PASS_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_BACK_2PASS_FILE"):
 | 
			
		||||
					OUT_BACK_2PASS_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_FRONT_3PASS_FILE"):
 | 
			
		||||
					OUT_FRONT_3PASS_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_BACK_3PASS_FILE"):
 | 
			
		||||
					OUT_BACK_3PASS_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_DRILL_FILE"):
 | 
			
		||||
					OUT_DRILL_FILE = str(cfg.group(2))
 | 
			
		||||
				if(cfg.group(1)=="OUT_EDGE_FILE"):
 | 
			
		||||
| 
						 | 
				
			
			@ -414,11 +508,11 @@ def points_revers(points):
 | 
			
		|||
	return return_points
 | 
			
		||||
 | 
			
		||||
def gcode_init():
 | 
			
		||||
	global gFRONT_DATA, gBACK_DATA, gDRILL_DATA, gEDGE_DATA
 | 
			
		||||
	global gFRONT_DATA, gBACK_DATA, gFRONT_2PASS_DATA, gBACK_2PASS_DATA, gFRONT_3PASS_DATA, gBACK_3PASS_DATA, gDRILL_DATA, gEDGE_DATA
 | 
			
		||||
	gFRONT_DATA += "(Generated by " + sys.argv[0] +" )\n"
 | 
			
		||||
	gFRONT_DATA += "( " + get_date() +" )\n"
 | 
			
		||||
	gFRONT_DATA += "(Initialize)\n"
 | 
			
		||||
	gFRONT_DATA += "G92 X" + floats(INI_X) + " Y" + floats(INI_Y) + " Z" + floats(INI_Z) + "\n"
 | 
			
		||||
	#gFRONT_DATA += "G92 X" + floats(INI_X) + " Y" + floats(INI_Y) + " Z" + floats(INI_Z) + "\n"
 | 
			
		||||
	if OUT_INCH_FLAG:
 | 
			
		||||
		gFRONT_DATA += "(Set to inch unit)\n"
 | 
			
		||||
		gFRONT_DATA += "G20\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -431,6 +525,10 @@ def gcode_init():
 | 
			
		|||
	gBACK_DATA = gFRONT_DATA
 | 
			
		||||
	gDRILL_DATA = gFRONT_DATA
 | 
			
		||||
	gEDGE_DATA = gFRONT_DATA
 | 
			
		||||
	gBACK_2PASS_DATA = gFRONT_DATA
 | 
			
		||||
	gFRONT_2PASS_DATA = gFRONT_DATA
 | 
			
		||||
	gBACK_3PASS_DATA = gFRONT_DATA
 | 
			
		||||
	gFRONT_3PASS_DATA = gFRONT_DATA
 | 
			
		||||
 | 
			
		||||
def get_date():
 | 
			
		||||
	#d = datetime.datetime.today()
 | 
			
		||||
| 
						 | 
				
			
			@ -442,7 +540,7 @@ def read_Gerber(dirname,filename):
 | 
			
		|||
	global gGCODES
 | 
			
		||||
	gGCODES = []
 | 
			
		||||
	print "Parse Gerber data"
 | 
			
		||||
	data = open_file(dirname, filename)
 | 
			
		||||
	(data,f) = open_file(dirname, filename)
 | 
			
		||||
	for gerber in data:
 | 
			
		||||
		if not gerber:
 | 
			
		||||
			break
 | 
			
		||||
| 
						 | 
				
			
			@ -462,6 +560,7 @@ def read_Gerber(dirname,filename):
 | 
			
		|||
		#if (find(gerber, "X") != -1 or find(gerber, "Y") != -1):
 | 
			
		||||
		if (find(gerber, "X") == 0):
 | 
			
		||||
			parse_xy(gerber)
 | 
			
		||||
	f.close()
 | 
			
		||||
	return gGCODES
 | 
			
		||||
 | 
			
		||||
def parse_add(gerber):
 | 
			
		||||
| 
						 | 
				
			
			@ -536,12 +635,11 @@ def parse_data(x,y,d):
 | 
			
		|||
		elif(gDCODE[int(gFIG_NUM)].atype ==  "R"):
 | 
			
		||||
			#Rect
 | 
			
		||||
			#Change to line
 | 
			
		||||
			gGCODES.append(GCODE(x-mod1/2,y,x+mod1/2,y,4,mod1,mod2))
 | 
			
		||||
			gGCODES.append(GCODE(x,y,0,0,2,mod1,mod2))
 | 
			
		||||
		elif(gDCODE[int(gFIG_NUM)].atype ==  "O"):
 | 
			
		||||
			#Rect
 | 
			
		||||
			#Change to line
 | 
			
		||||
			gGCODES.append(GCODE(x-mod1/2,y,x+mod1/2,y,6,mod1,mod2))
 | 
			
		||||
		else: print "UNSUPPORTED TYPE:",gDCODE[int(gFIG_NUM)].atype
 | 
			
		||||
			gGCODES.append(GCODE(x,y,0,0,6,mod1,mod2))
 | 
			
		||||
			#print "Oval 03"
 | 
			
		||||
		else: print "UNSUPPORTED SHAPE TYPE:",gDCODE[int(gFIG_NUM)].atype
 | 
			
		||||
	elif(d == "02" or d == "2"):
 | 
			
		||||
		#move  w light off
 | 
			
		||||
		gGERBER_TMP_X = x
 | 
			
		||||
| 
						 | 
				
			
			@ -554,9 +652,9 @@ def parse_data(x,y,d):
 | 
			
		|||
			#Rect
 | 
			
		||||
			gGCODES.append(GCODE(gGERBER_TMP_X,gGERBER_TMP_Y,x,y,4,mod1,mod2))
 | 
			
		||||
		elif(gDCODE[int(gFIG_NUM)].atype == "O"):
 | 
			
		||||
			#Rect
 | 
			
		||||
			gGCODES.append(GCODE(gGERBER_TMP_X,gGERBER_TMP_Y,x,y,6,mod1,mod2))
 | 
			
		||||
		else: print "UNSUPPORTED TYPE:",gDCODE[int(gFIG_NUM)].atype
 | 
			
		||||
			gGCODES.append(GCODE(gGERBER_TMP_X,gGERBER_TMP_Y,x,y,4,mod1,mod2)) # TODO FIX: This oval will be shown as a rectangle!
 | 
			
		||||
			print "Oval pad will appear as a rectangle!"
 | 
			
		||||
		else: print "UNSUPPORTED SHAPE TYPE:",gDCODE[int(gFIG_NUM)].atype
 | 
			
		||||
		gGERBER_TMP_X = x
 | 
			
		||||
		gGERBER_TMP_Y = y
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -575,11 +673,9 @@ def gerber2polygon(gGCODES):
 | 
			
		|||
		mod1=gcode.mod1 + float(TOOL_D)
 | 
			
		||||
		mod2=gcode.mod2 + float(TOOL_D)
 | 
			
		||||
		if(gcode.gtype == 1):
 | 
			
		||||
			#polygon(circle_points(x1,y1,mod1/2,20))
 | 
			
		||||
			gPOLYGONS.append(POLYGON(x1-mod1/2,x1+mod1/2,y1-mod1/2,y1+mod1/2,circle_points(x1,y1,mod1/2,20),0))
 | 
			
		||||
		elif(gcode.gtype == 2):
 | 
			
		||||
			points = [x1-mod1/2,y1-mod2/2,x1-mod1/2,y1+mod2/2,x1+mod1/2,y1+mod2/2,x1+mod1/2,y1-mod2/2,x1-mod1/2,y1-mod2/2]
 | 
			
		||||
			#polygon([x1-mod1/2,y1-mod2/2,x1-mod1/2,y1+mod2/2,x1+mod1/2,y1+mod2/2,x1+mod1/2,y1-mod2/2,x1-mod1/2,y1-mod2/2])
 | 
			
		||||
			gPOLYGONS.append(POLYGON(x1-mod1/2,x1+mod1/2,y1-mod2/2,y1+mod2/2,points,0))
 | 
			
		||||
		elif(gcode.gtype == 3):
 | 
			
		||||
			line2poly(x1,y1,x2,y2,mod1/2,1,8)
 | 
			
		||||
| 
						 | 
				
			
			@ -587,8 +683,31 @@ def gerber2polygon(gGCODES):
 | 
			
		|||
			line2poly(x1,y1,x2,y2,mod2/2,0,8)
 | 
			
		||||
		elif(gcode.gtype == 5):
 | 
			
		||||
			line2poly(x1,y1,x2,y2,mod1/2,2,8)
 | 
			
		||||
		elif(gcode.gtype == 6): # Oval
 | 
			
		||||
			line2poly(x1,y1,x2,y2,mod2/2,3,8)
 | 
			
		||||
		elif(gcode.gtype == 6): # Oval (no rotation)
 | 
			
		||||
			width = abs(mod1) # abs((x1+mod1/2)-(x1-mod1/2)) # abs(x_max-x_min)
 | 
			
		||||
			height = abs(mod2) # abs((y1+mod2/2)-(y1-mod2/2)) # abs(y_max-y_min)
 | 
			
		||||
			deg90=pi/2.0
 | 
			
		||||
			npoints = 16
 | 
			
		||||
			x1 = x1 - width/2
 | 
			
		||||
			y1 = y1 - height/2
 | 
			
		||||
			if width > height: # (___)
 | 
			
		||||
				radius = height/2
 | 
			
		||||
				# arc_points(cx,cy,r,s_angle,e_angle,kaku)
 | 
			
		||||
				points = [x1+width-radius,y1]
 | 
			
		||||
				points = points + arc_points(x1+width-radius,y1+radius,radius,-deg90,deg90,npoints)
 | 
			
		||||
				points = points + arc_points(x1+radius,y1+radius,radius,deg90,3*deg90,npoints)
 | 
			
		||||
				points = points + [x1+width-radius,y1]
 | 
			
		||||
			else: # 0
 | 
			
		||||
				radius = width/2
 | 
			
		||||
				# arc_points(cx,cy,r,s_angle,e_angle,kaku)
 | 
			
		||||
				points = [x1+width,y1+height-radius]
 | 
			
		||||
				points = points + arc_points(x1+radius,y1+height-radius,radius,0,2*deg90,npoints)
 | 
			
		||||
				points = points + arc_points(x1+radius,y1+radius,radius,2*deg90,4*deg90,npoints)
 | 
			
		||||
				points = points + [x1+width,y1+height-radius]
 | 
			
		||||
			#points = [x1-mod1/2,y1-mod2/2,x1-mod1/2,y1+mod2/2,x1+mod1/2,y1+mod2/2,x1+mod1/2,y1-mod2/2,x1-mod1/2,y1-mod2/2]
 | 
			
		||||
			#gPOLYGONS.append(POLYGON(x1-mod1/2,x1+mod1/2,y1-mod2/2,y1+mod2/2,points,0))
 | 
			
		||||
			polygon(points)
 | 
			
		||||
			# POLYGON arguments: (x_min, x_max, y_min, y_max, points, delete)
 | 
			
		||||
	return gPOLYGONS
 | 
			
		||||
 | 
			
		||||
def line2poly(x1,y1,x2,y2,r,atype,ang_n):
 | 
			
		||||
| 
						 | 
				
			
			@ -613,19 +732,20 @@ def line2poly(x1,y1,x2,y2,r,atype,ang_n):
 | 
			
		|||
		points = points + [xa2,ya2,xa1,ya1]
 | 
			
		||||
		points = points + arc_points(x2,y2,r,ang+deg90,ang-deg90,ang_n)
 | 
			
		||||
		points = points + [xa2,ya2]
 | 
			
		||||
	elif(atype==3): # Oval
 | 
			
		||||
		width = abs(xa1-xb2)
 | 
			
		||||
		height = abs(ya1-yb2)
 | 
			
		||||
		if width > height:
 | 
			
		||||
			points = points + arc_points(x1+r,y1,r,ang+3*deg90,ang+deg90,ang_n)
 | 
			
		||||
			points = points + arc_points(x2-r,y2,r,ang+1*deg90,ang-deg90,ang_n)
 | 
			
		||||
			points = points + [xa2+r,ya2]
 | 
			
		||||
		else:
 | 
			
		||||
			r = width/2
 | 
			
		||||
			points = points + arc_points(x1+r,y1+r,r,ang+2*deg90,ang+deg90-deg90,ang_n)
 | 
			
		||||
			points = points + arc_points(x2-r,y2-r,r,ang+0*deg90,ang-deg90-deg90,ang_n)
 | 
			
		||||
			ya1=y1+r*sin(ang+deg90)
 | 
			
		||||
			points = points + [xa1,ya1]
 | 
			
		||||
	elif(atype==3): # Oval #TODO FIX
 | 
			
		||||
		points = (xa1,ya1,xb1,yb1,xb2,yb2,xa2,ya2,xa1,ya1)
 | 
			
		||||
#		width = abs(xa1-xb2)
 | 
			
		||||
#		height = abs(ya1-yb2)
 | 
			
		||||
#		if width > height:
 | 
			
		||||
#			points = points + arc_points(x1+r,y1,r,ang+3*deg90,ang+deg90,ang_n)
 | 
			
		||||
#			points = points + arc_points(x2-r,y2,r,ang+1*deg90,ang-deg90,ang_n)
 | 
			
		||||
#			points = points + [xa2+r,ya2]
 | 
			
		||||
#		else:
 | 
			
		||||
#			r = width/2
 | 
			
		||||
#			points = points + arc_points(x1+r,y1+r,r,ang+2*deg90,ang+deg90-deg90,ang_n)
 | 
			
		||||
#			points = points + arc_points(x2-r,y2-r,r,ang+0*deg90,ang-deg90-deg90,ang_n)
 | 
			
		||||
#			ya1=y1+r*sin(ang+deg90)
 | 
			
		||||
#			points = points + [xa1,ya1]
 | 
			
		||||
	else:
 | 
			
		||||
		points = (xa1,ya1,xb1,yb1,xb2,yb2,xa2,ya2,xa1,ya1)
 | 
			
		||||
	polygon(points)
 | 
			
		||||
| 
						 | 
				
			
			@ -709,16 +829,32 @@ def gcode_end():
 | 
			
		|||
	#end_data += "%\n"
 | 
			
		||||
	return end_data
 | 
			
		||||
 | 
			
		||||
def end(front_poly,back_poly):
 | 
			
		||||
	global gFRONT_DATA, gBACK_DATA, gDRILL_DATA, gEDGE_DATA
 | 
			
		||||
def end(front_poly,back_poly,front_poly_2pass,back_poly_2pass,front_poly_3pass,back_poly_3pass):
 | 
			
		||||
	global gFRONT_DATA, gBACK_DATA, gFRONT_2PASS_DATA, gBACK_2PASS_DATA, gFRONT_3PASS_DATA, gBACK_3PASS_DATA, gDRILL_DATA, gEDGE_DATA
 | 
			
		||||
	if OUT_FRONT_FILE and front_poly:
 | 
			
		||||
		gFRONT_DATA += polygon2gcode(front_poly,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gFRONT_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_FRONT_FILE,gFRONT_DATA)
 | 
			
		||||
	if OUT_FRONT_2PASS_FILE and front_poly_2pass:
 | 
			
		||||
		gFRONT_2PASS_DATA += polygon2gcode(front_poly_2pass,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gFRONT_2PASS_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_FRONT_2PASS_FILE,gFRONT_2PASS_DATA)
 | 
			
		||||
	if OUT_FRONT_3PASS_FILE and front_poly_3pass:
 | 
			
		||||
		gFRONT_3PASS_DATA += polygon2gcode(front_poly_3pass,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gFRONT_3PASS_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_FRONT_3PASS_FILE,gFRONT_3PASS_DATA)
 | 
			
		||||
	if OUT_BACK_FILE and back_poly:
 | 
			
		||||
		gBACK_DATA += polygon2gcode(back_poly,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gBACK_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_BACK_FILE,gBACK_DATA)
 | 
			
		||||
	if OUT_BACK_2PASS_FILE and back_poly_2pass:
 | 
			
		||||
		gBACK_2PASS_DATA += polygon2gcode(back_poly_2pass,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gBACK_2PASS_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_BACK_2PASS_FILE,gBACK_2PASS_DATA)
 | 
			
		||||
	if OUT_BACK_3PASS_FILE and back_poly_3pass:
 | 
			
		||||
		gBACK_3PASS_DATA += polygon2gcode(back_poly_3pass,CUT_DEPTH,XY_SPEED, Z_SPEED)
 | 
			
		||||
		gBACK_3PASS_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_BACK_3PASS_FILE,gBACK_3PASS_DATA)
 | 
			
		||||
	if OUT_DRILL_FILE:
 | 
			
		||||
		gDRILL_DATA += gcode_end()
 | 
			
		||||
		write_file(OUT_DIR,OUT_DRILL_FILE,gDRILL_DATA)
 | 
			
		||||
| 
						 | 
				
			
			@ -800,16 +936,16 @@ def arc_points(cx,cy,r,s_angle,e_angle,kaku):
 | 
			
		|||
	float(r)
 | 
			
		||||
	float(cx)
 | 
			
		||||
	float(cy)
 | 
			
		||||
	arc_angle = abs(s_angle-e_angle)
 | 
			
		||||
	
 | 
			
		||||
	new_kaku = int( (2.0*pi*float(r))/(arc_angle*float(MM_PER_ARC_SEGMENT)) ) # Automatic resolution (reduces gcode file size)
 | 
			
		||||
	if new_kaku < 8 :
 | 
			
		||||
		new_kaku = 8;
 | 
			
		||||
	elif new_kaku > 100 :
 | 
			
		||||
		new_kaku = 100;
 | 
			
		||||
	
 | 
			
		||||
#	arc_angle = abs(s_angle-e_angle)
 | 
			
		||||
#	
 | 
			
		||||
#	new_kaku = int( (2.0*pi*float(r))/(arc_angle*float(MM_PER_ARC_SEGMENT)) ) # Automatic resolution (reduces gcode file size)
 | 
			
		||||
#	if new_kaku < 8 :
 | 
			
		||||
#		new_kaku = 8;
 | 
			
		||||
#	elif new_kaku > 100 :
 | 
			
		||||
#		new_kaku = 100;
 | 
			
		||||
#	
 | 
			
		||||
#	print "Modifying ARC points from",kaku,"to",new_kaku
 | 
			
		||||
	kaku = new_kaku
 | 
			
		||||
#	kaku = new_kaku
 | 
			
		||||
#	print "Arc: Radius:", str(r), "Points:", kaku
 | 
			
		||||
	
 | 
			
		||||
	points=[]
 | 
			
		||||
| 
						 | 
				
			
			@ -904,7 +1040,7 @@ def mirror_point(x,y):
 | 
			
		|||
#Drill 
 | 
			
		||||
def read_Drill_file(dirname,drill_file):
 | 
			
		||||
	global gDRILL_D, gDRILL_TYPE, DRILL_UNIT,gUNIT,INCH
 | 
			
		||||
	data = open_file(dirname, drill_file)
 | 
			
		||||
	(data,f) = open_file(dirname, drill_file)
 | 
			
		||||
	print "Read and Parse Drill data"
 | 
			
		||||
	drill_d_unit = DRILL_UNIT
 | 
			
		||||
	for drill in data:
 | 
			
		||||
| 
						 | 
				
			
			@ -928,6 +1064,8 @@ def read_Drill_file(dirname,drill_file):
 | 
			
		|||
		if (find(drill, "M72") != -1):
 | 
			
		||||
			#print "Drill unit = INCH"
 | 
			
		||||
			DRILL_UNIT = INCH
 | 
			
		||||
	f.close()
 | 
			
		||||
 | 
			
		||||
def parse_drill_g(drill):
 | 
			
		||||
	global gDRILL_LINES, gDRILL_D, DRILL_UNIT
 | 
			
		||||
	#print "Drill G";
 | 
			
		||||
| 
						 | 
				
			
			@ -1211,7 +1349,7 @@ def drill_hole_test(cx,cy,r):
 | 
			
		|||
#For edge
 | 
			
		||||
def readEdgeFile(dirname,edge_file):
 | 
			
		||||
	global gTMP_EDGE_X, gTMP_EDGE_Y, gTMP_EDGE_Z, gEDGE_DATA, gEDGES
 | 
			
		||||
	data = open_file(dirname, edge_file)
 | 
			
		||||
	(data,f) = open_file(dirname, edge_file)
 | 
			
		||||
 | 
			
		||||
	pre_x = gTMP_EDGE_X
 | 
			
		||||
	pre_y = gTMP_EDGE_Y
 | 
			
		||||
| 
						 | 
				
			
			@ -1236,6 +1374,8 @@ def readEdgeFile(dirname,edge_file):
 | 
			
		|||
			elif(dd.group(1) == "2" or dd.group(1) == "02"):
 | 
			
		||||
				pre_x = x
 | 
			
		||||
				pre_y = y
 | 
			
		||||
	f.close()
 | 
			
		||||
 | 
			
		||||
def mergeEdge():
 | 
			
		||||
	global gTMP_EDGE_X, gTMP_EDGE_Y, gTMP_EDGE_Z, gEDGE_DATA, gEDGES, MERGINE
 | 
			
		||||
	for edge1 in gEDGES:
 | 
			
		||||
| 
						 | 
				
			
			@ -1368,7 +1508,7 @@ def open_file(dirname, filename):
 | 
			
		|||
		return []
 | 
			
		||||
	else:
 | 
			
		||||
		ret = f.read()
 | 
			
		||||
		return ret.split("\n")
 | 
			
		||||
		return (ret.split("\n"),f)
 | 
			
		||||
def write_file(dirname,filename,datas):
 | 
			
		||||
	file_name = os.path.join(dirname, filename)
 | 
			
		||||
	if(datas):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,15 +36,17 @@ fileName = "printshield" # sys.argv[1]
 | 
			
		|||
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*2)
 | 
			
		||||
		line.set_antialiased(False) # turn off antialising
 | 
			
		||||
		line, = plt.plot(a[:,0], a[:,1], color, linewidth=linewidth*3)
 | 
			
		||||
		#line.set_antialiased(False) # turn off antialising
 | 
			
		||||
 | 
			
		||||
plt.figure(1)
 | 
			
		||||
 | 
			
		||||
drill_diam = 0.8
 | 
			
		||||
etch_diam = 0.1
 | 
			
		||||
etch2pass_diam = 0.5
 | 
			
		||||
etch3pass_diam = 1
 | 
			
		||||
edge_diam = 2.4
 | 
			
		||||
linewidth_travel_move = etch_diam/2
 | 
			
		||||
linewidth_travel_move = etch_diam
 | 
			
		||||
 | 
			
		||||
#	b: blue
 | 
			
		||||
#	g: green
 | 
			
		||||
| 
						 | 
				
			
			@ -56,10 +58,13 @@ linewidth_travel_move = etch_diam/2
 | 
			
		|||
#	w: white
 | 
			
		||||
 | 
			
		||||
drill_color = 'r'
 | 
			
		||||
etch_color = 'g'
 | 
			
		||||
etch_color = '#00DF00'
 | 
			
		||||
etch2pass_color = '#00EF00'
 | 
			
		||||
etch3pass_color =  '#00FF00'
 | 
			
		||||
edge_color = 'b'
 | 
			
		||||
travel_color = 'c'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
plt.subplot(121)
 | 
			
		||||
plt.hold(True)
 | 
			
		||||
plt.title("Original Gcode")
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +76,18 @@ gcode_file = filePath+fileName+"_etch.gcode"
 | 
			
		|||
plotPoints(etch_moves, etch_color, etch_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading etch (2nd pass)..."
 | 
			
		||||
gcode_file = filePath+fileName+"_etch2pass.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
plotPoints(etch_moves, etch2pass_color, etch2pass_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading etch (3nd pass)..."
 | 
			
		||||
gcode_file = filePath+fileName+"_etch3pass.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
plotPoints(etch_moves, etch3pass_color, etch3pass_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading drill..."
 | 
			
		||||
gcode_file = filePath+fileName+"_drill.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +101,7 @@ plotPoints(etch_moves, edge_color, edge_diam)
 | 
			
		|||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
plt.subplot(122)
 | 
			
		||||
plt.hold(True)
 | 
			
		||||
plt.title("Optimized (closest neighbour)")
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +114,20 @@ gcode_file = filePath+fileName+"_etch.gcode"
 | 
			
		|||
plotPoints(etch_moves, etch_color, etch_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading etch (2nd pass)..."
 | 
			
		||||
gcode_file = filePath+fileName+"_etch2pass.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
(etch_moves, travel_moves) = gcp.optimize(etch_moves)
 | 
			
		||||
plotPoints(etch_moves, etch2pass_color, etch2pass_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading etch (3nd pass)..."
 | 
			
		||||
gcode_file = filePath+fileName+"_etch3pass.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
(etch_moves, travel_moves) = gcp.optimize(etch_moves)
 | 
			
		||||
plotPoints(etch_moves, etch3pass_color, etch3pass_diam)
 | 
			
		||||
plotPoints(travel_moves, travel_color, linewidth_travel_move)
 | 
			
		||||
 | 
			
		||||
print "\n Loading drill..."
 | 
			
		||||
gcode_file = filePath+fileName+"_drill.gcode"
 | 
			
		||||
(etch_moves, travel_moves, grid_origin, grid_size) = gcp.parseGcodeRaw(gcode_file)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue