Example #1
0
 def write(self, s, tags=()):
     self.text.mark_gravity("iomark", "right")
     OutputWindow.write(self, s, tags, "iomark")
     self.text.mark_gravity("iomark", "left")
     if self.canceled:
         self.canceled = 0
         raise KeyboardInterrupt
Example #2
0
 def write(self, s, tags=()):
     self.text.mark_gravity("iomark", "right")
     OutputWindow.write(self, s, tags, "iomark")
     self.text.mark_gravity("iomark", "left")
     if self.canceled:
         self.canceled = 0
         raise KeyboardInterrupt
Example #3
0
    def __init__(self, flist=None):
        self.interp = ModifiedInterpreter(self)
        if flist is None:
            root = Tk()
            fixwordbreaks(root)
            root.withdraw()
            flist = PyShellFileList(root)

        OutputWindow.__init__(self, flist, None, None)

        import __builtin__
        __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D."

        self.auto = self.extensions["AutoIndent"] # Required extension
        self.auto.config(prefertabs=1)

        text = self.text
        text.configure(wrap="char")
        text.bind("<<newline-and-indent>>", self.enter_callback)
        text.bind("<<plain-newline-and-indent>>", self.linefeed_callback)
        text.bind("<<interrupt-execution>>", self.cancel_callback)
        text.bind("<<beginning-of-line>>", self.home_callback)
        text.bind("<<end-of-file>>", self.eof_callback)
        text.bind("<<open-stack-viewer>>", self.open_stack_viewer)
        text.bind("<<toggle-debugger>>", self.toggle_debugger)
        text.bind("<<open-python-shell>>", self.flist.open_shell)
        text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)

        sys.stdout = PseudoFile(self, "stdout")
        sys.stderr = PseudoFile(self, "stderr")
        sys.stdin = self
        self.console = PseudoFile(self, "console")

        self.history = self.History(self.text)
Example #4
0
 def write(self, s, tags=()):
     try:
         self.text.mark_gravity("iomark", "right")
         OutputWindow.write(self, s, tags, "iomark")
         self.text.mark_gravity("iomark", "left")
     except:
         pass
     if self.canceled:
         self.canceled = 0
         if not use_subprocess:
             raise KeyboardInterrupt
Example #5
0
 def write(self, s, tags=()):
     try:
         self.text.mark_gravity("iomark", "right")
         OutputWindow.write(self, s, tags, "iomark")
         self.text.mark_gravity("iomark", "left")
     except:
         pass
     if self.canceled:
         self.canceled = 0
         if not use_subprocess:
             raise KeyboardInterrupt
Example #6
0
 def _close(self):
     self.close_debugger()
     # Restore std streams
     sys.stdout = self.save_stdout
     sys.stderr = self.save_stderr
     sys.stdin = self.save_stdin
     # Break cycles
     self.interp = None
     self.console = None
     self.flist.pyshell = None
     self.history = None
     OutputWindow._close(self)  # Really EditorWindow._close
Example #7
0
 def _close(self):
     self.close_debugger()
     # Restore std streams
     sys.stdout = self.save_stdout
     sys.stderr = self.save_stderr
     sys.stdin = self.save_stdin
     # Break cycles
     self.interp = None
     self.console = None
     self.auto = None
     self.flist.pyshell = None
     self.history = None
     OutputWindow._close(self) # Really EditorWindow._close
Example #8
0
 def __init__(self, flist=None):
     if use_subprocess:
         ms = self.menu_specs
         if ms[2][0] != "shell":
             ms.insert(2, ("shell", "_Shell"))
     self.interp = ModifiedInterpreter(self)
     if flist is None:
         root = Tk()
         fixwordbreaks(root)
         root.withdraw()
         flist = PyShellFileList(root)
     #
     OutputWindow.__init__(self, flist, None, None)
     #
     import __builtin__
     __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D."
     #
     self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
     #
     text = self.text
     text.configure(wrap="char")
     text.bind("<<newline-and-indent>>", self.enter_callback)
     text.bind("<<plain-newline-and-indent>>", self.linefeed_callback)
     text.bind("<<interrupt-execution>>", self.cancel_callback)
     text.bind("<<beginning-of-line>>", self.home_callback)
     text.bind("<<end-of-file>>", self.eof_callback)
     text.bind("<<open-stack-viewer>>", self.open_stack_viewer)
     text.bind("<<toggle-debugger>>", self.toggle_debugger)
     text.bind("<<open-python-shell>>", self.flist.open_shell)
     text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)
     if use_subprocess:
         text.bind("<<view-restart>>", self.view_restart_mark)
         text.bind("<<restart-shell>>", self.restart_shell)
     #
     self.save_stdout = sys.stdout
     self.save_stderr = sys.stderr
     self.save_stdin = sys.stdin
     import IOBinding
     self.stdout = PseudoFile(self, "stdout", IOBinding.encoding)
     self.stderr = PseudoFile(self, "stderr", IOBinding.encoding)
     self.console = PseudoFile(self, "console", IOBinding.encoding)
     if not use_subprocess:
         sys.stdout = self.stdout
         sys.stderr = self.stderr
         sys.stdin = self
     #
     self.history = self.History(self.text)
     #
     self.pollinterval = 50  # millisec
     if use_subprocess:
         self.interp.start_subprocess()
Example #9
0
 def __init__(self, flist=None):
     if use_subprocess:
         ms = self.menu_specs
         if ms[2][0] != "shell":
             ms.insert(2, ("shell", "_Shell"))
     self.interp = ModifiedInterpreter(self)
     if flist is None:
         root = Tk()
         fixwordbreaks(root)
         root.withdraw()
         flist = PyShellFileList(root)
     #
     OutputWindow.__init__(self, flist, None, None)
     #
     import __builtin__
     __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D."
     #
     self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
     #
     text = self.text
     text.configure(wrap="char")
     text.bind("<<newline-and-indent>>", self.enter_callback)
     text.bind("<<plain-newline-and-indent>>", self.linefeed_callback)
     text.bind("<<interrupt-execution>>", self.cancel_callback)
     text.bind("<<beginning-of-line>>", self.home_callback)
     text.bind("<<end-of-file>>", self.eof_callback)
     text.bind("<<open-stack-viewer>>", self.open_stack_viewer)
     text.bind("<<toggle-debugger>>", self.toggle_debugger)
     text.bind("<<open-python-shell>>", self.flist.open_shell)
     text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer)
     if use_subprocess:
         text.bind("<<view-restart>>", self.view_restart_mark)
         text.bind("<<restart-shell>>", self.restart_shell)
     #
     self.save_stdout = sys.stdout
     self.save_stderr = sys.stderr
     self.save_stdin = sys.stdin
     import IOBinding
     self.stdout = PseudoFile(self, "stdout", IOBinding.encoding)
     self.stderr = PseudoFile(self, "stderr", IOBinding.encoding)
     self.console = PseudoFile(self, "console", IOBinding.encoding)
     if not use_subprocess:
         sys.stdout = self.stdout
         sys.stderr = self.stderr
         sys.stdin = self
     #
     self.history = self.History(self.text)
     #
     self.pollinterval = 50  # millisec
     if use_subprocess:
         self.interp.start_subprocess()
Example #10
0
 def setup(self):
     self.owin = owin = OutputWindow(self.flist)
     text = owin.text
     for tag, cnf in self.tagdefs.items():
         if cnf:
             apply(text.tag_configure, (tag, ), cnf)
     text.tag_raise('sel')
     self.write = self.owin.write
Example #11
0
 def close(self):
     # Extend base class method
     if self.executing:
         # XXX Need to ask a question here
         if not tkMessageBox.askokcancel(
                 "Kill?",
                 "The program is still running; do you want to kill it?",
                 default="ok",
                 master=self.text):
             return "cancel"
         self.canceled = 1
         if self.reading:
             self.top.quit()
         return "cancel"
     return OutputWindow.close(self)
Example #12
0
 def default_command(self, event=None):
     prog = self.engine.getprog()
     if not prog:
         return
     path = self.globvar.get()
     if not path:
         self.top.bell()
         return
     from OutputWindow import OutputWindow
     save = sys.stdout
     try:
         sys.stdout = OutputWindow(self.flist)
         self.grep_it(prog, path)
     finally:
         sys.stdout = save
Example #13
0
 def close(self):
     # Extend base class method
     if self.executing:
         # XXX Need to ask a question here
         if not tkMessageBox.askokcancel(
             "Kill?",
             "The program is still running; do you want to kill it?",
             default="ok",
             master=self.text):
             return "cancel"
         self.canceled = 1
         if self.reading:
             self.top.quit()
         return "cancel"
     return OutputWindow.close(self)
Example #14
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.item0 = BytesIO()

        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)
        bar = self.menuBar()

        file = bar.addMenu("File")
        file.addAction("New")
        file.addAction("cascade")
        file.addAction("Tiled")
        file.triggered[QAction].connect(self.windowaction)
        self.setWindowTitle("Camphor")

        MainWindow.count += 1
        self.output_window = OutputWindow()
        self.mdi.addSubWindow(self.output_window)

        MainWindow.count += 1
        self.script_window = ScriptWindow()
        self.mdi.addSubWindow(self.script_window)

        MainWindow.count += 1
        self.viewer_window = ViewerWindow()
        self.mdi.addSubWindow(self.viewer_window)

        # QProcess object for external app
        self.process = QProcess(self)
        self.process.readyReadStandardOutput.connect(
            lambda: self.dataReady("std"))
        self.process.readyReadStandardError.connect(
            lambda: self.dataReady("error"))
        self.process.finished.connect(lambda: self.update_svg())

        #Connect Slots
        self.script_window.button_exec.clicked.connect(
            lambda: self.run_script())
        self.script_window.button_read.clicked.connect(lambda: self.read_svg())
        #self.viewer_window.button_save.clicked.connect(lambda: self.save_svg())

        #Assign Shortcuts
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+R"), self)
        self.shortcut_update.activated.connect(lambda: self.run_script())
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+O"), self)
        self.shortcut_update.activated.connect(lambda: self.read_svg())
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+S"), self)
        self.shortcut_update.activated.connect(lambda: self.save_svg())
Example #15
0
import string
Example #16
0
#! /usr/bin/env python
Example #17
0
class CamApp(SolidApp):
    def __init__(self):
        self.cam_dir = cam_dir
        self.program = None
        SolidApp.__init__(self)
        
    def GetAppTitle(self):
        return 'Heeks2 ( Computer Aided Manufacturing )'
       
    def GetAppConfigName(self):
        return 'Heeks2'
 
    def RegisterObjectTypes(self):
        SolidApp.RegisterObjectTypes(self)
        Program.type = cad.RegisterObjectType("Program", CreateProgram)
        Tools.type = cad.RegisterObjectType("Tools", CreateTools)
        Tool.type = cad.RegisterObjectType("Tool", CreateTool)
        Operations.type = cad.RegisterObjectType("Operations", CreateOperations)
        Pattern.type = cad.RegisterObjectType("Pattern", CreatePattern)
        Patterns.type = cad.RegisterObjectType("Patterns", CreatePatterns)
        Surface.type = cad.RegisterObjectType("Surface", CreateSurface)
        Surfaces.type = cad.RegisterObjectType("Surfaces", CreateSurfaces)
        Stock.type = cad.RegisterObjectType("Stock", CreateStock)
        Stocks.type = cad.RegisterObjectType("Stocks", CreateStocks)
        NcCode.type = cad.RegisterObjectType("nccode", CreateNcCode)
        cam.SetNcCodeBlockType(cad.RegisterObjectType("ncblock", CreateNcCodeBlock))
        Profile.type = cad.RegisterObjectType("Profile", CreateProfile)
        Pocket.type = cad.RegisterObjectType("Pocket", CreatePocket)
        Drilling.type = cad.RegisterObjectType("Drilling", CreateDrilling)
        Tags.type = cad.RegisterObjectType("Tags", CreateTags)
        Tag.type = cad.RegisterObjectType("Tag", CreateTag)
        ScriptOp.type = cad.RegisterObjectType("ScriptOp", CreateScriptOp)
        
        ReadNCCodeColorsFromConfig()

    def AddProgramIfThereIsntOne(self):
        # check if there is already a program in the document
        doc = cad.GetApp()
        object = doc.GetFirstChild()
        while object != None:
            if object.GetType() == Program.type:
                self.program = object
                return
            object = doc.GetNextChild()
        
        # add a program
        self.program = Program.Program()
        programs.append(self.program)
        self.program.add_initial_children()        
        cad.AddUndoably(self.program)

    def OnNewOrOpen(self, open):
        SolidApp.OnNewOrOpen(self, open)

        self.AddProgramIfThereIsntOne()
        
        # link the output window to program's nc code obect
        self.output_window.SetNcCodeObject(self.program.nccode.nc_code)

#         if open == False:
#             self.frame.OnOpenFilepath('c:/users/dan heeks/downloads/two points.heeks', False)
            
    def SetTool(self, tool_number):
        tool = Tool.FindTool(tool_number)
        if tool != None:
            if self.tool_number != tool_number:
                tool_change( id = tool_number)
                
            if self.attached_to_surface:
                import nc.nc
                nc.nc.creator.set_ocl_cutter(tool.OCLDefinition(self.attached_to_surface))

        self.tool_number = tool_number
        
    def AddTags(self, object):
        Profile.tag_drawing.profile = object
        self.SetInputMode(Profile.tag_drawing)
        
    def RepositionTag(self, object):
        pos = self.PickPosition('Pick New Tag Position')
        object.pos.x = pos.x
        object.pos.y = pos.y
        cad.Repaint()
        
    def ClearUnusedTools(self, program):
        to_delete = []
        used_set = {}
        for op in program.operations.GetChildren():
            used_set[op.tool_number] = True
            
        for tool in program.tools.GetChildren():
            if tool.tool_number not in used_set:
                to_delete.append(tool)
                
        if len(to_delete)>0:
            cad.DeleteObjectsUndoably(to_delete)
            
    def ClearToolpath(self):
        cad.StartHistory('Clear Toolpath')
        blank_nc = NcCode.NcCode()
        cad.PyIncref(blank_nc)
        wx.GetApp().CopyUndoablyWithChildren(wx.GetApp().program.nccode, blank_nc)
        self.EndHistory()
        
    def GetObjectTools(self, object, control_pressed, from_tree_canvas = False):
        tools = SolidApp.GetObjectTools(self, object, control_pressed, from_tree_canvas)
        if object.GetType() == Profile.type:
            tools.append(CamContextTool.CamObjectContextTool(object, "Add Tags", "addtag", self.AddTags))
        if object.GetType() == Tag.type:
            tools.append(CamContextTool.CamObjectContextTool(object, "Pick new position", "tagpos", self.RepositionTag))
        if object.GetType() == Program.type or object.GetType() == Tools.type:
            tools.append(CamContextTool.CamObjectContextTool(self.program, "Clear Unused Tools", "optoolclear", self.ClearUnusedTools))
        if object.GetType() == NcCode.type:
            tools.append(CamContextTool.CamContextTool("Clear Toolpath", "toolpathclear", self.ClearToolpath))        
        return tools
        
    def AddExtraRibbonPages(self, ribbon):
        SolidApp.AddExtraRibbonPages(self, ribbon)
        
        save_bitmap_path = self.bitmap_path
        self.bitmap_path = cam_dir + '/bitmaps'

        page = RB.RibbonPage(ribbon, wx.ID_ANY, 'Machining', ribbon.Image('ops'))
        page.Bind(wx.EVT_KEY_DOWN, ribbon.OnKeyDown)

        panel = RB.RibbonPanel(page, wx.ID_ANY, 'Milling', ribbon.Image('ops'))
        toolbar = RB.RibbonButtonBar(panel)
        Ribbon.AddToolBarTool(toolbar, 'Profile', 'opprofile', 'Add a Profile Operation', self.NewProfileOp)
        Ribbon.AddToolBarTool(toolbar, 'Pocket', 'pocket', 'Add a Pocket Operation', self.NewPocketOp)
        Ribbon.AddToolBarTool(toolbar, 'Drilling', 'drilling', 'Add a Drilling Operation', self.NewDrillingOp)

        panel = RB.RibbonPanel(page, wx.ID_ANY, 'Other Operations', ribbon.Image('ops'))
        toolbar = RB.RibbonButtonBar(panel)
        Ribbon.AddToolBarTool(toolbar, 'Script', 'scriptop', 'Add a Script Operation', self.NewScriptOp)
        Ribbon.AddToolBarTool(toolbar, 'Pattern', 'pattern', 'Add a Pattern', self.NewPattern)
        Ribbon.AddToolBarTool(toolbar, 'Surface', 'surface', 'Add a Surface', self.NewSurface)
        Ribbon.AddToolBarTool(toolbar, 'Stock', 'stock', 'Add a Stock', self.NewStock)

        panel = RB.RibbonPanel(page, wx.ID_ANY, 'Tools', ribbon.Image('tools'))
        toolbar = RB.RibbonButtonBar(panel)
        Ribbon.AddToolBarTool(toolbar, 'Drill', 'drill', 'Add a Drill', self.NewDrill)
        Ribbon.AddToolBarTool(toolbar, 'Centre Drill', 'centredrill', 'Add a Centre Drill', self.NewCentreDrill)
        Ribbon.AddToolBarTool(toolbar, 'End Mill', 'endmill', 'Add an End Mill', self.NewEndMill)
        Ribbon.AddToolBarTool(toolbar, 'Slot Drill', 'slotdrill', 'Add a Slot Drill', self.NewSlotDrill)
        Ribbon.AddToolBarTool(toolbar, 'Ball End Mill', 'ballmill', 'Add a Ball Mill', self.NewBallMill)
        Ribbon.AddToolBarTool(toolbar, 'Chamfer Mill', 'chamfmill', 'Add a Chamfer Mill', self.NewChamferMill)

        panel = RB.RibbonPanel(page, wx.ID_ANY, 'G-Code', ribbon.Image('code'))
        toolbar = RB.RibbonButtonBar(panel)
        Ribbon.AddToolBarTool(toolbar, 'Auto Program', 'magic', 'Create Program Automatically', self.OnAutoProgram)
        Ribbon.AddToolBarTool(toolbar, 'Create G-Code', 'postprocess', 'Create G-Code Output File', self.OnCreateGCode)
        Ribbon.AddToolBarTool(toolbar, 'Setup Sheet', 'pdf', 'Create PDF Setup Sheet', self.OnSetupSheet)
        Ribbon.AddToolBarTool(toolbar, 'Open G-Code', 'opennc', 'Open a G-Code File ( to display its tool path )', self.OnOpenGCodeFile)

        page.Realize()

        self.bitmap_path = save_bitmap_path

    def AddExtraWindows(self, frame):
        self.output_window = OutputWindow(frame)
        frame.aui_manager.AddPane(self.output_window, wx.aui.AuiPaneInfo().Name('Output').Caption('Output').Left().Bottom().BestSize(wx.Size(600, 200)))
        self.RegisterHideableWindow(self.output_window, self.cam_dir + '/bitmaps')
        
    def GetSelectedSketches(self):
        sketches = []
        for object in cad.GetSelectedObjects():
            if object.GetIDGroupType() == cad.OBJECT_TYPE_SKETCH:
                sketches.append(object.GetID())
        return sketches
        
    def GetSelectedPoints(self):
        points = []
        for object in cad.GetSelectedObjects():
            if object.GetIDGroupType() == cad.OBJECT_TYPE_POINT:
                points.append(object.GetID())
        return points
    
    def EditAndAddSketchOp(self, new_object, sketches):
        if new_object.Edit():
            cad.StartHistory('Add ' + new_object.GetTitle())
            cad.AddUndoably(new_object, self.program.operations, None)
            
            first = True
            for sketch in sketches:
                if first:
                    first = False
                else:
                    copy = new_object.MakeACopy()
                    copy.sketch = sketch
                    cad.AddUndoably(copy, self.program.operations, None)
            
            self.EndHistory()
    
    def NewProfileOp(self, e):
        sketches = self.GetSelectedSketches()
        sketch = 0
        if len(sketches) > 0: sketch = sketches[0]
        new_object = Profile.Profile(sketch)
        new_object.ReadDefaultValues()
        new_object.SetID(cad.GetNextID(Profile.type))
        new_object.AddMissingChildren()  # add the tags container
        
        self.EditAndAddSketchOp(new_object, sketches)
            
    def NewPocketOp(self, e):
        sketches = self.GetSelectedSketches()
        sketch = 0
        if len(sketches) > 0: sketch = sketches[0]
        new_object = Pocket.Pocket(sketch)
        new_object.ReadDefaultValues()
        new_object.SetID(cad.GetNextID(Pocket.type))
        
        self.EditAndAddSketchOp(new_object, sketches)
        
    def NewStock(self, e):
        solids = []
        for object in cad.GetSelectedObjects():
            if object.GetIDGroupType() == cad.OBJECT_TYPE_STL_SOLID:
                solids.append(object.GetID())

        new_object = Stock.Stock()
        new_object.solids += solids
        new_object.SetID(cad.GetNextID(Stock.type))
        if new_object.Edit():
            cad.AddUndoably(new_object, self.program.stocks, None)
            self.EndHistory()
        
    def EditAndAddOp(self, op):
        if op.Edit():
            cad.StartHistory('Add ' + op.GetTitle())
            cad.AddUndoably(op, op.PreferredPasteTarget(), None)
            self.EndHistory()
            
    def NewDrillingOp(self, e):
        new_object = Drilling.Drilling()
        new_object.ReadDefaultValues()
        new_object.points += self.GetSelectedPoints()
        new_object.SetID(cad.GetNextID(Drilling.type))
        self.EditAndAddOp(new_object)
            
    def NewScriptOp(self, e):
        new_object = ScriptOp.ScriptOp()
        new_object.SetID(cad.GetNextID(ScriptOp.type))
        self.EditAndAddOp(new_object)

    def NewPattern(self, e):
        new_object = Pattern.Pattern()
        new_object.SetID(cad.GetNextID(Pattern.type))
        self.EditAndAddOp(new_object)

    def NewSurface(self, e):
        new_object = Surface.Surface()
        new_object.ReadDefaultValues()
        new_object.SetID(cad.GetNextID(Surface.type))
        self.EditAndAddOp(new_object)

    def EditAndAddTool(self, tool):
        if tool.Edit():
            cad.StartHistory('Add Tool')
            cad.AddUndoably(tool, self.program.tools, None)
            self.EndHistory()
        
    def AddNewTool(self, tool_type):
        # find next available tool number
        max_tool_number = 0
        for object in self.program.tools.GetChildren():
            if object.tool_number > max_tool_number:
                max_tool_number = object.tool_number

        # Add a new tool
        new_object = Tool.Tool(tool_number = max_tool_number + 1, type = tool_type)
        self.EditAndAddTool(new_object)
            
    def NewDrill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_DRILL)
            
    def NewCentreDrill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_CENTREDRILL)
            
    def NewEndMill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_ENDMILL)
            
    def NewSlotDrill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_SLOTCUTTER)
            
    def NewBallMill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_BALLENDMILL)
            
    def NewChamferMill(self, e):
        self.AddNewTool(Tool.TOOL_TYPE_CHAMFER)
        
    def OnAutoProgram(self, event):
        if not os.path.isfile('AutoProgram.py'):
            wx.MessageBox('This is a commercial feature. Download it from here. ( website URL to do... )')
            return

        from AutoProgram import AutoProgram
        a = AutoProgram()
        if a.Edit():
            a.Run()
        
    def OnCreateGCode(self, e):
        try:
            self.program.MakeGCode()
            self.program.BackPlot()
        except Exception as e:
            import traceback
            print(traceback.format_exc())
            wx.MessageBox('error during Create G-Code: ' + str(e))
        
        
    def OnSetupSheet(self, e):
        temporary_filepath = str((wx.StandardPaths.Get().GetTempDir() + "/setup_sheet.pdf").replace('\\', '/'))
        self.program.MakeSetupSheet(temporary_filepath)
        import webbrowser
        webbrowser.open_new(temporary_filepath)

    def OnOpenGCodeFile(self, e):
        import wx
        dialog = wx.FileDialog(self.frame, "Open G-Code file", wildcard = "G-Code files" + " |*.*")
        dialog.CentreOnParent()
        
        if dialog.ShowModal() == wx.ID_OK:
            self.program.output_file_name_follows_data_file_name = False
            self.program.output_file = dialog.GetPath()
            self.program.BackPlot()

    def OnViewOutput(self, e):
        pane_info = self.aui_manager.GetPane(self.output_window)
        if pane_info.IsOk():
            pane_info.Show(e.IsChecked())
            self.aui_manager.Update()
        
    def OnUpdateViewOutput(self, e):
        e.Check(self.aui_manager.GetPane(self.output_window).IsShown())
    
    def OnLeftClick(self, event):
        if not event.controlDown:
            # check for nc code block clicked
            if self.select_mode.filter.IsTypeInFilter(cam.GetNcCodeBlockType()):
                mask = cad.Filter()
                mask.AddType(cam.GetNcCodeBlockType())
                objects = cad.ObjectsUnderWindow(cad.IRect(self.select_mode.button_down_point.x, self.select_mode.button_down_point.y), False, True, mask, False)
                if len(objects):
                    block = objects[0]
                    cad.ClearSelection()
                    cad.Select(block)
                    block.__class__ = cam.NcCodeBlock
                    self.output_window.viewport.SelectLine(block.line_number, True)
                    wx.GetApp().frame.graphics_canvas.Refresh()
                    self.output_window.Refresh()
                    return            
                
                program = wx.GetApp().program
                if program != None:
                    nccode = program.nccode
                    if nccode != None:
                        nccode.nc_code.SetHighlightedBlock(None)
        
        # do the default click behaviour
        SolidApp.OnLeftClick(self, event)
Example #18
0
 def AddExtraWindows(self, frame):
     self.output_window = OutputWindow(frame)
     frame.aui_manager.AddPane(self.output_window, wx.aui.AuiPaneInfo().Name('Output').Caption('Output').Left().Bottom().BestSize(wx.Size(600, 200)))
     self.RegisterHideableWindow(self.output_window, self.cam_dir + '/bitmaps')
Example #19
0
    def mywrite(self, s, tags=()):
        """
        while the iomark isn't changed by other functions, write in two regions:
        if tags == 'console', it will be written at the end, on the iomark.
        otherwise, it will be written before that, at the consolemark, and
        be \\r treated.
        If some console text was written, a newline will be added before the
        consolemark, unless a newline is already there.
        """
        # I'm not sure what the try and except exactly mean, but I copied them
        # from the original PyShell.write.
        try:
            # Remove escape codes
            s = self.escapeCodes.sub("", s)

            # Make it possible to write at the iomark
            self.text.mark_gravity("iomark", "right")

            # If position was changed, reset my data
            if self.text.index("iomark") != self.lastiomark:
                self.lllength = 0
                self.llinsert = 0
                self.addedNewline = False
                self.addNewline = False
                self.wasConsole = False
                self.text.mark_set("consolemark", "iomark")
                self.text.mark_gravity("consolemark", "left")

            # Remove the added newline, if there is one
            if self.addedNewline:
                self.basetext.delete("consolemark-1c", "consolemark")
                self.addedNewline = False

            # Write s
            if tags == "console":
                OutputWindow.write(self.editwin, s, tags, "iomark")
                if s:
                    if not self.wasConsole and s[0] != '\n':
                        self.addNewline = True
                    self.wasConsole = True

            else:
                self.text.mark_gravity("consolemark", "right")
                lines = s.split('\n')

                for i in range(len(lines)):
                    line = lines[i]
                    segments = line.split('\r')
                    
                    if i == 0:
                        insertindex = self.text.index("consolemark-%dc" %
                                                     (self.lllength -
                                                      self.llinsert))
                        self.basetext.delete(insertindex,
                                             insertindex + ("+%dc" % min(
                            len(segments[0]),
                            self.lllength-self.llinsert)))
                        self.basetext.insert(insertindex, segments[0], tags)
                        Links.parse(self.basetext, insertindex, \
                            '%s+%dc' % (insertindex, len(segments[0])))
                        self.llinsert = self.llinsert + len(segments[0])
                        self.lllength = max(self.lllength, self.llinsert)
                        
                        if len(segments) > 1:
                            nexts = _combine_strings(segments[1:])
                            insertindex = self.text.index("consolemark-%dc" %
                                                          self.lllength)
                            self.basetext.delete(insertindex,
                                                 insertindex +
                                                 ("+%dc" % min(len(nexts),
                                                               self.lllength)))
                            self.basetext.insert(insertindex, nexts, tags)
                            Links.parse(self.basetext, insertindex, \
                                '%s+%dc' % (insertindex, len(nexts)))
                            self.lllength = max(len(nexts), self.lllength)
                            self.llinsert = len(segments[-1])
                        
                    else:
                        # Line which is not the first
                        nexts = _combine_strings(segments)
                        insertindex = self.basetext.index("consolemark")
                        self.basetext.insert("consolemark", '\n'+nexts, tags)
                        Links.parse(self.basetext, insertindex, \
                            '%s+%dc' % (insertindex, 1 + len(nexts)))
                        self.lllength = len(nexts)
                        self.llinsert = len(segments[-1])

                self.text.mark_gravity("consolemark", "left")

            # Add a newline, if needed:
            if self.addNewline and self.lllength != 0:
                self.text.mark_gravity("consolemark", "right")
                self.basetext.insert("consolemark", "\n")
                self.text.mark_gravity("consolemark", "left")
                self.addedNewline = True

            # Remember current iomark position
            self.lastiomark = self.text.index("iomark")

            # Make it impossible to write at the iomark
            self.text.mark_gravity("iomark", "left")

            # Show what we've done
            self.text.see("insert")
            self.text.update()

        except:
            pass

        # Another part taken from the original PyShell.write
        if self.editwin.canceled:
            self.editwin.canceled = 0
            if not self.use_subprocess:
                raise KeyboardInterrupt
Example #20
0
    def mywrite(self, s, tags=()):
        """
        while the iomark isn't changed by other functions, write in two regions:
        if tags == 'console', it will be written at the end, on the iomark.
        otherwise, it will be written before that, at the consolemark, and
        be \\r treated.
        If some console text was written, a newline will be added before the
        consolemark, unless a newline is already there.
        """
        # I'm not sure what the try and except exactly mean, but I copied them
        # from the original PyShell.write.
        try:
            # Remove escape codes
            s = self.escapeCodes.sub("", s)

            # Make it possible to write at the iomark
            self.text.mark_gravity("iomark", "right")

            # If position was changed, reset my data
            if self.text.index("iomark") != self.lastiomark:
                self.lllength = 0
                self.llinsert = 0
                self.addedNewline = False
                self.addNewline = False
                self.wasConsole = False
                self.text.mark_set("consolemark", "iomark")
                self.text.mark_gravity("consolemark", "left")

            # Remove the added newline, if there is one
            if self.addedNewline:
                self.basetext.delete("consolemark-1c", "consolemark")
                self.addedNewline = False

            # Write s
            if tags == "console":
                OutputWindow.write(self.editwin, s, tags, "iomark")
                if s:
                    if not self.wasConsole and s[0] != '\n':
                        self.addNewline = True
                    self.wasConsole = True

            else:
                self.text.mark_gravity("consolemark", "right")
                lines = s.split('\n')

                for i in range(len(lines)):
                    line = lines[i]
                    segments = line.split('\r')

                    if i == 0:
                        insertindex = self.text.index(
                            "consolemark-%dc" %
                            (self.lllength - self.llinsert))
                        self.basetext.delete(
                            insertindex, insertindex +
                            ("+%dc" % min(len(segments[0]),
                                          self.lllength - self.llinsert)))
                        self.basetext.insert(insertindex, segments[0], tags)
                        Links.parse(self.basetext, insertindex, \
                            '%s+%dc' % (insertindex, len(segments[0])))
                        self.llinsert = self.llinsert + len(segments[0])
                        self.lllength = max(self.lllength, self.llinsert)

                        if len(segments) > 1:
                            nexts = _combine_strings(segments[1:])
                            insertindex = self.text.index("consolemark-%dc" %
                                                          self.lllength)
                            self.basetext.delete(
                                insertindex, insertindex +
                                ("+%dc" % min(len(nexts), self.lllength)))
                            self.basetext.insert(insertindex, nexts, tags)
                            Links.parse(self.basetext, insertindex, \
                                '%s+%dc' % (insertindex, len(nexts)))
                            self.lllength = max(len(nexts), self.lllength)
                            self.llinsert = len(segments[-1])

                    else:
                        # Line which is not the first
                        nexts = _combine_strings(segments)
                        insertindex = self.basetext.index("consolemark")
                        self.basetext.insert("consolemark", '\n' + nexts, tags)
                        Links.parse(self.basetext, insertindex, \
                            '%s+%dc' % (insertindex, 1 + len(nexts)))
                        self.lllength = len(nexts)
                        self.llinsert = len(segments[-1])

                self.text.mark_gravity("consolemark", "left")

            # Add a newline, if needed:
            if self.addNewline and self.lllength != 0:
                self.text.mark_gravity("consolemark", "right")
                self.basetext.insert("consolemark", "\n")
                self.text.mark_gravity("consolemark", "left")
                self.addedNewline = True

            # Remember current iomark position
            self.lastiomark = self.text.index("iomark")

            # Make it impossible to write at the iomark
            self.text.mark_gravity("iomark", "left")

            # Show what we've done
            self.text.see("insert")
            self.text.update()

        except:
            pass

        # Another part taken from the original PyShell.write
        if self.editwin.canceled:
            self.editwin.canceled = 0
            if not self.use_subprocess:
                raise KeyboardInterrupt
Example #21
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.item0 = BytesIO()

        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)
        bar = self.menuBar()

        file = bar.addMenu("File")
        file.addAction("New")
        file.addAction("cascade")
        file.addAction("Tiled")
        file.triggered[QAction].connect(self.windowaction)
        self.setWindowTitle("Camphor")

        MainWindow.count += 1
        self.output_window = OutputWindow()
        self.mdi.addSubWindow(self.output_window)

        MainWindow.count += 1
        self.script_window = ScriptWindow()
        self.mdi.addSubWindow(self.script_window)

        MainWindow.count += 1
        self.viewer_window = ViewerWindow()
        self.mdi.addSubWindow(self.viewer_window)

        #MainWindow.count += 1
        #self.spread_sheet = SpreadSheetWidget()
        #self.mdi.addSubWindow(self.spread_sheet)

        headers = ["000", "001", "002"]
        tableData0 = [['abc', 100, 200], ['fff', 130, 260], ['jjj', 190, 300],
                      ['ppp', 700, 500], ['yyy', 800, 900]]

        #model = MyTableModel(tableData0, headers)
        table_df = pd.DataFrame(tableData0, columns=headers)

        MainWindow.count += 1
        self.dataframe_viewer = DataFrameViewer(table_df)
        self.mdi.addSubWindow(self.dataframe_viewer)

        # QProcess object for external app
        self.process = QProcess(self)
        self.process.readyReadStandardOutput.connect(
            lambda: self.dataReady("std"))
        self.process.readyReadStandardError.connect(
            lambda: self.dataReady("error"))
        self.process.finished.connect(lambda: self.update_svg())

        #Connect Slots
        self.script_window.button_exec.clicked.connect(
            lambda: self.run_script())
        self.script_window.button_read.clicked.connect(lambda: self.read_svg())
        #self.viewer_window.button_save.clicked.connect(lambda: self.save_svg())

        #Assign Shortcuts
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+R"), self)
        self.shortcut_update.activated.connect(lambda: self.run_script())
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+O"), self)
        self.shortcut_update.activated.connect(lambda: self.read_svg())
        self.shortcut_update = QShortcut(QKeySequence("Ctrl+S"), self)
        self.shortcut_update.activated.connect(lambda: self.save_svg())