chiark / gitweb /
Some fixes in the GCode interperter. Start/End gcode is saved now.
authorDaid <daid303@gmail.com>
Wed, 22 Feb 2012 19:44:00 +0000 (20:44 +0100)
committerDaid <daid303@gmail.com>
Wed, 22 Feb 2012 19:44:00 +0000 (20:44 +0100)
SkeinPyPy_NewUI/fabmetheus_utilities/settings.py
SkeinPyPy_NewUI/newui/alterationPanel.py
SkeinPyPy_NewUI/newui/mainWindow.py
SkeinPyPy_NewUI/newui/preview3d.py

index dc479a9b30dbcb0bf08cfea219bec8c99c595aa4..55bf0fa0951ee3c42a7dac7dce1109cc27411ceb 100644 (file)
@@ -145,7 +145,7 @@ def getSkeinPyPyConfigInformation():
                        'Support_Material_Choice_': 'save',
                        'Support_Minimum_Angle_degrees': 'save',
                },'skirt': {
-                       'Activate_Skirt': 'save',
+                       'Skirt_line_count': 'save',
                        'Convex': 'ignore',
                        'Gap_Width_mm': 'save',
                        'Layers_To_index': 'ignore',
index 6618a2453f02d4122ffcc090280dbe9047f9feb2..d2dfcaf59ba4fe40cb55cd92af2d1dc510adca88 100644 (file)
@@ -1,7 +1,8 @@
 import wx\r
-import sys,math,threading\r
+import sys,math,threading,os\r
 \r
 from fabmetheus_utilities import settings\r
+from fabmetheus_utilities import archive\r
 \r
 class alterationPanel(wx.Panel):\r
        def __init__(self, parent):\r
@@ -9,11 +10,12 @@ class alterationPanel(wx.Panel):
 \r
                self.alterationFileList = ['start.gcode', 'end.gcode', 'cool_start.gcode', 'cool_end.gcode']\r
 \r
-               self.textArea = wx.TextCtrl(self, style=wx.TE_MULTILINE)\r
+               self.textArea = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_DONTWRAP|wx.TE_PROCESS_TAB)\r
+               self.textArea.SetFont(wx.Font(8, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))\r
                self.list = wx.ListBox(self, choices=self.alterationFileList, style=wx.LB_SINGLE)\r
                self.list.SetSelection(0)\r
                self.Bind(wx.EVT_LISTBOX, self.OnSelect, self.list)\r
-               self.OnSelect(None)\r
+               self.textArea.Bind(wx.EVT_KILL_FOCUS, self.OnFocusLost, self.textArea)\r
                \r
                sizer = wx.GridBagSizer()\r
                sizer.Add(self.list, (0,0), span=(1,1), flag=wx.EXPAND)\r
@@ -21,9 +23,17 @@ class alterationPanel(wx.Panel):
                sizer.AddGrowableCol(1)\r
                sizer.AddGrowableRow(0)\r
                self.SetSizer(sizer)\r
+               \r
+               self.loadFile(self.alterationFileList[self.list.GetSelection()])\r
 \r
        def OnSelect(self, e):\r
                self.loadFile(self.alterationFileList[self.list.GetSelection()])\r
 \r
        def loadFile(self, filename):\r
                self.textArea.SetValue(settings.getAlterationFile(filename))\r
+\r
+       def OnFocusLost(self, e):\r
+               filename = os.path.join(archive.getSkeinforgePath('alterations'), self.alterationFileList[self.list.GetSelection()])\r
+               f = open(filename, "w")\r
+               f.write(self.textArea.GetValue())\r
+               f.close()\r
index b42822cd2a734f520efa6023372d50aba0cf65ce..1d94fc1ec64c99da348b8343ac4dbe6735df005c 100644 (file)
@@ -61,12 +61,12 @@ class mainWindow(wx.Frame):
                
                self.AddTitle(configPanel, "Accuracy")
                self.AddSetting(configPanel, "Layer height (mm)", self.plugins['carve'].preferencesDict['Layer_Height_mm'], 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
-               self.AddTitle(configPanel, "Skirt")
-               self.AddSetting(configPanel, "Enable skirt", self.plugins['skirt'].preferencesDict['Activate_Skirt'])
-               self.AddSetting(configPanel, "Skirt distance (mm)", self.plugins['skirt'].preferencesDict['Gap_Width_mm'])
                self.AddTitle(configPanel, "Fill")
                self.AddSetting(configPanel, "Solid layers", self.plugins['fill'].preferencesDict['Solid_Surface_Thickness_layers'])
                self.AddSetting(configPanel, "Fill Density", self.plugins['fill'].preferencesDict['Infill_Solidity_ratio'])
+               self.AddTitle(configPanel, "Skirt")
+               self.AddSetting(configPanel, "Line count", self.plugins['skirt'].preferencesDict['Skirt_line_count'])
+               self.AddSetting(configPanel, "Start distance (mm)", self.plugins['skirt'].preferencesDict['Gap_Width_mm'])
                self.AddTitle(configPanel, "Retraction")
                self.AddSetting(configPanel, "Speed (mm/s)", self.plugins['dimension'].preferencesDict['Extruder_Retraction_Speed_mm/s'])
                self.AddSetting(configPanel, "Distance (mm)", self.plugins['dimension'].preferencesDict['Retraction_Distance_millimeters'])
@@ -74,7 +74,7 @@ class mainWindow(wx.Frame):
                self.AddSetting(configPanel, "Minimal travel (mm)", self.plugins['dimension'].preferencesDict['Minimum_Travel_for_Retraction_millimeters'])
 
                configPanel = wx.Panel(nb);
-               nb.AddPage(configPanel, "Machine config")
+               nb.AddPage(configPanel, "Machine && Filament")
                sizer = wx.GridBagSizer(2, 2)
                configPanel.SetSizer(sizer)
                
@@ -131,7 +131,7 @@ class mainWindow(wx.Frame):
                sizer.Add(wx.StaticLine(panel), (sizer.GetRows()+1,1), (1,3), flag=wx.EXPAND)
                sizer.SetRows(sizer.GetRows() + 2)
        
-       def AddSetting(self, panel, name, setting, help = 'TODO'):
+       def AddSetting(self, panel, name, setting, help = 'Help: TODO'):
                "Add a setting to the configuration panel"
                sizer = panel.GetSizer()
                sizer.Add(wx.StaticText(panel, -1, name), (sizer.GetRows(),1), flag=wx.ALIGN_CENTER_VERTICAL)
index cf3853b7ea2e8e1a69c527d243b606ac53098090..434c5f29d562b7027e2cc27af7f859e6030ec312 100644 (file)
@@ -1,5 +1,8 @@
 import wx\r
-import sys,math,threading\r
+import sys\r
+import math\r
+import threading\r
+import re\r
 \r
 from wx.glcanvas import GLCanvas\r
 try:\r
@@ -54,49 +57,104 @@ class myGLCanvas(GLCanvas):
                self.moveModel()\r
                self.Refresh()\r
        \r
-       def getCode(self, str, id):\r
-               pos = str.find(id)\r
-               if pos < 0:\r
-                       return '';\r
-               posEnd = str.find(' ', pos)\r
-               if posEnd < 0:\r
-                       return str[pos+1:]\r
-               return str[pos+1:posEnd]\r
+       def getCodeInt(self, str, id):\r
+               m = re.search(id + '([^\s]+)', str)\r
+               if m == None:\r
+                       return None\r
+               try:\r
+                       return int(m.group(1))\r
+               except:\r
+                       return None\r
+\r
+       def getCodeFloat(self, str, id):\r
+               m = re.search(id + '([^\s]+)', str)\r
+               if m == None:\r
+                       return None\r
+               try:\r
+                       return float(m.group(1))\r
+               except:\r
+                       return None\r
        \r
        def DoGCodeLoad(self):\r
                f = open(self.gcodeFilename, 'r')\r
                pos = Vector3()\r
+               posOffset = Vector3()\r
                currentE = 0\r
                pathList = []\r
                currentPath = {'type': 'move', 'list': [pos.copy()]}\r
+               scale = 1.0\r
+               posAbs = True\r
                for line in f:\r
-                       G = self.getCode(line, 'G')\r
-                       if G != '':\r
-                               if G == '0' or G == '1':\r
-                                       X = self.getCode(line, 'X')\r
-                                       Y = self.getCode(line, 'Y')\r
-                                       Z = self.getCode(line, 'Z')\r
-                                       E = self.getCode(line, 'E')\r
-                                       if X != '':\r
-                                               pos.x = float(X)\r
-                                       if X != '':\r
-                                               pos.y = float(Y)\r
-                                       if Z != '':\r
-                                               pos.z = float(Z)\r
+                       G = self.getCodeInt(line, 'G')\r
+                       if G is not None:\r
+                               if G == 0 or G == 1:    #Move\r
+                                       x = self.getCodeFloat(line, 'X')\r
+                                       y = self.getCodeFloat(line, 'Y')\r
+                                       z = self.getCodeFloat(line, 'Z')\r
+                                       e = self.getCodeFloat(line, 'E')\r
+                                       if x is not None:\r
+                                               if posAbs:\r
+                                                       pos.x = x * scale\r
+                                               else:\r
+                                                       pos.x += x * scale\r
+                                       if y is not None:\r
+                                               if posAbs:\r
+                                                       pos.y = y * scale\r
+                                               else:\r
+                                                       pos.y += y * scale\r
+                                       if z is not None:\r
+                                               if posAbs:\r
+                                                       pos.z = z * scale\r
+                                               else:\r
+                                                       pos.z += z * scale\r
                                        newPoint = pos.copy()\r
                                        type = 'move'\r
-                                       if E != '':\r
-                                               newEvalue = float(E)\r
-                                               if newEvalue > currentE:\r
+                                       if e is not None:\r
+                                               if e > currentE:\r
                                                        type = 'extrude'\r
-                                               if newEvalue < currentE:\r
+                                               if e < currentE:\r
                                                        type = 'retract'\r
+                                               currentE = e\r
                                        if currentPath['type'] != type:\r
                                                pathList.append(currentPath)\r
                                                currentPath = {'type': type, 'list': [currentPath['list'][-1]]}\r
                                        currentPath['list'].append(newPoint)\r
+                               elif G == 20:   #Units are inches\r
+                                       scale = 25.4\r
+                               elif G == 21:   #Units are mm\r
+                                       scale = 1.0\r
+                               elif G == 28:   #Home\r
+                                       x = self.getCodeFloat(line, 'X')\r
+                                       y = self.getCodeFloat(line, 'Y')\r
+                                       z = self.getCodeFloat(line, 'Z')\r
+                                       if x is None and y is None and z is None:\r
+                                               pos = Vector3()\r
+                                       else:\r
+                                               if x is not None:\r
+                                                       pos.x = 0.0\r
+                                               if y is not None:\r
+                                                       pos.y = 0.0\r
+                                               if z is not None:\r
+                                                       pos.z = 0.0\r
+                               elif G == 90:   #Absolute position\r
+                                       posAbs = True\r
+                               elif G == 91:   #Relative position\r
+                                       posAbs = False\r
+                               elif G == 92:\r
+                                       x = self.getCodeFloat(line, 'X')\r
+                                       y = self.getCodeFloat(line, 'Y')\r
+                                       z = self.getCodeFloat(line, 'Z')\r
+                                       e = self.getCodeFloat(line, 'E')\r
+                                       if e is not None:\r
+                                               currentE = e\r
+                                       if x is not None:\r
+                                               posOffset.x = pos.x + x\r
+                                       if y is not None:\r
+                                               posOffset.y = pos.y + y\r
+                                       if z is not None:\r
+                                               posOffset.z = pos.z + z\r
                                else:\r
-                                       print "Unknown G code:" + G\r
+                                       print "Unknown G code:" + str(G)\r
                self.pathList = pathList\r
                self.triangleMesh = None\r
                self.Refresh()\r