Example #1
0
    def initUI(self):

        vbox = QtWidgets.QVBoxLayout()

        vbox.addWidget(
            QtWidgets.QLabel("Stack units", alignment=QtCore.Qt.AlignCenter))
        # The stack units line edits
        stackLabels = ["x", "y", "z"]

        self.stackEdits = []
        for lab in stackLabels:
            hbox = QtWidgets.QHBoxLayout()
            edit = QtWidgets.QLineEdit("1.0")
            edit.setValidator(QtGui.QDoubleValidator(bottom=1e-10))
            edit.returnPressed.connect(self.stackUnitsChanged)
            hbox.addWidget(QtWidgets.QLabel(lab))
            hbox.addWidget(edit)
            vbox.addLayout(hbox)
            self.stackEdits.append(edit)

        vbox.addWidget(
            QtWidgets.QLabel("Borders", alignment=QtCore.Qt.AlignCenter))

        gridBox = QtWidgets.QGridLayout()
        self.sliderBounds = [
            QtWidgets.QSlider(QtCore.Qt.Horizontal) for _ in range(6)
        ]
        for i, s in enumerate(self.sliderBounds):
            s.setTickPosition(QtWidgets.QSlider.TicksBothSides)
            s.setRange(-100, 100)
            s.setTickInterval(1)
            s.setFocusPolicy(QtCore.Qt.ClickFocus)
            s.setTracking(True)
            s.setValue(-100 + 200 * (i % 2))
            s.valueChanged.connect(self.boundsChanged)
            s.setStyleSheet("height: 18px; border = 0px;")

            gridBox.addWidget(s, i, 1)

        vbox.addLayout(gridBox)

        line = QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)
        vbox.addWidget(
            QtWidgets.QLabel("Display", alignment=QtCore.Qt.AlignCenter))

        # the perspective/box checkboxes
        self.checkProj = createImageCheckbox(self,
                                             absPath("images/rays_persp.png"),
                                             absPath("images/rays_ortho.png"),
                                             tooltip="projection")

        self.checkBox = createImageCheckbox(
            self,
            absPath("images/wire_cube.png"),
            absPath("images/wire_cube_incative.png"),
            tooltip="toggle box")

        self.checkInterpolate = createStandardCheckbox(
            self, tooltip="interpolate values")
        self.checkInterpolate.setChecked(True)

        self.checkInvert = createStandardCheckbox(self,
                                                  tooltip="invert colors")

        self.butColor = createStandardButton(self,
                                             absPath("images/icon_colors.png"),
                                             method=self.onButtonColor,
                                             tooltip="color")

        gridBox = QtWidgets.QGridLayout()

        gridBox.addWidget(QtWidgets.QLabel("projection:\t"), 1, 0)
        gridBox.addWidget(self.checkProj, 1, 1)

        gridBox.addWidget(QtWidgets.QLabel("bounding box:\t"), 2, 0)
        gridBox.addWidget(self.checkBox, 2, 1)

        gridBox.addWidget(QtWidgets.QLabel("interpolation:\t"), 3, 0)
        gridBox.addWidget(self.checkInterpolate, 3, 1)

        gridBox.addWidget(QtWidgets.QLabel("invert colors:\t"), 4, 0)
        gridBox.addWidget(self.checkInvert, 4, 1)

        gridBox.addWidget(QtWidgets.QLabel("colormap:\t"), 5, 0)

        self.colorCombo = QtWidgets.QComboBox()

        self.colormaps = list(sorted(spimagine.config.__COLORMAPDICT__.keys()))

        self.colorCombo.setIconSize(QtCore.QSize(80, 20))

        for s in self.colormaps:
            self.colorCombo.addItem(
                QtGui.QIcon(absPath("../colormaps/cmap_%s.png" % s)), s)

        gridBox.addWidget(self.colorCombo, 5, 1)

        gridBox.addWidget(self.butColor, 6, 0)

        self.sliderAlphaPow = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderAlphaPow.setRange(0, 1., 400)
        self.sliderAlphaPow.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderAlphaPow.setTracking(True)
        self.sliderAlphaPow.setValue(1.)

        gridBox.addWidget(QtWidgets.QLabel("opacity transfer:\t"), 7, 0)
        gridBox.addWidget(self.sliderAlphaPow, 7, 1)

        self.sliderOcc = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOcc.setRange(0, 1., 100)
        self.sliderOcc.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOcc.setTracking(True)
        self.sliderOcc.setValue(0)

        gridBox.addWidget(QtWidgets.QLabel("AO strength:\t"), 8, 0)
        gridBox.addWidget(self.sliderOcc, 8, 1)

        self.sliderOccRadius = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOccRadius.setRange(4., 100., 100)
        self.sliderOccRadius.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOccRadius.setTracking(True)
        self.sliderOccRadius.setValue(21)

        gridBox.addWidget(QtWidgets.QLabel("AO radius :\t"), 9, 0)
        gridBox.addWidget(self.sliderOccRadius, 9, 1)

        self.sliderOccNPoints = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOccNPoints.setRange(10., 1000., 100)
        self.sliderOccNPoints.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOccNPoints.setTracking(True)
        self.sliderOccNPoints.setValue(31)

        gridBox.addWidget(QtWidgets.QLabel("AO n points:\t"), 10, 0)
        gridBox.addWidget(self.sliderOccNPoints, 10, 1)

        vbox.addLayout(gridBox)

        # vbox.addStretch()
        line = QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)

        #################

        line = QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)
        vbox.addWidget(line)

        self.dimensionLabel = QtWidgets.QLabel("Dimensions:",
                                               alignment=QtCore.Qt.AlignLeft)
        vbox.addWidget(self.dimensionLabel)

        self.statsLabel = QtWidgets.QLabel("Max: Min: Mean:",
                                           alignment=QtCore.Qt.AlignLeft)
        vbox.addWidget(self.statsLabel)

        self.setStyleSheet("""
        QFrame,QLabel,QLineEdit {
        color: white;
        }
        """)
        self.colorCombo.setStyleSheet("""
                                    background-color:none;
                                    color:black;
                                    font-size:8pt""")

        vbox.addStretch()

        self.setLayout(vbox)
Example #2
0
    def __init__(self, parent=None, interpolation="linear", **kwargs):
        super(QtWidgets.QWidget, self).__init__(parent)

        self.myparent = parent

        self.isCloseFlag = False

        self.setWindowTitle('spimagine')

        self.resize(900, 700)

        self.transform = TransformModel()

        self.initActions()

        self.glWidget = GLWidget(self, interpolation=interpolation)
        self.glWidget.setTransform(self.transform)

        self.sliceWidget = SliceWidget(self, interpolation=interpolation)
        self.sliceWidget.hide()

        # self.jack = JackPlugin(self.transform)
        # self.jack.start()

        self.sliceWidget.setTransform(self.transform)

        self.fwdButton = createStandardButton(
            self,
            fName=absPath("images/icon_forward.png"),
            method=self.forward,
            width=18,
            tooltip="forward")
        self.bwdButton = createStandardButton(
            self,
            fName=absPath("images/icon_backward.png"),
            method=self.backward,
            width=18,
            tooltip="backward")

        self.startButton = createStandardButton(
            self,
            fName=absPath("images/icon_start.png"),
            method=self.startPlay,
            tooltip="play")

        self.centerButton = createStandardButton(
            self,
            fName=absPath("images/icon_center.png"),
            method=self.center,
            tooltip="center view")

        self.rotateButton = createStandardButton(
            self,
            fName=absPath("images/icon_rotate.png"),
            method=self.rotate,
            tooltip="spin current view")

        self.screenshotButton = createStandardButton(
            self,
            fName=absPath("images/icon_camera.png"),
            method=self.screenShot,
            tooltip="save as png")

        self.fileOpenButton = createStandardButton(
            self,
            fName=absPath("images/icon_open.png"),
            method=self.openFile,
            tooltip="open file")

        self.fileSaveButton = createStandardButton(
            self,
            fName=absPath("images/icon_filesave.png"),
            method=self.saveFile,
            tooltip="save file as tif")

        self.checkVolSettings = createImageCheckbox(
            self,
            absPath("images/icon_volsettings_active.png"),
            absPath("images/icon_volsettings_inactive.png"),
            tooltip="volume settings")

        self.checkSettings = createImageCheckbox(
            self,
            absPath("images/icon_mainsettings_active.png"),
            absPath("images/icon_mainsettings_inactive.png"),
            tooltip="general settings")

        self.checkKey = createImageCheckbox(
            self,
            absPath("images/video.png"),
            absPath("images/video_inactive.png"),
            tooltip="keyframe editor")

        self.checkIsoView = createImageCheckbox(
            self,
            absPath("images/icon_method_vol.png"),
            absPath("images/icon_method_iso.png"),
            tooltip="iso surface")

        self.checkProcView = createImageCheckbox(
            self,
            absPath("images/icon_process_active.png"),
            absPath("images/icon_process_inactive.png"),
            tooltip="image processors")

        self.checkSliceView = createImageCheckbox(
            self,
            absPath("images/icon_slice.png"),
            absPath("images/icon_slice_inactive.png"),
            tooltip="slice view")

        self.sliderTime = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.sliderTime.setTickPosition(QtWidgets.QSlider.TicksBothSides)
        self.sliderTime.setTickInterval(1)
        self.sliderTime.setFocusPolicy(QtCore.Qt.ClickFocus)

        self.sliderTime.setTracking(False)

        self.spinTime = QtWidgets.QSpinBox()
        self.spinTime.setStyleSheet(
            "color:white;border:0px solid black;background-color:black;")
        self.spinTime.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.spinTime.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.spinTime.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)

        self.sliderTime.valueChanged.connect(self.spinTime.setValue)
        self.spinTime.valueChanged.connect(self.sliderTime.setValue)

        self.maxSlider = FloatSlider(QtCore.Qt.Vertical)

        self.maxSlider.setRange(self.N_SCALE_MIN_EXP, self.N_SCALE_MAX_EXP,
                                1000)
        self.maxSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.maxSlider.setToolTip("max")

        self.minSlider = FloatSlider(QtCore.Qt.Vertical)
        self.minSlider.setRange(self.N_SCALE_MIN_EXP, self.N_SCALE_MAX_EXP,
                                1000)
        self.minSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.minSlider.setToolTip("min")

        self.gammaSlider = FloatSlider(QtCore.Qt.Vertical)
        self.gammaSlider.setRange(.01, 2., 200)

        self.gammaSlider.setToolTip("gamma")
        self.gammaSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.gammaSlider.setValue(1.)

        # def func_from_n(n):
        #     return 2**(self.N_SCALE_MIN_EXP+(self.N_SCALE_MAX_EXP-self.N_SCALE_MIN_EXP)*(n-1.)/(self.N_SCALE_SLIDER-1))

        # def func_to_n(x):
        #     if x<2**self.N_SCALE_MIN_EXP:
        #         print "gg", x
        #         return 1
        #     elif x>2**self.N_SCALE_MAX_EXP:
        #         return self.N_SCALE_SLIDER

        #     return int(round(1.+(self.N_SCALE_SLIDER-1.)*(np.log2(x)-self.N_SCALE_MIN_EXP)/(self.N_SCALE_MAX_EXP-1.*self.N_SCALE_MIN_EXP)))

        # self.scaleSlider.valueChanged.connect(lambda x: self.transform.setValueScale(0,func_from_n(x)))
        # self.transform._maxChanged.connect(lambda x: self.scaleSlider.setValue(func_to_n(x)))

        def func1(x):
            #print("func2: %.2f \t->\t %.2f" % (x, 2**x))
            return 2**x

        def func2(x):
            #print("func2: %.2f \t->\t %.2f"%(x,np.log2(x) if x>0 else -1.e20))
            return np.log2(x) if x > 0 else -1.e20

        self.maxSlider.floatValueChanged.connect(
            lambda x: self.transform.setMax(func1(x)))
        self.transform._maxChanged.connect(
            lambda x: self.maxSlider.setValue(func2(x)))

        self.minSlider.floatValueChanged.connect(
            lambda x: self.transform.setMin(func1(x)))
        self.transform._minChanged.connect(
            lambda x: self.minSlider.setValue(func2(x)))

        self.gammaSlider.floatValueChanged.connect(self.transform.setGamma)
        self.transform._gammaChanged.connect(self.gammaSlider.setValue)

        # self.keyframes = KeyFrameList()
        self.keyPanel = KeyFramePanel(self.glWidget)
        self.keyPanel.hide()
        self.keyPanel.setStyleSheet("color:white")

        self.impListView = ImageProcessorListView([
            BlurProcessor(),
            BlurXYZProcessor(),
            NoiseProcessor(),
            FFTProcessor(),
            #LucyRichProcessor()
        ])

        self.impListView.hide()

        self.volSettingsView = VolumeSettingsPanel()
        self.volSettingsView.hide()

        self.settingsView = MainSettingsPanel()
        self.settingsView.hide()

        hbox0 = QtWidgets.QHBoxLayout()
        hbox0.addWidget(self.minSlider)

        hbox0.addWidget(self.maxSlider)
        hbox0.addWidget(self.gammaSlider)

        hbox0.addWidget(self.glWidget, stretch=3)

        hbox0.addWidget(self.sliceWidget, stretch=2)

        hbox0.addWidget(self.impListView)

        hbox0.addWidget(self.volSettingsView)
        hbox0.addWidget(self.settingsView)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.bwdButton)
        hbox.addWidget(self.startButton)
        hbox.addWidget(self.fwdButton)
        hbox.addWidget(self.sliderTime)
        hbox.addWidget(self.spinTime)

        hbox.addWidget(self.centerButton)

        hbox.addWidget(self.rotateButton)

        hbox.addWidget(self.checkKey)
        hbox.addWidget(self.screenshotButton)
        hbox.addWidget(self.fileOpenButton)
        hbox.addWidget(self.fileSaveButton)

        hbox.addSpacing(50)
        hbox.addWidget(self.checkIsoView)
        hbox.addWidget(self.checkSliceView)

        hbox.addSpacing(10)
        hbox.addWidget(self.checkProcView)

        hbox.addSpacing(10)
        hbox.addWidget(self.checkVolSettings)

        hbox.addSpacing(5)
        hbox.addWidget(self.checkSettings)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(hbox0)

        vbox.addLayout(hbox)
        vbox.addWidget(self.keyPanel)

        for box in [hbox, vbox, hbox0]:
            box.setContentsMargins(0, 0, 0, 0)

        vbox.setSpacing(1)
        hbox.setSpacing(11)
        hbox0.setSpacing(5)

        self.egg3d = spimagine.utils.egg3d.Egg3dController()

        # widget = QtWidgets.QWidget()
        self.setLayout(vbox)

        self.rotateTimer = QtCore.QTimer(self)
        self.rotateTimer.setInterval(70)
        self.rotateTimer.timeout.connect(self.onRotateTimer)

        self.playTimer = QtCore.QTimer(self)
        self.playTimer.setInterval(100)
        self.playTimer.timeout.connect(self.onPlayTimer)
        self.settingsView._playIntervalChanged.connect(
            self.playIntervalChanged)
        self.setLoopBounce(True)

        self.playDir = 1

        # a decorator as checkboxe state is  2 if checked
        def stateToBool(objFunc, invert=False):
            def _foo(x):
                if invert:
                    return objFunc(x != 2)
                else:
                    return objFunc(x == 2)

            return _foo

        self.volSettingsView.checkBox.stateChanged.connect(
            self.glWidget.transform.setBox)

        self.volSettingsView.checkInterpolate.stateChanged.connect(
            self.glWidget.transform.setInterpolate)

        self.transform._interpChanged.connect(
            self.volSettingsView.checkInterpolate.setChecked)
        self.transform._interpChanged.connect(self.glWidget.set_interpolation)

        self.volSettingsView.checkInvert.stateChanged.connect(
            stateToBool(self.glWidget.set_background_mode_black, invert=True))

        self.settingsView._substepsChanged.connect(self.substepsChanged)

        self.checkIsoView.stateChanged.connect(
            stateToBool(self.glWidget.transform.setIso))

        self.transform._isoChanged.connect(self.checkIsoView.setChecked)

        self.settingsView.checkEgg.stateChanged.connect(self.onCheckEgg)

        self.volSettingsView._boundsChanged.connect(
            self.glWidget.transform.setBounds)

        self.volSettingsView.sliderAlphaPow.floatValueChanged.connect(
            self.glWidget.transform.setAlphaPow)

        self.volSettingsView.sliderOcc.floatValueChanged.connect(
            self.glWidget.transform.setOccStrength)

        self.volSettingsView.sliderOccRadius.floatValueChanged.connect(
            self.glWidget.transform.setOccRadius)
        self.volSettingsView.sliderOccNPoints.floatValueChanged.connect(
            self.glWidget.transform.setOccNPoints)

        self.glWidget.transform._alphaPowChanged.connect(
            self.volSettingsView.sliderAlphaPow.setValue)

        self.glWidget.transform._boundsChanged.connect(
            self.volSettingsView.setBounds)

        self.transform._boxChanged.connect(
            self.volSettingsView.checkBox.setChecked)

        self.volSettingsView.checkProj.stateChanged.connect(
            self.transform.setPerspective)
        self.transform._perspectiveChanged.connect(
            self.volSettingsView.checkProj.setChecked)

        self.checkKey.stateChanged.connect(self.keyPanel.setVisible)

        self.checkVolSettings.stateChanged.connect(
            self.volSettingsView.setVisible)

        self.checkSettings.stateChanged.connect(self.settingsView.setVisible)

        self.checkSliceView.stateChanged.connect(self.sliceWidget.setVisible)
        self.checkSliceView.stateChanged.connect(self.transform.setShowSlice)

        self.checkProcView.stateChanged.connect(self.impListView.setVisible)

        self.settingsView.checkLoopBounce.stateChanged.connect(
            self.setLoopBounce)

        self.volSettingsView._stackUnitsChanged.connect(
            self.transform.setStackUnits)
        self.transform._stackUnitsChanged.connect(
            self.volSettingsView.setStackUnits)

        self.settingsView._frameNumberChanged.connect(
            self.keyPanel.setFrameNumber)
        self.settingsView._recordDelayChanged.connect(
            self.keyPanel.setRecordDelay)

        self.volSettingsView.colorCombo.currentIndexChanged.connect(
            self.onColormapChanged)
        self.volSettingsView._rgbColorChanged.connect(self.onRgbColorChanged)
        self.impListView._stateChanged.connect(self.impStateChanged)

        self.settingsView._dirNameChanged.connect(self.keyPanel.setDirName)
        # dataModel._dataSourceChanged.connect(self.dataSourceChanged)
        # dataModel._dataPosChanged.connect(self.sliderTime.setValue)

        self.glWidget._dataModelChanged.connect(self.dataModelChanged)

        self.onColormapChanged(0)

        self.checkSliceView.setChecked(False)

        self.hiddableControls = [
            self.checkSettings, self.checkVolSettings, self.startButton,
            self.sliderTime, self.spinTime, self.checkKey,
            self.screenshotButton
        ]

        # self.keyPanel.keyView.setModel(self.keyframes)

        self.setStyleSheet("""
        background-color:black;
        color:white;""")
Example #3
0
    def initUI(self):

        vbox = QtWidgets.QVBoxLayout()

        vbox.addWidget(
            QtWidgets.QLabel("Render", alignment=QtCore.Qt.AlignCenter))

        gridBox = QtWidgets.QGridLayout()

        gridBox.addWidget(QtWidgets.QLabel("loop bounce:\t"), 0, 0)
        self.checkLoopBounce = QtWidgets.QCheckBox()
        gridBox.addWidget(self.checkLoopBounce, 0, 1)

        gridBox.addWidget(QtWidgets.QLabel("play interval (ms):\t"))
        self.playInterval = QtWidgets.QLineEdit("50")
        self.playInterval.setValidator(QtGui.QIntValidator(bottom=10))
        self.playInterval.returnPressed.connect(self.playIntervalChanged)
        gridBox.addWidget(self.playInterval)

        gridBox.addWidget(QtWidgets.QLabel("subrender steps:\t"))
        self.editSubsteps = QtWidgets.QLineEdit("1")
        self.editSubsteps.setValidator(QtGui.QIntValidator(bottom=1))
        self.editSubsteps.returnPressed.connect(self.substepsChanged)
        gridBox.addWidget(self.editSubsteps)

        gridBox.addWidget(QtWidgets.QLabel("Egg3D:\t"))
        self.checkEgg = createImageCheckbox(self,
                                            absPath("images/egg.png"),
                                            absPath("images/egg_inactive.png"),
                                            tooltip="toggle egg control")

        gridBox.addWidget(self.checkEgg)

        vbox.addLayout(gridBox)

        line = QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)

        vbox.addWidget(
            QtWidgets.QLabel("General", alignment=QtCore.Qt.AlignCenter))

        renderFolder = QtWidgets.QLineEdit("./")
        hbox = QtWidgets.QHBoxLayout()

        hbox.addWidget(
            QtWidgets.QLabel("output folder: ",
                             alignment=QtCore.Qt.AlignCenter))

        hbox.addWidget(renderFolder)

        folderButton = createStandardButton(self,
                                            absPath("images/icon_folder.png"),
                                            tooltip="folder to render to")

        folderButton.clicked.connect(self.folderSelect)

        hbox.addWidget(folderButton)

        renderFolder.returnPressed.connect(
            lambda: self.setDirName(renderFolder.text()))
        self._dirNameChanged.connect(renderFolder.setText)

        self.setDirName("./")

        vbox.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QLabel("number frames:\t"))
        frameEdit = QtWidgets.QLineEdit("100")
        frameEdit.setValidator(QtGui.QIntValidator(bottom=1))
        frameEdit.returnPressed.connect(
            lambda: self._frameNumberChanged.emit(int(frameEdit.text())))
        hbox.addWidget(frameEdit)

        vbox.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QLabel("record delay (ms):\t"))
        delayEdit = QtWidgets.QLineEdit("50")
        delayEdit.setValidator(QtGui.QIntValidator(bottom=50))
        delayEdit.returnPressed.connect(
            lambda: self._recordDelayChanged.emit(int(delayEdit.text())))
        hbox.addWidget(delayEdit)

        vbox.addLayout(hbox)

        self.setStyleSheet("""
        QFrame,QLabel,QPushButton,QComboBox, QListView,QLineEdit {
        color: white;
        }
        """)

        vbox.addStretch()

        self.setLayout(vbox)
Example #4
0
    def initUI(self):



        vbox = QtWidgets.QVBoxLayout()

        vbox.addWidget(QtWidgets.QLabel("Stack units",alignment = QtCore.Qt.AlignCenter))
        # The stack units line edits
        stackLabels = ["x","y","z"]


        self.stackEdits = []
        for lab in stackLabels:
            hbox = QtWidgets.QHBoxLayout()
            edit = QtWidgets.QLineEdit("1.0")
            edit.setValidator(QtGui.QDoubleValidator(bottom=1e-10))
            edit.returnPressed.connect(self.stackUnitsChanged)
            hbox.addWidget(QtWidgets.QLabel(lab))
            hbox.addWidget(edit)
            vbox.addLayout(hbox)
            self.stackEdits.append(edit)


        vbox.addWidget(QtWidgets.QLabel("Borders",alignment = QtCore.Qt.AlignCenter))

        gridBox = QtWidgets.QGridLayout()
        self.sliderBounds = [QtWidgets.QSlider(QtCore.Qt.Horizontal) for _ in range(6)]
        for i,s in enumerate(self.sliderBounds):
            s.setTickPosition(QtWidgets.QSlider.TicksBothSides)
            s.setRange(-100,100)
            s.setTickInterval(1)
            s.setFocusPolicy(QtCore.Qt.ClickFocus)
            s.setTracking(True)
            s.setValue(-100+200*(i%2))
            s.valueChanged.connect(self.boundsChanged)
            s.setStyleSheet("height: 22px; border = 0px;")

            gridBox.addWidget(s,i,1)


        vbox.addLayout(gridBox)
            
        line =  QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)
        vbox.addWidget(QtWidgets.QLabel("Display",alignment = QtCore.Qt.AlignCenter))

        # the perspective/box checkboxes
        self.checkProj = createImageCheckbox(self, absPath("images/rays_persp.png"),
                                             absPath("images/rays_ortho.png"), tooltip="projection")

        self.checkBox = createImageCheckbox(self, absPath("images/wire_cube.png"),
                                            absPath("images/wire_cube_incative.png"),
                                            tooltip="toggle box")

        self.checkInterpolate = createStandardCheckbox(self,
                                                  tooltip="interpolate values")
        self.checkInterpolate.setChecked(True)

        self.checkInvert = createStandardCheckbox(self,
                                               tooltip="invert colors")

        self.butColor = createStandardButton(self,absPath("images/icon_colors.png"),
                                             method = self.onButtonColor,
                                                    tooltip="color")

        gridBox = QtWidgets.QGridLayout()

        gridBox.addWidget(QtWidgets.QLabel("projection:\t"),1,0)
        gridBox.addWidget(self.checkProj,1,1)

        gridBox.addWidget(QtWidgets.QLabel("bounding box:\t"), 2, 0)
        gridBox.addWidget(self.checkBox, 2, 1)

        gridBox.addWidget(QtWidgets.QLabel("interpolation:\t"), 3, 0)
        gridBox.addWidget(self.checkInterpolate, 3, 1)

        gridBox.addWidget(QtWidgets.QLabel("invert colors:\t"),4,0)
        gridBox.addWidget(self.checkInvert,4,1)

        gridBox.addWidget(QtWidgets.QLabel("colormap:\t"),5,0)

        self.colorCombo = QtWidgets.QComboBox()

        self.colormaps = list(sorted(spimagine.config.__COLORMAPDICT__.keys()))

        self.colorCombo.setIconSize(QtCore.QSize(80,20))

        for s in self.colormaps:
            self.colorCombo.addItem(QtGui.QIcon(absPath("../colormaps/cmap_%s.png"%s)),s)

        gridBox.addWidget(self.colorCombo,5,1)

        gridBox.addWidget(self.butColor,6,0)


        self.sliderAlphaPow = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderAlphaPow.setRange(0,1.,400)
        self.sliderAlphaPow.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderAlphaPow.setTracking(True)
        self.sliderAlphaPow.setValue(1.)

        gridBox.addWidget(QtWidgets.QLabel("opacity transfer:\t"),7,0)
        gridBox.addWidget(self.sliderAlphaPow,7,1)

        self.sliderOcc = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOcc.setRange(0,1.,100)
        self.sliderOcc.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOcc.setTracking(True)
        self.sliderOcc.setValue(0)

        gridBox.addWidget(QtWidgets.QLabel("AO strength:\t"),8,0)
        gridBox.addWidget(self.sliderOcc,8,1)

        self.sliderOccRadius = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOccRadius.setRange(4.,100.,100)
        self.sliderOccRadius.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOccRadius.setTracking(True)
        self.sliderOccRadius.setValue(21)

        gridBox.addWidget(QtWidgets.QLabel("AO radius :\t"),9,0)
        gridBox.addWidget(self.sliderOccRadius,9,1)

        self.sliderOccNPoints = FloatSlider(QtCore.Qt.Horizontal)
        self.sliderOccNPoints.setRange(10.,1000.,100)
        self.sliderOccNPoints.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.sliderOccNPoints.setTracking(True)
        self.sliderOccNPoints.setValue(31)

        gridBox.addWidget(QtWidgets.QLabel("AO n points:\t"),10,0)
        gridBox.addWidget(self.sliderOccNPoints,10,1)

        vbox.addLayout(gridBox)

        # vbox.addStretch()
        line =  QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)

        #################

        line =  QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)
        vbox.addWidget(line)

        self.dimensionLabel = QtWidgets.QLabel("Dimensions:",alignment = QtCore.Qt.AlignLeft)
        vbox.addWidget(self.dimensionLabel)

        self.statsLabel = QtWidgets.QLabel("Max: Min: Mean:",alignment = QtCore.Qt.AlignLeft)
        vbox.addWidget(self.statsLabel)

        self.setStyleSheet("""
        QFrame,QLabel{
        color: white;
        }
        QLineEdit {
        color: gray;
        background: black;
         }

        """)
        self.colorCombo.setStyleSheet("""
                                    background-color:none;
                                    color:black;
                                    font-size:8pt""")

        vbox.addStretch()

        self.setLayout(vbox)
Example #5
0
    def initUI(self):
        self.keyView = KeyListView()

        self.setAcceptDrops(True)

        self.playTimer = QTimer(self)
        self.playTimer.setInterval(50)
        self.playTimer.timeout.connect(self.onPlayTimer)
        self.recordTimer = QTimer(self)
        self.recordTimer.setInterval(self._record_delay)

        self.recordTimer.timeout.connect(self.onRecordTimer)

        self.playButton = createStandardButton(
            self,
            fName=absPath("images/icon_start.png"),
            method=self.onPlay,
            tooltip="play animation")
        self.playButton.setMaximumWidth(24)
        self.playButton.setMaximumHeight(24)

        self.recordButton = createStandardButton(
            self,
            fName=absPath("images/icon_record.png"),
            method=self.onRecord,
            tooltip="render images to folder")

        self.recordButton.setMaximumWidth(24)
        self.recordButton.setMaximumHeight(24)

        self.distributeButton = createStandardButton(
            self,
            fName=absPath("images/icon_distribute.png"),
            method=self.onDistribute,
            tooltip="sync data timepoints to data keyframe position")

        self.distributeButton.setMaximumWidth(24)
        self.distributeButton.setMaximumHeight(24)

        self.saveButton = createStandardButton(
            self,
            fName=absPath("images/icon_save.png"),
            method=self.onSave,
            tooltip="save keyframes as json")

        self.saveButton.setMaximumWidth(24)
        self.saveButton.setMaximumHeight(24)

        self.trashButton = createStandardButton(
            self,
            fName=absPath("images/icon_trash.png"),
            method=self.onTrash,
            tooltip="delet all keyframes")

        self.trashButton.setMaximumWidth(24)
        self.trashButton.setMaximumHeight(24)

        self.slider = QSlider(Qt.Horizontal)
        self.slider.setTickPosition(QSlider.TicksBothSides)
        self.slider.setTickInterval(1)
        self.slider.setFocusPolicy(Qt.ClickFocus)
        self.slider.setTracking(False)

        self.slider.setRange(0, 100)
        self.slider.setStyleSheet("height: 12px; border = 0px;")

        hbox = QHBoxLayout()

        hbox.addWidget(self.playButton)
        hbox.addWidget(self.recordButton)
        hbox.addWidget(self.distributeButton)
        hbox.addWidget(self.saveButton)

        hbox.addWidget(self.trashButton)
        hbox.addWidget(self.keyView)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox)
        vbox.addWidget(self.slider)

        def _set_value_without_emitting(val):
            old = self.slider.blockSignals(True)
            self.slider.setValue(int(100 * val))
            self.slider.blockSignals(old)

        self._keyTimeChanged.connect(_set_value_without_emitting)

        self.slider.valueChanged.connect(lambda x: self.setKeyTime(x / 100.))

        self.setLayout(vbox)
        self.setFrameNumber(100)

        self.setDirName("./")
        self.t = 0
Example #6
0
    def __init__(self, parent = None, interpolation = "linear", **kwargs):
        super(QtWidgets.QWidget,self).__init__(parent)

        self.myparent = parent

        self.isCloseFlag = False

        self.setWindowTitle('spimagine')

        self.resize(900, 700)



        self.transform = TransformModel()

        self.initActions()


        self.glWidget = GLWidget(self,interpolation = interpolation)
        self.glWidget.setTransform(self.transform)

        self.sliceWidget = SliceWidget(self, interpolation = interpolation)
        self.sliceWidget.hide()

        # self.jack = JackPlugin(self.transform)
        # self.jack.start()


        self.sliceWidget.setTransform(self.transform)

        self.fwdButton = createStandardButton(self,
                fName = absPath("images/icon_forward.png"),
                method = self.forward, width = 18, tooltip="forward")
        self.bwdButton = createStandardButton(self,
                fName = absPath("images/icon_backward.png"),
                method = self.backward, width = 18, tooltip="backward")

        self.startButton = createStandardButton(self, fName = absPath("images/icon_start.png"),
                                                method = self.startPlay, tooltip="play")



        self.centerButton = createStandardButton(self,
                        fName = absPath("images/icon_center.png"),
                        method = self.center, tooltip = "center view")

        self.rotateButton = createStandardButton(self,
                        fName = absPath("images/icon_rotate.png"),
                        method = self.rotate, tooltip = "spin current view")

        self.screenshotButton = createStandardButton(self,
                        fName = absPath("images/icon_camera.png"),
                        method = self.screenShot,
                        tooltip = "save as png")

        self.fileOpenButton = createStandardButton(self,
                        fName = absPath("images/icon_open.png"),
                        method = self.openFile, tooltip = "open file")

        self.fileSaveButton = createStandardButton(self,
                        fName = absPath("images/icon_filesave.png"),
                        method = self.saveFile, tooltip = "save file as tif")

        self.checkVolSettings = createImageCheckbox(self,
                                                    absPath("images/icon_volsettings_active.png"),
                                                    absPath("images/icon_volsettings_inactive.png"),
                                                    tooltip="volume settings")

        self.checkSettings = createImageCheckbox(self,
                                                 absPath("images/icon_mainsettings_active.png"),
                                                 absPath("images/icon_mainsettings_inactive.png"),
                                                 tooltip="general settings")


        self.checkKey = createImageCheckbox(self, absPath("images/video.png"), absPath("images/video_inactive.png"), tooltip="keyframe editor")

        self.checkIsoView = createImageCheckbox(self,
                                                absPath("images/icon_method_vol.png"),
                                                absPath("images/icon_method_iso.png"),
                                                tooltip="iso surface")

        self.checkProcView = createImageCheckbox(self,
                                                 absPath("images/icon_process_active.png"),
                                                 absPath("images/icon_process_inactive.png"),
                                                 tooltip="image processors")


        self.checkSliceView = createImageCheckbox(
            self,
            absPath("images/icon_slice.png"),
            absPath("images/icon_slice_inactive.png"), tooltip="slice view")


        self.sliderTime = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.sliderTime.setTickPosition(QtWidgets.QSlider.TicksBothSides)
        self.sliderTime.setTickInterval(1)
        self.sliderTime.setFocusPolicy(QtCore.Qt.ClickFocus)

        self.sliderTime.setTracking(False)


        self.spinTime = QtWidgets.QSpinBox()
        self.spinTime.setStyleSheet("color:white;border:0px solid black;background-color:black;")
        self.spinTime.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        self.spinTime.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.spinTime.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0)


        self.sliderTime.valueChanged.connect(self.spinTime.setValue)
        self.spinTime.valueChanged.connect(self.sliderTime.setValue)


        self.maxSlider = FloatSlider(QtCore.Qt.Vertical)

        self.maxSlider.setRange(self.N_SCALE_MIN_EXP, self.N_SCALE_MAX_EXP, 1000)
        self.maxSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.maxSlider.setToolTip("max")

        self.minSlider = FloatSlider(QtCore.Qt.Vertical)
        self.minSlider.setRange(self.N_SCALE_MIN_EXP,self.N_SCALE_MAX_EXP,1000)
        self.minSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.minSlider.setToolTip("min")


        self.gammaSlider = FloatSlider(QtCore.Qt.Vertical)
        self.gammaSlider.setRange(.01,2.,200)

        self.gammaSlider.setToolTip("gamma")
        self.gammaSlider.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.gammaSlider.setValue(1.)


        # def func_from_n(n):
        #     return 2**(self.N_SCALE_MIN_EXP+(self.N_SCALE_MAX_EXP-self.N_SCALE_MIN_EXP)*(n-1.)/(self.N_SCALE_SLIDER-1))


        # def func_to_n(x):
        #     if x<2**self.N_SCALE_MIN_EXP:
        #         print "gg", x
        #         return 1
        #     elif x>2**self.N_SCALE_MAX_EXP:
        #         return self.N_SCALE_SLIDER

        #     return int(round(1.+(self.N_SCALE_SLIDER-1.)*(np.log2(x)-self.N_SCALE_MIN_EXP)/(self.N_SCALE_MAX_EXP-1.*self.N_SCALE_MIN_EXP)))


        # self.scaleSlider.valueChanged.connect(lambda x: self.transform.setValueScale(0,func_from_n(x)))
        # self.transform._maxChanged.connect(lambda x: self.scaleSlider.setValue(func_to_n(x)))


        def func1(x):
            #print("func2: %.2f \t->\t %.2f" % (x, 2**x))
            return 2**x

        def func2(x):
            #print("func2: %.2f \t->\t %.2f"%(x,np.log2(x) if x>0 else -1.e20))
            return np.log2(x) if x>0 else -1.e20

        self.maxSlider.floatValueChanged.connect(lambda x: self.transform.setMax(func1(x)))
        self.transform._maxChanged.connect(lambda x:self.maxSlider.setValue(func2(x)))


        self.minSlider.floatValueChanged.connect(lambda x: self.transform.setMin(func1(x)))
        self.transform._minChanged.connect(lambda x:self.minSlider.setValue(func2(x)))


        self.gammaSlider.floatValueChanged.connect(self.transform.setGamma)
        self.transform._gammaChanged.connect(self.gammaSlider.setValue)

        # self.keyframes = KeyFrameList()
        self.keyPanel = KeyFramePanel(self.glWidget)
        self.keyPanel.hide()
        self.keyPanel.setStyleSheet("color:white")

        self.impListView = ImageProcessorListView([BlurProcessor(),
                                                   BlurXYZProcessor(),
                                                   NoiseProcessor(),
                                                   FFTProcessor(),
                                                   #LucyRichProcessor()
                                                   ])

        self.impListView.hide()

        self.volSettingsView = VolumeSettingsPanel()
        self.volSettingsView.hide()

        self.settingsView = MainSettingsPanel()
        self.settingsView.hide()




        hbox0 = QtWidgets.QHBoxLayout()
        hbox0.addWidget(self.minSlider)

        hbox0.addWidget(self.maxSlider)
        hbox0.addWidget(self.gammaSlider)

        hbox0.addWidget(self.glWidget,stretch = 3)

        hbox0.addWidget(self.sliceWidget,stretch =2)


        hbox0.addWidget(self.impListView)


        hbox0.addWidget(self.volSettingsView)
        hbox0.addWidget(self.settingsView)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.bwdButton)
        hbox.addWidget(self.startButton)
        hbox.addWidget(self.fwdButton)
        hbox.addWidget(self.sliderTime)
        hbox.addWidget(self.spinTime)

        hbox.addWidget(self.centerButton)

        hbox.addWidget(self.rotateButton)

        hbox.addWidget(self.checkKey)
        hbox.addWidget(self.screenshotButton)
        hbox.addWidget(self.fileOpenButton)
        hbox.addWidget(self.fileSaveButton)

        hbox.addSpacing(50)
        hbox.addWidget(self.checkIsoView)
        hbox.addWidget(self.checkSliceView)

        hbox.addSpacing(10)
        hbox.addWidget(self.checkProcView)

        hbox.addSpacing(10)
        hbox.addWidget(self.checkVolSettings)

        hbox.addSpacing(5)
        hbox.addWidget(self.checkSettings)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(hbox0)

        vbox.addLayout(hbox)
        vbox.addWidget(self.keyPanel)


        for box in [hbox,vbox,hbox0]:
            box.setContentsMargins(0,0,0,0)

        vbox.setSpacing(1)
        hbox.setSpacing(11)
        hbox0.setSpacing(5)


        self.egg3d = spimagine.utils.egg3d.Egg3dController()

        # widget = QtWidgets.QWidget()
        self.setLayout(vbox)



        self.rotateTimer = QtCore.QTimer(self)
        self.rotateTimer.setInterval(70)
        self.rotateTimer.timeout.connect(self.onRotateTimer)

        self.playTimer = QtCore.QTimer(self)
        self.playTimer.setInterval(100)
        self.playTimer.timeout.connect(self.onPlayTimer)
        self.settingsView._playIntervalChanged.connect(self.playIntervalChanged)
        self.setLoopBounce(True)

        self.playDir = 1

        # a decorator as checkboxe state is  2 if checked
        def stateToBool(objFunc, invert = False):
            def _foo(x):
                if invert:
                    return objFunc(x!=2)
                else:
                    return objFunc(x==2)
            return _foo

        self.volSettingsView.checkBox.stateChanged.connect(
            self.glWidget.transform.setBox)

        self.volSettingsView.checkInterpolate.stateChanged.connect(
            self.glWidget.transform.setInterpolate)

        self.transform._interpChanged.connect(self.volSettingsView.checkInterpolate.setChecked)
        self.transform._interpChanged.connect(self.glWidget.set_interpolation)

        self.volSettingsView.checkInvert.stateChanged.connect(
            stateToBool(self.glWidget.set_background_mode_black,invert = True))

        self.settingsView._substepsChanged.connect(self.substepsChanged)

        self.checkIsoView.stateChanged.connect(
            stateToBool(self.glWidget.transform.setIso))

        self.transform._isoChanged.connect(self.checkIsoView.setChecked)



        self.settingsView.checkEgg.stateChanged.connect(self.onCheckEgg)

        self.volSettingsView._boundsChanged.connect(self.glWidget.transform.setBounds)

        self.volSettingsView.sliderAlphaPow.floatValueChanged.connect(self.glWidget.transform.setAlphaPow)

        self.volSettingsView.sliderOcc.floatValueChanged.connect(
            self.glWidget.transform.setOccStrength)

        self.volSettingsView.sliderOccRadius.floatValueChanged.connect(
                self.glWidget.transform.setOccRadius)
        self.volSettingsView.sliderOccNPoints.floatValueChanged.connect(
            self.glWidget.transform.setOccNPoints)

        self.glWidget.transform._alphaPowChanged.connect(self.volSettingsView.sliderAlphaPow.setValue)

        self.glWidget.transform._boundsChanged.connect(self.volSettingsView.setBounds)

        self.transform._boxChanged.connect(self.volSettingsView.checkBox.setChecked)


        self.volSettingsView.checkProj.stateChanged.connect(self.transform.setPerspective)
        self.transform._perspectiveChanged.connect(self.volSettingsView.checkProj.setChecked)

        self.checkKey.stateChanged.connect(self.keyPanel.setVisible)

        self.checkVolSettings.stateChanged.connect(self.volSettingsView.setVisible)

        self.checkSettings.stateChanged.connect(self.settingsView.setVisible)

        self.checkSliceView.stateChanged.connect(self.sliceWidget.setVisible)
        self.checkSliceView.stateChanged.connect(self.transform.setShowSlice)

        self.checkProcView.stateChanged.connect(self.impListView.setVisible)

        self.settingsView.checkLoopBounce.stateChanged.connect(self.setLoopBounce)

        self.volSettingsView._stackUnitsChanged.connect(self.transform.setStackUnits)
        self.transform._stackUnitsChanged.connect(self.volSettingsView.setStackUnits)

        self.settingsView._frameNumberChanged.connect(self.keyPanel.setFrameNumber)
        self.settingsView._recordDelayChanged.connect(self.keyPanel.setRecordDelay)

        self.volSettingsView.colorCombo.currentIndexChanged.connect(self.onColormapChanged)
        self.volSettingsView._rgbColorChanged.connect(self.onRgbColorChanged)
        self.impListView._stateChanged.connect(self.impStateChanged)

        self.settingsView._dirNameChanged.connect(self.keyPanel.setDirName)
        # dataModel._dataSourceChanged.connect(self.dataSourceChanged)
        # dataModel._dataPosChanged.connect(self.sliderTime.setValue)

        self.glWidget._dataModelChanged.connect(self.dataModelChanged)

        self.onColormapChanged(0)

        self.checkSliceView.setChecked(False)

        self.hiddableControls = [self.checkSettings,self.checkVolSettings,
                                 self.startButton,self.sliderTime,self.spinTime,
                                 self.checkKey,self.screenshotButton ]

        # self.keyPanel.keyView.setModel(self.keyframes)

        self.setStyleSheet("""
        background-color:black;
        color:white;""")
Example #7
0
    def initUI(self):


        vbox = QtWidgets.QVBoxLayout()


        vbox.addWidget(QtWidgets.QLabel("Render",alignment = QtCore.Qt.AlignCenter))

        gridBox = QtWidgets.QGridLayout()

        gridBox.addWidget(QtWidgets.QLabel("loop bounce:\t"),0,0)
        self.checkLoopBounce = QtWidgets.QCheckBox()
        gridBox.addWidget(self.checkLoopBounce,0,1)


        gridBox.addWidget(QtWidgets.QLabel("play interval (ms):\t"))
        self.playInterval = QtWidgets.QLineEdit("50")
        self.playInterval.setValidator(QtGui.QIntValidator(bottom=10))
        self.playInterval.returnPressed.connect(self.playIntervalChanged)
        gridBox.addWidget(self.playInterval)

        gridBox.addWidget(QtWidgets.QLabel("subrender steps:\t"))
        self.editSubsteps = QtWidgets.QLineEdit("1")
        self.editSubsteps.setValidator(QtGui.QIntValidator(bottom=1))
        self.editSubsteps.returnPressed.connect(self.substepsChanged)
        gridBox.addWidget(self.editSubsteps)

        gridBox.addWidget(QtWidgets.QLabel("Egg3D:\t"))
        self.checkEgg = createImageCheckbox(self, absPath("images/egg.png"),
                                            absPath("images/egg_inactive.png"),
                                            tooltip="toggle egg control")

        gridBox.addWidget(self.checkEgg)

        vbox.addLayout(gridBox)

        line =  QtWidgets.QFrame()
        line.setFrameShape(QtWidgets.QFrame.HLine)

        vbox.addWidget(line)

        vbox.addWidget(QtWidgets.QLabel("General",
                                    alignment = QtCore.Qt.AlignCenter))

        renderFolder = QtWidgets.QLineEdit("./")
        hbox = QtWidgets.QHBoxLayout()

        hbox.addWidget(QtWidgets.QLabel("output folder: ",
                                    alignment = QtCore.Qt.AlignCenter))

        hbox.addWidget(renderFolder)

        folderButton = createStandardButton(self,
                        absPath("images/icon_folder.png"),
                        tooltip = "folder to render to")
        
        folderButton.clicked.connect(self.folderSelect)

        hbox.addWidget(folderButton)

        renderFolder.returnPressed.connect(lambda: self.setDirName(renderFolder.text()))
        self._dirNameChanged.connect(renderFolder.setText)

        self.setDirName("./")

        vbox.addLayout(hbox)

        
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QLabel("number frames:\t"))
        frameEdit = QtWidgets.QLineEdit("100")
        frameEdit.setValidator(QtGui.QIntValidator(bottom=1))
        frameEdit.returnPressed.connect(lambda: self._frameNumberChanged.emit(int(frameEdit.text())))
        hbox.addWidget(frameEdit)

        vbox.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QLabel("record delay (ms):\t"))
        delayEdit = QtWidgets.QLineEdit("50")
        delayEdit.setValidator(QtGui.QIntValidator(bottom=50))
        delayEdit.returnPressed.connect(lambda: self._recordDelayChanged.emit(int(delayEdit.text())))
        hbox.addWidget(delayEdit)

        vbox.addLayout(hbox)

        self.setStyleSheet("""
        QFrame,QLabel,QPushButton,QComboBox, QListView{
        color: white;
        background: black;
        }
        QLineEdit {
        background: black; 
        color: gray;
         }
        """)

        vbox.addStretch()

        self.setLayout(vbox)
Example #8
0
    def initUI(self):
        self.keyView =  KeyListView()


        self.setAcceptDrops(True)

        self.playTimer = QTimer(self)
        self.playTimer.setInterval(self._record_delay)
        self.playTimer.timeout.connect(self.onPlayTimer)
        self.recordTimer = QTimer(self)
        self.recordTimer.setInterval(self._record_delay)

        self.recordTimer.timeout.connect(self.onRecordTimer)


        self.playButton = createStandardButton(self,
                        fName = absPath("images/icon_start.png"),
                        method = self.onPlay,
                        tooltip = "play animation")
        self.playButton.setMaximumWidth(24)
        self.playButton.setMaximumHeight(24)


        self.recordButton = createStandardButton(self,
                        fName = absPath("images/icon_record.png"),
                        method = self.onRecord,
                        tooltip = "render images to folder")

        self.recordButton.setMaximumWidth(24)
        self.recordButton.setMaximumHeight(24)


        self.distributeButton  = createStandardButton(self,
                        fName = absPath("images/icon_distribute.png"),
                        method = self.onDistribute,
                        tooltip = "sync data timepoints to data keyframe position")

        self.distributeButton.setMaximumWidth(24)
        self.distributeButton.setMaximumHeight(24)

        self.saveButton = createStandardButton(self,
                        fName = absPath("images/icon_save.png"),
                        method = self.onSave,
                        tooltip = "save keyframes as json")


        self.saveButton.setMaximumWidth(24)
        self.saveButton.setMaximumHeight(24)

        self.trashButton =createStandardButton(self,
                        fName = absPath("images/icon_trash.png"),
                        method = self.onTrash,
                        tooltip = "delet all keyframes")

        self.trashButton.setMaximumWidth(24)
        self.trashButton.setMaximumHeight(24)


        self.slider = QSlider(Qt.Horizontal)
        self.slider.setTickPosition(QSlider.TicksBothSides)
        self.slider.setTickInterval(1)
        self.slider.setFocusPolicy(Qt.ClickFocus)
        self.slider.setTracking(False)

        self.slider.setRange(0,100)
        self.slider.setStyleSheet("height: 12px; border = 0px;")


        hbox = QHBoxLayout()


        hbox.addWidget(self.playButton)
        hbox.addWidget(self.recordButton)
        hbox.addWidget(self.distributeButton)
        hbox.addWidget(self.saveButton)

        hbox.addWidget(self.trashButton)
        hbox.addWidget(self.keyView)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox)
        vbox.addWidget(self.slider)

        def _set_value_without_emitting(val):
            old = self.slider.blockSignals(True)
            self.slider.setValue(int(100*val))
            self.slider.blockSignals(old)
            
        self._keyTimeChanged.connect(_set_value_without_emitting)
        
        self.slider.valueChanged.connect(lambda x:self.setKeyTime(x/100.))

        self.setLayout(vbox)
        self.setFrameNumber(100)

        self.setDirName("./")
        self.t = 0