def createWidget(self, parent): a = (numpy.random.random((1, 100, 200, 300, 1)) * 255).astype(numpy.uint8) source = ArraySource(a) layerstack = LayerStackModel() layerstack.append(GrayscaleLayer(source)) editor = VolumeEditor(layerstack, labelsink=None, parent=self) widget = VolumeEditorWidget(parent=parent) if not _has_lazyflow: widget.setEnabled(False) widget.init(editor) editor.dataShape = a.shape return widget
def initUic(self): self.g = g = Graph() #get the absolute path of the 'ilastik' module uic.loadUi("designerElements/MainWindow.ui", self) self.actionQuit.triggered.connect(qApp.quit) def toggleDebugPatches(show): self.editor.showDebugPatches = show self.actionShowDebugPatches.toggled.connect(toggleDebugPatches) self.layerstack = LayerStackModel() readerNew = op.OpH5ReaderBigDataset(g) readerNew.inputs["Filenames"].setValue([ "scripts/CB_compressed_XY.h5", "scripts/CB_compressed_XZ.h5", "scripts/CB_compressed_YZ.h5" ]) readerNew.inputs["hdf5Path"].setValue("volume/data") datasrc = LazyflowSource(readerNew.outputs["Output"]) layer1 = GrayscaleLayer(datasrc) layer1.name = "Big Data" self.layerstack.append(layer1) shape = readerNew.outputs["Output"].meta.shape print shape self.editor = VolumeEditor(shape, self.layerstack) #self.editor.setDrawingEnabled(False) self.volumeEditorWidget.init(self.editor) model = self.editor.layerStack self.layerWidget.init(model) self.UpButton.clicked.connect(model.moveSelectedUp) model.canMoveSelectedUp.connect(self.UpButton.setEnabled) self.DownButton.clicked.connect(model.moveSelectedDown) model.canMoveSelectedDown.connect(self.DownButton.setEnabled) self.DeleteButton.clicked.connect(model.deleteSelected) model.canDeleteSelected.connect(self.DeleteButton.setEnabled)
def _initEditor(self, crosshair, is_3d_widget_visible): """ Initialize the Volume Editor GUI. """ self.editor = VolumeEditor(self.layerstack, parent=self, crosshair=crosshair, is_3d_widget_visible=is_3d_widget_visible) # Replace the editor's navigation interpreter with one that has extra functionality self.clickReporter = ClickReportingInterpreter( self.editor.navInterpret, self.editor.posModel) self.editor.setNavigationInterpreter(self.clickReporter) self.clickReporter.rightClickReceived.connect( self._handleEditorRightClick) self.clickReporter.leftClickReceived.connect( self._handleEditorLeftClick) self.clickReporter.toolTipReceived.connect(self._handleEditorToolTip) clickReporter2 = ClickReportingInterpreter( self.editor.brushingInterpreter, self.editor.posModel) clickReporter2.rightClickReceived.connect(self._handleEditorRightClick) self.editor.brushingInterpreter = clickReporter2 self.editor.setInteractionMode('navigation') self.volumeEditorWidget.init(self.editor) self.editor._lastImageViewFocus = 0 # Zoom at a 1-1 scale to avoid loading big datasets entirely... for view in self.editor.imageViews: view.doScaleTo(1) # Should we default to 2D? prefer_2d = False for multislot in self.observedSlots: for slot in multislot: if slot.ready() and slot.meta.prefer_2d: prefer_2d = True break if prefer_2d: # Default to Z (axis 2 in the editor) self.volumeEditorWidget.quadview.ensureMaximized(2)
def __init__(self, parent=None): QMainWindow.__init__(self, parent) uiDirectory = os.path.split(volumina.__file__)[0] if uiDirectory == "": uiDirectory = "." loadUi(uiDirectory + "/viewer.ui", self) self._dataShape = None self._viewerInitialized = False self.editor = None self.viewingWidget = None self.actionQuit.triggered.connect(qApp.quit) # when connecting in renderScreenshot to a partial(...) function, # we need to remember the created function to be able to disconnect # to it later self._renderScreenshotDisconnect = None self.initLayerstackModel() self.actionCurrentView = QAction(QIcon(), "Only for selected view", self.menuView) f = self.actionCurrentView.font() f.setBold(True) self.actionCurrentView.setFont(f) # Lazy import here to prevent this module from ignoring volumine.NO3D flag. from volumina.volumeEditor import VolumeEditor self.editor = VolumeEditor(self.layerstack, parent=self) # make sure the layer stack widget, which is the right widget # managed by the splitter self.splitter shows up correctly # TODO: find a proper way of doing this within the designer def adjustSplitter(): s = self.splitter.sizes() s = [int(0.66 * s[0]), s[0] - int(0.66 * s[0])] self.splitter.setSizes(s) QTimer.singleShot(0, adjustSplitter)