
- 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
219 lines
7.8 KiB
Python
219 lines
7.8 KiB
Python
from includes import *
|
|
from compositionView import CompositionView
|
|
from solutionView import SolutionView
|
|
from prototypeObjects import PrototypeManager
|
|
from glViewer import *
|
|
|
|
class Viewport(QtGui.QScrollArea):
|
|
def __init__(self, viewportMngr, vpType=None, shareWidget=None, parent=None):
|
|
QtGui.QScrollArea.__init__(self, parent)
|
|
self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
|
|
|
|
self.moveActive = False
|
|
self.zoomActive = False
|
|
self.rotateActive = False
|
|
self.name = ""
|
|
self.viewportManager = viewportMngr
|
|
self.glViewport = None
|
|
self.solutionView = None
|
|
|
|
self.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Sunken)
|
|
|
|
#self.setFrameShape(QtGui.QFrame.StyledPanel)
|
|
#self.setFrameShadow(QtGui.QFrame.Plain)
|
|
self.setWidgetResizable(True)
|
|
|
|
self.setViewport(vpType, shareWidget)
|
|
self.createActions()
|
|
self.createToolbar()
|
|
self.createVerticalSplit()
|
|
self.createTriggers()
|
|
|
|
def setViewport(self,vpType, shareWidget=None):
|
|
self.setName(vpType)
|
|
self.glViewport = GLViewport(self, vpType, shareWidget, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
|
|
def setMoveActive(self, active):
|
|
self.moveActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.TRANSLATE)
|
|
|
|
def setZoomActive(self, active):
|
|
self.zoomActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.ZOOM)
|
|
|
|
def setRotateActive(self, active):
|
|
self.rotateActive = active
|
|
self.updateAction.execute(self.glViewport)
|
|
self.glViewport.cameraHandler.setActiveMouseaction(MouseAction.ROTATE)
|
|
|
|
|
|
def setGridVisibility(self, visibility=True):
|
|
self.gridVisible = visibility
|
|
|
|
def isMoveActive(self):
|
|
return self.moveActive
|
|
|
|
def isZoomActive(self):
|
|
return self.zoomActive
|
|
|
|
def isRotateActive(self):
|
|
return self.rotateActive
|
|
|
|
def isGridVisible(self):
|
|
return self.gridVisible
|
|
|
|
def isActive(self):
|
|
if self.viewportManager.getActiveViewportType() == self:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def doSync(self, active):
|
|
if self.solutionView != None:
|
|
self.solutionView.synchronise()
|
|
|
|
def createActions(self):
|
|
self.editGroup = QtGui.QActionGroup(self)
|
|
self.editGroup.setExclusive(True)
|
|
self.actionMove = QtGui.QAction(self.tr("Move"), self)
|
|
self.actionMove.setCheckable(True)
|
|
self.actionZoom = QtGui.QAction(self.tr("Zoom"), self)
|
|
self.actionZoom.setCheckable(True)
|
|
self.actionRotate = QtGui.QAction(self.tr("Rotate"), self)
|
|
self.actionRotate.setCheckable(True)
|
|
self.actionSync = QtGui.QAction(self.tr("Sync"), self)
|
|
self.editGroup.addAction(self.actionMove)
|
|
self.editGroup.addAction(self.actionZoom)
|
|
self.editGroup.addAction(self.actionRotate)
|
|
self.editGroup.addAction(self.actionSync)
|
|
if self.glViewport.getViewportType() != ViewportType.PERSPECTIVE:
|
|
self.actionRotate.setVisible(False)
|
|
if self.glViewport.getViewportType() != ViewportType.SOLUTION:
|
|
self.actionSync.setVisible(False)
|
|
|
|
def createToolbar(self):
|
|
self.toolbar = QtGui.QToolBar(self)
|
|
self.toolbar.setMaximumHeight(30)
|
|
self.toolbar.addAction(self.actionMove)
|
|
self.toolbar.addAction(self.actionZoom)
|
|
self.toolbar.addAction(self.actionRotate)
|
|
self.toolbar.addAction(self.actionSync)
|
|
|
|
self.viewportList = QtGui.QComboBox()
|
|
self.viewportList.addItem("Top")
|
|
self.viewportList.addItem("Front")
|
|
self.viewportList.addItem("Side")
|
|
self.viewportList.addItem("Perspective")
|
|
self.viewportList.addItem("Decomposition")
|
|
self.viewportList.addItem("Solution")
|
|
self.viewportList.setCurrentIndex(self.viewportList.findText(self.name))
|
|
self.viewportList.setMinimumWidth(100)
|
|
self.toolbar.addWidget(self.viewportList)
|
|
self.updateAction = UpdateActionCommand(self.getMainWindow())
|
|
|
|
|
|
def createVerticalSplit(self):
|
|
self.splitterVertical = QtGui.QSplitter()
|
|
self.splitterVertical.setHandleWidth(1)
|
|
self.splitterVertical.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Raised)
|
|
self.splitterVertical.setOrientation(QtCore.Qt.Vertical)
|
|
self.splitterVertical.addWidget(self.toolbar)
|
|
self.splitterVertical.addWidget(self.glViewport)
|
|
self.setWidget(self.splitterVertical)
|
|
self.toolbar.resize(200,1)
|
|
|
|
def createTriggers(self):
|
|
QtCore.QObject.connect(self.viewportList,QtCore.SIGNAL("currentIndexChanged(const QString &)"), self.changeViewport)
|
|
QtCore.QObject.connect(self.actionMove, QtCore.SIGNAL("triggered(bool)"), self.setMoveActive)
|
|
QtCore.QObject.connect(self.actionRotate, QtCore.SIGNAL("triggered(bool)"), self.setRotateActive)
|
|
QtCore.QObject.connect(self.actionZoom, QtCore.SIGNAL("triggered(bool)"), self.setZoomActive)
|
|
QtCore.QObject.connect(self.actionSync, QtCore.SIGNAL("triggered(bool)"), self.doSync)
|
|
|
|
def keyPressEvent(self, keyEvent):
|
|
self.glViewport.keyPressEvent(keyEvent)
|
|
|
|
def keyReleaseEvent(self, keyEvent):
|
|
self.glViewport.keyReleaseEvent(keyEvent)
|
|
|
|
def changeViewport(self, viewportName):
|
|
if self.name == viewportName:
|
|
return
|
|
else:
|
|
tool = self.glViewport.currentTool
|
|
self.glViewport.close()
|
|
|
|
if viewportName == "Top":
|
|
self.glViewport = GLViewport(self, ViewportType.TOP, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Side":
|
|
self.glViewport = GLViewport(self, ViewportType.SIDE, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Front":
|
|
self.glViewport = GLViewport(self, ViewportType.FRONT, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Perspective":
|
|
self.glViewport = GLViewport(self, ViewportType.PERSPECTIVE, None, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
|
|
elif viewportName == "Decomposition":
|
|
self.glViewport = CompositionView(self, self.viewportManager, ViewportType.DECOMPOSITION, PrototypeManager()) #self.getMainWindow().compositionView #
|
|
elif viewportName == "Solution":
|
|
self.solutionView = SolutionView(self.getMainWindow(), self.viewportManager, ViewportType.SOLUTION, PrototypeManager(), True)
|
|
self.glViewport = self.solutionView.solutionWidget
|
|
|
|
|
|
self.setActions()
|
|
for action in self.editGroup.actions():
|
|
action.setChecked(False)
|
|
self.splitterVertical.addWidget(self.glViewport)
|
|
self.setName(self.glViewport.viewportType)
|
|
self.glViewport.currentTool = tool
|
|
if self.glViewport.viewportType != ViewportType.DECOMPOSITION:
|
|
self.glViewport.makeCurrent()
|
|
|
|
def setActions(self):
|
|
if self.glViewport.getViewportType() == ViewportType.PERSPECTIVE:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(True)
|
|
self.actionSync.setVisible(False)
|
|
elif self.glViewport.getViewportType() == ViewportType.SOLUTION:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(True)
|
|
self.actionSync.setVisible(True)
|
|
elif self.glViewport.getViewportType() == ViewportType.DECOMPOSITION:
|
|
self.actionMove.setVisible(False)
|
|
self.actionZoom.setVisible(False)
|
|
self.actionRotate.setVisible(False)
|
|
self.actionSync.setVisible(False)
|
|
else:
|
|
self.actionMove.setVisible(True)
|
|
self.actionZoom.setVisible(True)
|
|
self.actionRotate.setVisible(False)
|
|
self.actionSync.setVisible(False)
|
|
|
|
|
|
def setName(self, vpType):
|
|
if vpType == ViewportType.TOP:
|
|
self.name = "Top"
|
|
elif vpType == ViewportType.SIDE:
|
|
self.name = "Side"
|
|
elif vpType == ViewportType.FRONT:
|
|
self.name = "Front"
|
|
elif vpType == ViewportType.PERSPECTIVE:
|
|
self.name = "Perspective"
|
|
elif vpType == ViewportType.DECOMPOSITION:
|
|
self.name = "Decomposition"
|
|
elif vpType == ViewportType.SOLUTION:
|
|
self.name = "Solution"
|
|
|
|
def getMainWindow(self):
|
|
return self.viewportManager.getMainWindow()
|
|
|
|
def updateViewports(self):
|
|
self.viewportManager.updateViewports()
|
|
|
|
def resetViewport(self):
|
|
self.glViewport.setCameraView()
|
|
|
|
def mousePressEvent(self, mouseEvent):
|
|
self.viewportManager.activeViewport = self
|