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
parent
a414a80837
commit
bb7e453bc4
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 = []
|
||||
|
||||
|
|
Loading…
Reference in New Issue