Some more new UI updates. Not functional yet.

UI no longer crashes if you don't have PyOpenGL.
Start of UI using skeinforge settings.
master
daid 2012-02-20 16:44:43 +01:00
parent a414a80837
commit bb7e453bc4
4 changed files with 84 additions and 26 deletions

View File

@ -14,7 +14,7 @@ def loadGlobalConfig(filename):
"Read a configuration file as global config"
global globalConfigParser
globalConfigParser = ConfigParser.ConfigParser()
print globalConfigParser.read(filename)
globalConfigParser.read(filename)
def getDefaultConfigPath():
return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../current_config.ini"))
@ -29,7 +29,7 @@ def getReadRepository(repository):
if not globals().has_key('globalConfigParser'):
loadGlobalConfig(getDefaultConfigPath())
print('getReadRepository:', repository.name)
#print('getReadRepository:', repository.name)
for p in repository.preferences:
try:
p.setValueToString(globalConfigParser.get(repository.name, safeConfigName(p.name)))
@ -102,7 +102,7 @@ class RadioCapitalizedButton( Radio ):
"Only used for the extra export options, which we are not using, so ignore the path for now"
def getFromPath( self, latentStringVar, name, path, repository, value ):
"Initialize."
print('RadioCapitalizedButton->getFromPath:', latentStringVar, name, path, repository, value )
#print('RadioCapitalizedButton->getFromPath:', latentStringVar, name, path, repository, value )
self.name = name
self.value = value
repository.preferences.append(self)
@ -112,7 +112,6 @@ class FileNameInput(StringSetting ):
"A class to display, read & write a fileName."
def getFromFileName( self, fileTypes, name, repository, value ):
#print('FileNameInput:getFromFileName:', self, fileTypes, name, repository, value )
repository.preferences.append(self)
self.name = name
self.value = value
return self
@ -151,7 +150,7 @@ class MenuRadio( BooleanSetting ):
"A class to display, read & write a boolean with associated combo box selection."
def getFromMenuButtonDisplay( self, menuButtonDisplay, name, repository, value ):
"Initialize."
print('MenuRadio->getFromMenuButtonDisplay:', menuButtonDisplay, name, repository, value )
#print('MenuRadio->getFromMenuButtonDisplay:', menuButtonDisplay, name, repository, value )
self.name = name
self.value = value
menuButtonDisplay.addRadio(self, value)

View File

@ -4,6 +4,9 @@ import __init__
import wx
from newui import preview3d
from fabmetheus_utilities import archive
from fabmetheus_utilities import settings
from skeinforge_application.skeinforge_utilities import skeinforge_profile
def main():
app = wx.App(False)
@ -21,13 +24,38 @@ class mainWindow(wx.Frame):
menubar.Append(wx.Menu(), 'Expert')
self.SetMenuBar(menubar)
plugins = {}
for m in skeinforge_profile.getCraftTypePluginModule().getCraftSequence():
plugins[m] = archive.getModuleWithDirectoryPath(archive.getCraftPluginsDirectoryPath(), m).getNewRepository()
settings.getReadRepository(plugins[m])
p = wx.Panel(self)
nb = wx.Notebook(p, size=(400,10))
nb = wx.Notebook(p, size=(500,10))
printConfig = wx.Panel(nb);
wx.StaticText(printConfig, -1, "Test", (20,20))
sizer = wx.GridBagSizer(2, 2)
printConfig.SetSizer(sizer)
for pluginName in plugins.keys():
box, configPanel = self.CreateGroup(printConfig, pluginName)
sizer.Add(box, (sizer.GetRows(),0))
sizer.SetRows(sizer.GetRows()+1)
for pref in plugins[pluginName].preferences:
self.AddSetting(configPanel, pref.name, wx.TextCtrl(configPanel, -1, str(pref)))
#self.AddSetting(generalConfig, "Speed (mm/s)", wx.TextCtrl(generalConfig, -1, "50.0"))
machineConfig = wx.Panel(nb);
sizer = wx.GridBagSizer(2, 2)
machineConfig.SetSizer(sizer)
box, dimensionsConfig = self.CreateGroup(machineConfig, "Dimensions")
self.AddSetting(dimensionsConfig, "Printer size (mm)", wx.TextCtrl(dimensionsConfig, -1, "205,205,200"))
sizer.Add(box, (0,0))
nb.AddPage(printConfig, "Print")
nb.AddPage(wx.Panel(nb), "Machine")
nb.AddPage(machineConfig, "Machine")
nb.AddPage(wx.Panel(nb), "Start/End-GCode")
p3d = preview3d.myGLCanvas(p)
@ -36,7 +64,7 @@ class mainWindow(wx.Frame):
sizer = wx.GridBagSizer()
sizer.Add(nb, (0,0), span=(2,1), flag=wx.EXPAND)
sizer.Add(p3d, (0,1), flag=wx.EXPAND)
sizer.Add(p3d, (0,1), span=(1,1), flag=wx.EXPAND)
sizer.Add(loadButton, (1,1))
sizer.AddGrowableCol(1)
sizer.AddGrowableRow(0)
@ -48,6 +76,23 @@ class mainWindow(wx.Frame):
self.Centre()
self.Show(True)
def CreateGroup(self, panel, name):
retPanel = wx.Panel(panel)
sizer = wx.GridBagSizer(2, 2)
retPanel.SetSizer(sizer)
box = wx.StaticBox(panel, -1, name)
sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
sizer.Add(retPanel)
return (sizer, retPanel)
def AddSetting(self, panel, name, ctrl):
sizer = panel.GetSizer()
sizer.Add(wx.StaticText(panel, -1, name), (sizer.GetRows(),0), flag=wx.ALIGN_BOTTOM)
sizer.Add(ctrl, (sizer.GetRows(),1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)
sizer.SetRows(sizer.GetRows()+1)
def OnQuit(self, e):
self.Close()

View File

@ -1,35 +1,45 @@
from wxPython.glcanvas import wxGLCanvas
from wxPython.wx import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
#from wxPython.glcanvas import wxGLCanvas
import wx
import sys,math
from wx.glcanvas import GLCanvas
try:
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
hasOpenGLlibs = True
except:
print "Failed to find PyOpenGL: http://pyopengl.sourceforge.net/"
hasOpenGLlibs = False
from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret
from fabmetheus_utilities.vector3 import Vector3
class myGLCanvas(wxGLCanvas):
class myGLCanvas(GLCanvas):
def __init__(self, parent):
wxGLCanvas.__init__(self, parent,-1)
EVT_PAINT(self, self.OnPaint)
EVT_SIZE(self, self.OnSize)
EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
EVT_MOTION(self, self.OnMouseMotion)
GLCanvas.__init__(self, parent,-1)
wx.EVT_PAINT(self, self.OnPaint)
wx.EVT_SIZE(self, self.OnSize)
wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
wx.EVT_MOTION(self, self.OnMouseMotion)
self.init = 0
self.triangleMesh = None
self.yaw = 0
self.pitch = 80
self.yaw = 30
self.pitch = 60
self.zoom = 150
self.machineSize = Vector3(210, 210, 200)
self.machineCenter = Vector3(100, 100, 0)
return
def loadFile(self, filename):
self.triangleMesh = fabmetheus_interpret.getCarving(filename)
minZ = self.triangleMesh.getMinimumZ()
min = self.triangleMesh.getCarveCornerMinimum()
max = self.triangleMesh.getCarveCornerMaximum()
self.moveModel()
def moveModel():
if self.triangleMesh == None:
return
for v in self.triangleMesh.vertexes:
v.z -= minZ
v.x -= min.x + (max.x - min.x) / 2
@ -40,7 +50,7 @@ class myGLCanvas(wxGLCanvas):
def OnMouseMotion(self,e):
if e.Dragging() and e.LeftIsDown():
self.yaw += e.GetX() - self.oldX
self.pitch += e.GetY() - self.oldY
self.pitch -= e.GetY() - self.oldY
if self.pitch > 170:
self.pitch = 170
if self.pitch < 10:
@ -59,7 +69,11 @@ class myGLCanvas(wxGLCanvas):
return
def OnPaint(self,event):
dc = wxPaintDC(self)
dc = wx.PaintDC(self)
if not hasOpenGLlibs:
dc.Clear()
dc.DrawText("No PyOpenGL installation found.\nNo preview window available.", 10, 10)
return
self.SetCurrent()
self.InitGL()
self.OnDraw()

View File

@ -18,7 +18,7 @@ def getProfileName(craftTypeName):
return 'SkeinPyPy profile:' + craftTypeName
def addListsToCraftTypeRepository(fileNameHelp, repository):
print('addListsToCraftTypeRepository:', fileNameHelp, repository)
#print('addListsToCraftTypeRepository:', fileNameHelp, repository)
repository.name = fileNameHelp.split('.')[-2]
repository.preferences = []