def __init__(self, navigationControler, layerStack, posModel): QObject.__init__(self) self._navCtrl = navigationControler self._navIntr = NavigationInterpreter(navigationControler) self._layerStack = layerStack self._active_layer = None self._active_channel_idx = -1 self._current_state = self.FINAL self._current_position = QPoint(0, 0) # Setting default values, scaled on actual data later on self._steps_mean = 10 self._steps_delta = self._steps_mean * 2 self._steps_scaling = 0.07 self._range_max = 4096.0 # hardcoded, in the case drange is not set in the data file or in the dataSelectionDialogue self._range_min = -4096.0 self._range = np.abs(self._range_max - self._range_min) self._channel_range = dict() self._posModel = posModel
def __init__(self, navigationControler, brushingControler): QObject.__init__(self) self._navCtrl = navigationControler self._navIntr = NavigationInterpreter(navigationControler) self._brushingCtrl = brushingControler self._current_state = self.FINAL self._temp_erasing = False # indicates, if user pressed shift # for temporary erasing (in # contrast to selecting the eraser brush) self._lineItems = [] # list of line items that have been # added to the qgraphicsscene for drawing indication self._lastEvent = None self._doubleClickTimer = None # clear the temporary line items once they # have been pushed to the sink self._brushingCtrl.wroteToSink.connect(self.clearLines)
def __init__( self, layerStackModel, parent, labelsink=None, crosshair=True, syncAlongAxes=(0,1)): super(VolumeEditor, self).__init__(parent=parent) self._sync_along = tuple(syncAlongAxes) ## ## properties ## self._showDebugPatches = False self._showTileProgress = True ## ## base components ## self.layerStack = layerStackModel self.posModel = PositionModel() self.brushingModel = BrushingModel() self.imageScenes = [ImageScene2D(self.posModel, (0,1,4), swapped_default=True), ImageScene2D(self.posModel, (0,2,4)), ImageScene2D(self.posModel, (0,3,4))] self.imageViews = [ImageView2D(parent, self.imageScenes[i]) for i in [0,1,2]] self.imageViews[0].focusChanged.connect(lambda arg=0 : self.lastImageViewFocus(arg)) self.imageViews[1].focusChanged.connect(lambda arg=1 : self.lastImageViewFocus(arg)) self.imageViews[2].focusChanged.connect(lambda arg=2 : self.lastImageViewFocus(arg)) self._lastImageViewFocus = 0 if not crosshair: for view in self.imageViews: view._crossHairCursor.enabled = False self.imagepumps = self._initImagePumps() self.view3d = self._initView3d() if useVTK else QWidget() names = ['x', 'y', 'z'] for scene, name, pump in zip(self.imageScenes, names, self.imagepumps): scene.setObjectName(name) scene.stackedImageSources = pump.stackedImageSources self.cacheSize = 50 ## ## interaction ## # event switch self.eventSwitch = EventSwitch(self.imageViews) # navigation control v3d = self.view3d if useVTK else None self.navCtrl = NavigationControler(self.imageViews, self.imagepumps, self.posModel, view3d=v3d) self.navInterpret = NavigationInterpreter(self.navCtrl) # brushing control if crosshair: self.crosshairControler = CrosshairControler(self.brushingModel, self.imageViews) self.brushingControler = BrushingControler(self.brushingModel, self.posModel, labelsink) self.brushingInterpreter = BrushingInterpreter(self.navCtrl, self.brushingControler) for v in self.imageViews: self.brushingControler._brushingModel.brushSizeChanged.connect(v._sliceIntersectionMarker._set_diameter) # initial interaction mode self.eventSwitch.interpreter = self.navInterpret ## ## connect ## self.posModel.timeChanged.connect(self.navCtrl.changeTime) self.posModel.slicingPositionChanged.connect(self.navCtrl.moveSlicingPosition) if crosshair: self.posModel.cursorPositionChanged.connect(self.navCtrl.moveCrosshair) self.posModel.slicingPositionSettled.connect(self.navCtrl.settleSlicingPosition) self.layerStack.layerAdded.connect( self._onLayerAdded )