def on_aperture_event(self, event): aperture = event.data.Graphics['CurrentAperture'] # print 'APERTURE: '+ str(aperture) # turtle.pen(fillcolor="black", pencolor="black", pensize=int(100*float(aperture['Modifiers'][0]))) # turtle.pen(fillcolor="black", pencolor="black") self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_flash_event(self, event): """ Event handler for ASK event type """ print 'FLASH' self.event_dispatcher.dispatch_event( GerberReader.OperationEvent ( GerberReader.OperationEvent.ACK, self ) )
def on_move_event(self, event): """ Event handler for MOVE event type """ point = event.data.Graphics['CurrentPoint'] print 'MOVE: ' + str(point) turtle.penup() goto(point) self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_flash_event(self, event): """ Event handler for FLASH event type """ setLevelPolarity(event.data.Graphics['LevelPolarity']) aperture = event.data.Graphics['CurrentAperture'] if 'C' in aperture['Standard']: StandardCircle(aperture['Standard']['C'], event.data.Graphics['CurrentPoint']) if 'R' in aperture['Standard']: StandardRectangle(aperture['Standard']['R'], event.data.Graphics['CurrentPoint']) if 'O' in aperture['Standard']: StandardObround(aperture['Standard']['O'], event.data.Graphics['CurrentPoint']) if 'P' in aperture['Standard']: StandardPolygon(aperture['Standard']['P'], event.data.Graphics['CurrentPoint']) if 'Primitives' in aperture: for p in aperture['Primitives']: if 'Comment' in p: PrimitiveComment(p['Comment']) elif 'Circle' in p: PrimitiveCircle(p['Circle'], event.data.Graphics['CurrentPoint']) elif 'VectorLine' in p: PrimitiveVectorLine(p['VectorLine'], event.data.Graphics['CurrentPoint']) elif 'CenterLine' in p: PrimitiveCenterLine(p['CenterLine'], event.data.Graphics['CurrentPoint']) elif 'LowerLeftLine' in p: PrimitiveLowerLeftLine(p['LowerLeftLine'], event.data.Graphics['CurrentPoint']) elif 'Outline' in p: PrimitiveOutline(p['Outline'], event.data.Graphics['CurrentPoint']) elif 'Polygon' in p: PrimitivePolygon(p['Polygon'], event.data.Graphics['CurrentPoint']) elif 'Moire' in p: PrimitiveMoire(p['Moire'], event.data.Graphics['CurrentPoint']) elif 'Thermal' in p: PrimitiveThermal(p['Thermal'], event.data.Graphics['CurrentPoint']) self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_draw_event(self, event): """ Event handler for DRAW event type """ point = event.data.Graphics['CurrentPoint'] aperture = event.data.Graphics['CurrentAperture'] interpolation = event.data.Graphics['InterpolationMode'] setLevelPolarity(event.data.Graphics['LevelPolarity']) setExposure('ON') if interpolation == 'LIN': drawLine(aperture, point) elif interpolation in ['CW', 'CCW']: drawArc(aperture, point, interpolation) print 'DRAW: ' + str(point) + ' Interpolation: ' + str( event.data.Graphics['InterpolationMode']) + ' Region: ' + str( event.data.Graphics['RegionMode']) + ' Quadrant: ' + str( event.data.Graphics['QuadrantMode']) self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
""" Event handler for ASK event type """ print 'DRAW' self.event_dispatcher.dispatch_event( GerberReader.OperationEvent ( GerberReader.OperationEvent.ACK, self ) ) def on_move_event(self, event): """ Event handler for ASK event type """ print 'MOVE' self.event_dispatcher.dispatch_event( GerberReader.OperationEvent ( GerberReader.OperationEvent.ACK, self ) ) def on_flash_event(self, event): """ Event handler for ASK event type """ print 'FLASH' self.event_dispatcher.dispatch_event( GerberReader.OperationEvent ( GerberReader.OperationEvent.ACK, self ) ) dispatcher = GerberReader.EventDispatcher() g = GerberReader.gerber(dispatcher) c = Controller(dispatcher) with open('../data/example','r+') as f: g.Loads(f.read())
def on_quadrant_event(self, event): self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_levelpolarity_event(self, event): setLevelPolarity(event.data.Graphics['LevelPolarity']) self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_interpolation_event(self, event): self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def on_region_event(self, event): setRegion(event.data.Graphics['RegionMode']) self.event_dispatcher.dispatch_event( GerberReader.OperationEvent(GerberReader.OperationEvent.ACK, self))
def read_edge(): global vertices, faces, boundarys, toolpaths, contours, slices, \ uiparams, noise_flag, tracks, gerber_data # # read edge file # definedFileTypes = [('gerber', '.gbl .gtl .gbr .cmp'), \ ('drill files', '.drl .dbd'), ('all files', '.*')] filename = askopenfilename(filetypes=definedFileTypes) if ((find(filename, ".gbr") != -1) | (find(filename, ".GBR") != -1)): print "reading PCB edge file", filename # Load data in SEPARATE data object [gerber_data2,edges] = load_file(filename) brdoutline = [] brdseg = -1 while len(edges) > 0: brdoutline.append([]) brdseg += 1 brdoutline[brdseg].extend(edges[0]) edges.remove(edges[0]) startpnt = brdoutline[brdseg][0] endpnt = brdoutline[brdseg][len(brdoutline[brdseg]) - 1] while (abs(startpnt[0] - endpnt[0]) > 10) | (abs(startpnt[1] - endpnt[1]) > 10): for seg in edges: if abs(seg[0][0] - endpnt[0]) < 10: if abs(seg[0][1] - endpnt[1]) < 10: brdoutline[brdseg].extend(seg) edges.remove(seg) endpnt = brdoutline[brdseg][len(brdoutline[brdseg]) - 1] continue if abs(seg[len(seg) - 1][0] - endpnt[0]) < 10: if abs(seg[len(seg) - 1][1] - endpnt[1]) < 10: edges.remove(seg) seg = seg[::-1] brdoutline[brdseg].extend(seg) endpnt = brdoutline[brdseg][len(brdoutline[brdseg]) - 1] pcb_edges = brdoutline pcb_edges = pyclipper.CleanPolygons(pcb_edges) # Remove existing edge layers = list(gerber_data.layers) for gl in layers: if gl.type == GerberLayer.TYPE_PCBEDGE: gerber_data.layers.remove(gl) # Add edge data to existing data gerber_data.layers.append(GerberReader.GerberLayer(True, "PCB Edge", pcb_edges, True, False, "blue", GerberLayer.TYPE_PCBEDGE)) toolpaths = [] if (find(filename, ".") != -1): index2 = find(filename, ".") if (find(filename, "/") != -1): index1 = find(filename, "/") while (find(filename[index1 + 1:index2], "/") != -1): index1 = index1 + 1 + find(filename[index1 + 1:index2], "/") infileedge.set(filename[index1 + 1:index2]) read(0)
def read(event): global vertices, faces, toolpaths, contours, slices, \ uiparams, noise_flag, pcb_edges, boundarys uiparams.xmin = HUGE uiparams.xmax = -HUGE uiparams.ymin = HUGE uiparams.ymax = -HUGE uiparams.zmin = HUGE uiparams.zmax = -HUGE sum1 = 0 sumReg = 0 sumBound = 0 sumTracks = 0 sumPads = 0 pcb_edges = [] cbounds = pyclipper.Pyclipper() boundarys = [] layers = list(gerber_data.layers); for gl in layers: if gl.type == GerberLayer.TYPE_PCBEDGE: gerber_data.layers.remove(gl) pcb_edges.extend(gl.points) for segment in gl.points: sum1 += len(segment) for vertex in segment: x = vertex[0] * (10 ** (-gerber_data.fraction)) y = vertex[1] * (10 ** (-gerber_data.fraction)) if (x < uiparams.xmin): uiparams.xmin = x if (x > uiparams.xmax): uiparams.xmax = x if (y < uiparams.ymin): uiparams.ymin = y if (y > uiparams.ymax): uiparams.ymax = y continue if gl.type == GerberLayer.TYPE_REGION: sumReg += len(gl.points) # regions.extend(gl.points) continue if gl.type == GerberLayer.TYPE_TRACK: sumTracks += len(gl.points) continue if gl.type == GerberLayer.TYPE_PAD: sumPads += len(gl.points) continue if gl.type == GerberLayer.TYPE_BOUNDARY: if gl.isDark: boundarys.extend(gl.points) else: cbounds.AddPaths(boundarys, pyclipper.PT_SUBJECT) cbounds.AddPaths(gl.points, pyclipper.PT_CLIP) boundarys = cbounds.Execute(pyclipper.CT_DIFFERENCE, pyclipper.PFT_NONZERO, pyclipper.PFT_NONZERO) cbounds.Clear() sumBound += len(gl.points) for segment in gl.points: sum1 += len(segment) for vertex in segment: x = vertex[0] * (10 ** (-gerber_data.fraction)) y = vertex[1] * (10 ** (-gerber_data.fraction)) if (x < uiparams.xmin): uiparams.xmin = x if (x > uiparams.xmax): uiparams.xmax = x if (y < uiparams.ymin): uiparams.ymin = y if (y > uiparams.ymax): uiparams.ymax = y continue if gl.type == GerberLayer.TYPE_MERGEDCOPPER: gerber_data.layers.remove(gl) continue print " fraction = ",gerber_data.fraction print " found", sumBound, "polygons,", sum1, "vertices" print " found", sumReg, "pours" print " found", sumTracks, "tracks" print " found", sumPads, "pads" print " found", len(pcb_edges), "edge segments" print " xmin: %0.3g " % uiparams.xmin, "xmax: %0.3g " % uiparams.xmax, "dx: %0.3g " % ( uiparams.xmax - uiparams.xmin) print " ymin: %0.3g " % uiparams.ymin, "ymax: %0.3g " % uiparams.ymax, "dy: %0.3g " % ( uiparams.ymax - uiparams.ymin) outer_offset = 0.01 if len(pcb_edges) == 0: pcb_edge = [] uiparams.xmax += outer_offset uiparams.ymax += outer_offset uiparams.xmin -= outer_offset uiparams.ymin -= outer_offset pcb_edge.append([uiparams.xmax / (10 ** (-gerber_data.fraction)), uiparams.ymax / (10 ** (-gerber_data.fraction))]) pcb_edge.append([uiparams.xmax / (10 ** (-gerber_data.fraction)), uiparams.ymin / (10 ** (-gerber_data.fraction))]) pcb_edge.append([uiparams.xmin / (10 ** (-gerber_data.fraction)), uiparams.ymin / (10 ** (-gerber_data.fraction))]) pcb_edge.append([uiparams.xmin / (10 ** (-gerber_data.fraction)), uiparams.ymax / (10 ** (-gerber_data.fraction))]) pcb_edges.extend(pcb_edge) pcb_edges = [pcb_edges] tmpb = GerberReader.replace_holes_with_seams(boundarys) gerber_data.layers.append(GerberReader.GerberLayer(True, "PCB Edge", pcb_edges, True, False, "blue", GerberLayer.TYPE_PCBEDGE)) gerber_data.layers.append(GerberReader.GerberLayer(True, "Merged Copper", tmpb, False, color="brown", type=GerberLayer.TYPE_MERGEDCOPPER)) # the boundary data with seams in it is for rendering purposes only. camselect(event) plot() autoscale(0) LayerEditor.createTable2(layerGeo, gerber_data, plot)
folder = "gerber files/" files = ["xbee_test_usb1_1-Front.gtl","xbee_test_usb1_1-Front2.gtl","feedbax2.gbl","feedbax2.gtl","PCB1.gtl"]#,"PCB1.gbl"] root = Tkinter.Tk() times = [] # cProfile.runctx("GerberReader.load_file(folder + files[3])", globals(),locals()) # cProfile.runctx("GerberReader2.load_file(folder + files[3])", globals(),locals()) # for n in range(5): for f in files: stt = time.time() GerberReader.load_file(folder + f) stt = time.time() - stt; print " time = ", stt, " file ", f stt2 = time.time() GerberReader3.load_file(folder + f) stt2 = time.time() - stt2 print " time = ", stt2, " file ", f # stt3 = time.time() # GerberReader3.load_file(folder + f) # stt3 = time.time() - stt3 # print " time = ", stt3, " file ", f times.append([stt, stt2]) # cProfile.runctx("GerberReader.load_file(folder + f)", globals(),locals())
"feedbax2.gtl", "PCB1.gtl", ] # ,"PCB1.gbl"] root = Tkinter.Tk() times = [] # cProfile.runctx("GerberReader.load_file(folder + files[3])", globals(),locals()) # cProfile.runctx("GerberReader2.load_file(folder + files[3])", globals(),locals()) # for n in range(5): for f in files: stt = time.time() GerberReader.load_file(folder + f) stt = time.time() - stt print " time = ", stt, " file ", f stt2 = time.time() GerberReader3.load_file(folder + f) stt2 = time.time() - stt2 print " time = ", stt2, " file ", f # stt3 = time.time() # GerberReader3.load_file(folder + f) # stt3 = time.time() - stt3 # print " time = ", stt3, " file ", f times.append([stt, stt2]) # cProfile.runctx("GerberReader.load_file(folder + f)", globals(),locals())