def pocket(blocks, allowG1, diameter, stepover, name,gcode,items): undoinfo = [] msg = "" newblocks = [] islandslist = [] for bid,block in enumerate(gcode.blocks): if block.operationTest('island'): for islandPath in gcode.toPath(bid): islandslist.append(islandPath) for bid in reversed(blocks): if gcode.blocks[bid].name() in ("Header", "Footer"): continue newpath = [] for path in gcode.toPath(bid): if not path.isClosed(): m = "Path: '%s' is OPEN"%(path.name) if m not in msg: if msg: msg += "\n" msg += m path.close() # Remove tiny segments path.removeZeroLength(abs(diameter)/100.) # Convert very small arcs to lines path.convert2Lines(abs(diameter)/10.) path.directionSet(1) #turn path to CW (conventional when milling inside) D = path.direction() if D==0: D=1 remove = ["cut","reverse","climb","conventional","cw","ccw","pocket"] if name is None: path.name = Block.operationName(path.name, "pocket,conventional,cw", remove) else: path.name = Block.operationName(path.name, name, remove) MyPocket = PocketIsland([path],allowG1,diameter,stepover,0,islandslist) newpathList = MyPocket.getfullpath() #concatenate newpath in a single list and split2contours if allowG1 : MyFullPath = Path("Pocket") for path in newpathList : for seg in path: MyFullPath.append(seg) newpathList = MyFullPath.split2contours() if newpathList: # remember length to shift all new blocks # the are inserted before before = len(newblocks) undoinfo.extend(gcode.importPath(bid+1, newpathList, newblocks, True, False)) new = len(newblocks)-before for i in range(before): newblocks[i] += new gcode.blocks[bid].enable = False gcode.addUndo(undoinfo) # return new blocks inside the blocks list del blocks[:] blocks.extend(newblocks) return msg