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)
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;""")
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)
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)
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
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;""")
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)
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