
- Added RigidConstraint. - Depricated some methods (get_result, get_constrainedness) and added some new methods (get_solution, get_cluster, get_status). Removed old SelectionConstraint and renamed FunctionConstraint to SelectionConstraint Depricated ClusterSolver2D Small bugfixes in cluster ClusterSolver3D Renamed solvergui directory to workbench Renamed solvertest directory to test
142 lines
4.9 KiB
Python
142 lines
4.9 KiB
Python
import pdb
|
|
from includes import *
|
|
from constants import *
|
|
from viewport import *
|
|
|
|
class ViewportManager:
|
|
def __init__(self, window):
|
|
self.activeViewport = None
|
|
|
|
self.mainWindow = window
|
|
self.viewportList = []
|
|
self.viewport = None
|
|
self.splitterVertical = QtGui.QSplitter()
|
|
|
|
self.frmt = QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers)
|
|
#self.frmt.setDoubleBuffer(True)
|
|
#self.frmt.setOverlay(True)
|
|
self.displayViewport = DisplayViewport.ALL
|
|
self.mouseActiveAction = None
|
|
|
|
def getActiveViewportType(self):
|
|
return self.activeViewport
|
|
|
|
def getMainWindow(self):
|
|
return self.mainWindow
|
|
|
|
def showViewport(self, displViewport, vpType):
|
|
self.cleanUp()
|
|
self.displayViewport = displViewport
|
|
|
|
if displViewport == DisplayViewport.ALL:
|
|
self.showAll()
|
|
elif displViewport == DisplayViewport.SINGLE:
|
|
self.showSingle(vpType)
|
|
|
|
def showAll(self):
|
|
self.viewDownLeft = Viewport(self, ViewportType.FRONT)
|
|
self.viewUpRight = Viewport(self, ViewportType.SIDE)
|
|
self.viewUpLeft = Viewport(self, ViewportType.TOP)
|
|
self.viewDownRight = Viewport(self, ViewportType.PERSPECTIVE)
|
|
self.activeViewport = self.viewUpLeft
|
|
|
|
self.viewportList = [self.viewUpLeft]
|
|
self.viewportList += [self.viewDownLeft]
|
|
self.viewportList += [self.viewUpRight]
|
|
self.viewportList += [self.viewDownRight]
|
|
|
|
# splits the upper and lower two windows
|
|
self.splitterVertical = QtGui.QSplitter()
|
|
self.splitterVertical.setHandleWidth(3)
|
|
self.splitterVertical.setOrientation(QtCore.Qt.Vertical)
|
|
|
|
# splits the top windows into left and right
|
|
splitterHorUp = QtGui.QSplitter()
|
|
splitterHorUp.setHandleWidth(3)
|
|
splitterHorUp.addWidget(self.viewUpLeft)
|
|
splitterHorUp.addWidget(self.viewUpRight)
|
|
self.splitterVertical.addWidget(splitterHorUp)
|
|
|
|
# splits the lower windows into left and right
|
|
splitterHorDown = QtGui.QSplitter()
|
|
splitterHorDown.setHandleWidth(3)
|
|
splitterHorDown.addWidget(self.viewDownLeft)
|
|
splitterHorDown.addWidget(self.viewDownRight)
|
|
splitterHorDown.moveSplitter(50, 1)
|
|
self.splitterVertical.addWidget(splitterHorDown)
|
|
self.mainWindow.setCentralWidget(self.splitterVertical)
|
|
|
|
|
|
def showSingle(self, vpType):
|
|
self.viewport = Viewport(self, vpType)
|
|
self.mainWindow.setCentralWidget(self.viewport)
|
|
self.viewport.showMaximized()
|
|
|
|
def updateViewports(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for viewport in self.viewportList:
|
|
viewport.glViewport.updateGL()
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
self.viewport.glViewport.updateGL()
|
|
|
|
def updateSolution(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for viewport in self.viewportList:
|
|
if viewport.solutionView != None and viewport.glViewport.getViewportType() == ViewportType.SOLUTION:
|
|
viewport.solutionView.createSolution()
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
if self.viewport.solutionView != None and self.viewport.glViewport.getViewportType() == ViewportType.SOLUTION:
|
|
self.viewport.solutionView.createSolution()
|
|
|
|
def updateDecomposition(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for viewport in self.viewportList:
|
|
if viewport.glViewport != None and viewport.glViewport.viewportType == ViewportType.DECOMPOSITION:
|
|
viewport.glViewport.createDecomposition()
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
if self.viewport.glViewport != None and self.viewport.glViewport.viewportType == ViewportType.DECOMPOSITION:
|
|
viewport.glViewport.createDecomposition()
|
|
|
|
def updateDecompositionFixed(self, id, fixed):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for viewport in self.viewportList:
|
|
if viewport.glViewport != None and viewport.glViewport.viewportType == ViewportType.DECOMPOSITION:
|
|
viewport.glViewport.updateState(id, fixed, viewport.glViewport.tree.root)
|
|
if self.mainWindow.compositionView != None:
|
|
self.mainWindow.compositionView.updateState(id, fixed, self.mainWindow.compositionView.tree.root)
|
|
|
|
def resetScene(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for viewport in self.viewportList:
|
|
viewport.resetViewport()
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
self.viewport.resetViewport()
|
|
|
|
def cleanUp(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
for i in range(len(self.viewportList)):
|
|
self.viewportList[i].takeWidget()
|
|
self.viewportList[i].close()
|
|
self.viewportList[i] = None
|
|
self.viewportList = []
|
|
self.splitterVertical.close()
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
if not self.viewport == None:
|
|
self.viewport.takeWidget()
|
|
self.viewport.close()
|
|
self.viewport=None
|
|
|
|
self.mainWindow.setCentralWidget(None)
|
|
|
|
def minmaxView(self):
|
|
if self.displayViewport == DisplayViewport.ALL:
|
|
self.showViewport(DisplayViewport.SINGLE, self.activeViewport.glViewport.viewportType)
|
|
elif self.displayViewport == DisplayViewport.SINGLE:
|
|
self.showViewport(DisplayViewport.ALL, None)
|
|
|
|
|
|
|
|
|
|
|
|
|