# -*- coding: utf-8 -*- """Create the Pyramid-Logo via GUI-Input.""" import sys import numpy as np from numpy import pi from PyQt4 import QtCore, QtGui, uic import pyramid.magcreator as mc import pyramid.projector as pj import pyramid.phasemapper as pm import pyramid.holoimage as hi from pyramid.magdata import MagData from pyramid.phasemap import PhaseMap from gui.create_logo import Ui_CreateLogoWidget class Overlay(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) palette = QtGui.QPalette(self.palette()) palette.setColor(palette.Background, QtCore.Qt.transparent) self.setPalette(palette) def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) painter.fillRect(event.rect(), QtGui.QBrush(QtGui.QColor(255, 255, 255, 127))) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) for i in range(6): if (self.counter / 5) % 6 == i: painter.setBrush(QtGui.QBrush(QtGui.QColor(127, 127 + (self.counter % 5)*32, 127))) else: painter.setBrush(QtGui.QBrush(QtGui.QColor(127, 127, 127))) painter.drawEllipse( self.width()/2 + 30 * np.cos(2 * pi * i / 6.0) - 10, self.height()/2 + 30 * np.sin(2 * pi * i / 6.0) - 10, 20, 20) painter.end() def showEvent(self, event): self.timer = self.startTimer(50) self.counter = 0 def hideEvent(self, event): self.killTimer(self.timer) def timerEvent(self, event): self.counter += 1 self.update() class CreateLogoWidget(QtGui.QWidget, Ui_CreateLogoWidget): def __init__(self): # Call parent constructor QtGui.QWidget.__init__(self) self.setupUi(self) self.ui = uic.loadUi('gui/create_logo.ui') # self.setCentralWidget(self.ui) # Connect Widgets with locally defined functions: self.connect(self.logoPushButton, QtCore.SIGNAL('clicked()'), self.buttonPushed) # Create overlay to indicate busy state: self.overlay = Overlay(self) # self.ui.overlay = Overlay(self.ui) self.overlay.hide() # Show Widget: self.show() self.workerThread = WorkerThread() def buttonPushed(self): self.overlay.show() x = self.xSpinBox.value() y = self.ySpinBox.value() create_logo((1, y, x), self.mplWidget.axes) self.mplWidget.draw() # self.workerThread.start() self.overlay.hide() def resizeEvent(self, event): self.overlay.resize(event.size()) event.accept() class WorkerThread(QtCore.QThread): def __init__(self, parent=None): QtCore.QThread.__init__(self) def run(self): x = self.xSpinBox.value() y = self.ySpinBox.value() create_logo((1, y, x), self.mplWidget.axes) self.mplWidget.draw() def create_logo(dim, axis): '''Calculate and display the Pyramid-Logo. Arguments: None Returns: None ''' # Input parameters: res = 10.0 # in nm phi = -pi/2 # in rad density = 10 # Create magnetic shape: mag_shape = np.zeros(dim) x = range(dim[2]) y = range(dim[1]) xx, yy = np.meshgrid(x, y) bottom = (yy >= 0.25*dim[1]) left = (yy <= 0.75/0.5 * dim[1]/dim[2] * xx) right = np.fliplr(left) mag_shape[0, ...] = np.logical_and(np.logical_and(left, right), bottom) # Create magnetic data, project it, get the phase map and display the holography image: mag_data = MagData(res, mc.create_mag_dist(mag_shape, phi)) projection = pj.simple_axis_projection(mag_data) phase_map = PhaseMap(res, pm.phase_mag_real(res, projection, 'slab')) hi.display(hi.holo_image(phase_map, density), 'PYRAMID - LOGO', axis) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) gui = CreateLogoWidget() sys.exit(app.exec_())