import math from ost import gfx, geom, mol from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtOpenGL import * TRANS_VAL = 20 class DokkGLCanvas(QGLWidget): def __init__(self, format, parent=None): QGLWidget.__init__(self, format, parent) self.last_pos_=QPoint() self.setAutoFillBackground(False) #self.setAttribute(Qt.WA_KeyCompression,True) self.resize(800, 800) self.atom=mol.AtomHandle() def initializeGL(self): gfx.Scene().InitGL() self.startTimer(20) def paintGL(self): gfx.Scene().RenderGL() def paintEvent(self, event): self.makeCurrent() self.paintGL() #painter=QPainter(self) #self.RenderHUD(painter) self.swapBuffers() def RenderHUD(self, painter): painter.setPen(QColor(100, 100, 100, 50)) painter.setBrush(QColor(200, 200, 200, 50)) painter.drawRect(QRect(QPoint(0, 0), QSize(self.width(), 25))) painter.setPen(QPen(QColor(255,255,255), Qt.SolidLine)) painter.setFont(QFont("Verdana")) def resizeGL(self, w, h): gfx.Scene().Resize(w, h) def mousePressEvent(self, event): self.last_point_=QPoint(event.x(), event.y()) v1=gfx.Scene().UnProject(geom.Vec3(event.x(), self.height()-event.y(), 0.0)); v2=gfx.Scene().UnProject(geom.Vec3(event.x(), self.height()-event.y(), 1.0)); self.atom=self.world.go.PickAtom(geom.Line3(v1, v2), 0.1) self.world.go.SetColor(gfx.WHITE, '') if self.atom.IsValid(): self.world.go.SetColorForAtom(gfx.RED, self.atom) def mouseReleaseEvent(self, event): self.world.go.SetColor(gfx.WHITE, '') self.atom=mol.AtomHandle() def mouseMoveEvent(self, event): delta=QPoint(event.x(), event.y())-self.last_point_ self.last_point_=QPoint(event.x(), event.y()) if event.buttons() & Qt.LeftButton: if self.atom.IsValid(): rot=gfx.Scene().GetTransform().GetRot() force=-rot.GetRow(1)*delta.y()+rot.GetRow(0)*delta.x() self.world.AddForce(self.atom, force*2) def wheelEvent(self, event): self.OnTransform(gfx.INPUT_COMMAND_TRANSZ,0,gfx.TRANSFORM_VIEW, 0.1*(-event.delta())) def timerEvent(self, event): self.world.Update() self.update() def OnTransform(self,com, indx, trg, val): gfx.Scene().Apply(gfx.InputEvent(gfx.INPUT_DEVICE_MOUSE, com, indx,trg,val*0.5),False) def keyReleaseEvent(self, event): if event.key() == Qt.Key_Escape: QApplication.exit() class DokkGLWin(gfx.GLWinBase): def _CreateFormat(self): fmt=QGLFormat() fmt.setAlpha(True) return fmt def __init__(self): gfx.GLWinBase.__init__(self) self.canvas_=DokkGLCanvas(self._CreateFormat()) def DoRefresh(self): self.refresh_=True def SetLevel(self, level): self.canvas_.SetLevel(level) def Show(self, fullscreen): if fullscreen: self.canvas_.showFullScreen() else: self.canvas_.show() def SetStereo(): pass