def __init__(self, panel, glCanvas, visFr): afp.foldingPane.__init__(self, panel, -1, caption="Display", pinned=True) self.glCanvas = glCanvas self.visFr = visFr self.scaleBarLengths = { '<None>': None, '50nm': 50, '200nm': 200, '500nm': 500, '1um': 1000, '5um': 5000 } self._pc_clim_change = False #Colourmap cmapnames = pylab.cm.cmapnames #print((cmapnames, self.glCanvas.cmap.name)) #curCMapName = self.glCanvas.cmap.name curCMapName = 'hot' cmapReversed = False if curCMapName[-2:] == '_r': cmapReversed = True curCMapName = curCMapName[:-2] cmInd = cmapnames.index(curCMapName) ## pan = wx.Panel(self, -1) box = wx.StaticBox(pan, -1, 'Colourmap:') bsizer = wx.StaticBoxSizer(box) hsizer = wx.BoxSizer(wx.HORIZONTAL) self.cColourmap = wx.Choice(pan, -1, choices=cmapnames) self.cColourmap.SetSelection(cmInd) hsizer.Add(self.cColourmap, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.cbCmapReverse = wx.CheckBox(pan, -1, 'Invert') self.cbCmapReverse.SetValue(cmapReversed) hsizer.Add(self.cbCmapReverse, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) bsizer.Add(hsizer, 0, wx.ALL, 0) bdsizer = wx.BoxSizer() bdsizer.Add(bsizer, 1, wx.EXPAND | wx.ALL, 0) pan.SetSizer(bdsizer) bdsizer.Fit(pan) #self._pnl.AddFoldPanelWindow(self, pan, fpb.FPB_ALIGN_WIDTH, fpb.FPB_DEFAULT_SPACING, 5) self.AddNewElement(pan) self.cColourmap.Bind(wx.EVT_CHOICE, self.OnCMapChange) self.cbCmapReverse.Bind(wx.EVT_CHECKBOX, self.OnCMapChange) #CLim pan = wx.Panel(self, -1) box = wx.StaticBox(pan, -1, 'CLim:') bsizer = wx.StaticBoxSizer(box, wx.VERTICAL) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(pan, -1, 'Min: '), 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) self.tCLimMin = wx.TextCtrl(pan, -1, '%3.2f' % self.glCanvas.clim[0], size=(40, -1)) hsizer.Add(self.tCLimMin, 0, wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) hsizer.Add(wx.StaticText(pan, -1, ' Max: '), 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) self.tCLimMax = wx.TextCtrl(pan, -1, '%3.2f' % self.glCanvas.clim[1], size=(40, -1)) hsizer.Add(self.tCLimMax, 0, wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) bsizer.Add(hsizer, 0, wx.ALL, 0) self.hlCLim = histLimits.HistLimitPanel(pan, -1, self.glCanvas.c, self.glCanvas.clim[0], self.glCanvas.clim[1], size=(150, 100)) bsizer.Add(self.hlCLim, 0, wx.ALL | wx.EXPAND, 5) hsizer = wx.BoxSizer(wx.HORIZONTAL) self.tPercentileCLim = wx.TextCtrl(pan, -1, '.95', size=(40, -1)) hsizer.Add(self.tPercentileCLim, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) bPercentile = wx.Button(pan, -1, 'Set Percentile') hsizer.Add(bPercentile, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) bsizer.Add(hsizer, 0, wx.ALL, 0) bdsizer = wx.BoxSizer() bdsizer.Add(bsizer, 1, wx.EXPAND | wx.ALL, 0) pan.SetSizer(bdsizer) bdsizer.Fit(pan) #self.hlCLim.Refresh() self.AddNewElement(pan) #self._pnl.AddFoldPanelWindow(self, pan, fpb.FPB_ALIGN_WIDTH, fpb.FPB_DEFAULT_SPACING, 5) self.tCLimMin.Bind(wx.EVT_TEXT, self.OnCLimChange) self.tCLimMax.Bind(wx.EVT_TEXT, self.OnCLimChange) self.hlCLim.Bind(histLimits.EVT_LIMIT_CHANGE, self.OnCLimHistChange) bPercentile.Bind(wx.EVT_BUTTON, self.OnPercentileCLim) #self._pnl.AddFoldPanelSeparator(self) #LUT cbLUTDraw = wx.CheckBox(self, -1, 'Show LUT') cbLUTDraw.SetValue(self.glCanvas.LUTDraw) self.AddNewElement(cbLUTDraw) #self._pnl.AddFoldPanelWindow(self, cbLUTDraw, fpb.FPB_ALIGN_WIDTH, fpb.FPB_DEFAULT_SPACING, 10) cbLUTDraw.Bind(wx.EVT_CHECKBOX, self.OnLUTDrawCB) #Scale Bar pan = wx.Panel(self, -1) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(pan, -1, 'Scale Bar: '), 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) chInd = list(self.scaleBarLengths.values()).index( self.glCanvas.scaleBarLength) chScaleBar = wx.Choice(pan, -1, choices=list(self.scaleBarLengths.keys())) chScaleBar.SetSelection(chInd) hsizer.Add(chScaleBar, 0, wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 5) pan.SetSizer(hsizer) hsizer.Fit(pan) self.AddNewElement(pan) #self._pnl.AddFoldPanelWindow(self, pan, fpb.FPB_ALIGN_WIDTH, fpb.FPB_DEFAULT_SPACING, 10) chScaleBar.Bind(wx.EVT_CHOICE, self.OnChangeScaleBar)
def __init__(self, parent, sourceImage, destImage): wx.Panel.__init__(self, parent) self.cancelled = False self.parent = parent self.sourceImage = sourceImage self.destImage = destImage self.nChans = self.sourceImage.data.shape[3] self.numIters = 10 sizer1 = wx.BoxSizer(wx.VERTICAL) dispSize = (120, 80) self.hI50 = [] self.tISlopes = [] self.tNeighFracs = [] self.tNSlopes = [] for i in range(self.nChans): ssizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, self.sourceImage.names[i]), wx.VERTICAL) ssizer.Add(wx.StaticText(self, -1, 'Intensity for p = .5:'), 0, wx.ALL, 2) id = wx.NewId() #self.hIds.append(id) c = self.sourceImage.data[:,:,:, i].ravel() #print c.min(), c.max() hClim = histLimits.HistLimitPanel(self, id, c[::max(1, len(c)/1e4)], c.min(), c.max(), size=dispSize, log=True, threshMode=True) #hClim.SetThresholdMode(True) #hClim.Bind(histLimits.EVT_LIMIT_CHANGE, self.OnCLimChanged) self.hI50.append(hClim) ssizer.Add(hClim, 0, wx.ALL, 2) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(self, -1, 'Slope:'), 0, wx.ALL, 2) tSlope = wx.TextCtrl(self, -1, '1.0', size=(30, -1)) self.tISlopes.append(tSlope) hsizer.Add(tSlope, 1, wx.ALL, 2) ssizer.Add(hsizer, 0, wx.ALL|wx.EXPAND, 0) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(self, -1, 'N Frac:'), 0, wx.ALL, 2) tSlope = wx.TextCtrl(self, -1, '0.5', size=(30, -1)) self.tNeighFracs.append(tSlope) hsizer.Add(tSlope, 1, wx.ALL, 2) ssizer.Add(hsizer, 0, wx.ALL|wx.EXPAND, 0) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(self, -1, 'N Slope:'), 0, wx.ALL, 2) tSlope = wx.TextCtrl(self, -1, '1', size=(30, -1)) self.tNSlopes.append(tSlope) hsizer.Add(tSlope, 1, wx.ALL, 2) ssizer.Add(hsizer, 0, wx.ALL|wx.EXPAND, 0) sizer1.Add(ssizer, 0, wx.ALL, 5) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(self, -1, '# Iters:'), 0, wx.ALL, 2) self.tNIters = wx.TextCtrl(self, -1, '10', size=(30, -1)) hsizer.Add(self.tNIters, 1, wx.ALL, 2) sizer1.Add(hsizer, 0, wx.ALL|wx.EXPAND, 2) # self.gProgress = wx.Gauge(self, -1, numIters) # # sizer1.Add(self.gProgress, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 5) btn = wx.Button(self, -1, 'Apply') btn.Bind(wx.EVT_BUTTON, self.OnApply) sizer1.Add(btn, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) # btn = wx.Button(self, -1, 'Done') # btn.Bind(wx.EVT_BUTTON, self.OnDone) # # sizer1.Add(btn, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) self.SetSizer(sizer1) sizer1.Fit(self)
def __init__(self, parent, vp): wx.Panel.__init__(self, parent) #vsizer = wx.BoxSizer(wx.VERTICAL) self.vp = vp #self.ds = vp.ds if 'ds' in dir(vp.do): self.dsa = self.vp.do.ds self.vp.do.Optimise() else: self.dsa = self.vp.dsa #[:,:,0].ravel() self.vp.do.Optimise(self.vp.ds) print((self.dsa.size)) #self.do = vp.do self.scale = 2 #self.vp.do.Optimise(self.vp.ds) hsizer = wx.BoxSizer(wx.HORIZONTAL) self.hlDispMapping = histLimits.HistLimitPanel( self, -1, self.dsa, self.vp.do.getDisp1Off(), self.vp.do.getDisp1Off() + 255. / self.vp.do.getDisp1Gain(), True, size=(100, 80)) self.hlDispMapping.Bind(histLimits.EVT_LIMIT_CHANGE, self.OnMappingChange) hsizer.Add(self.hlDispMapping, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) vsizer2 = wx.BoxSizer(wx.VERTICAL) self.bOptimise = wx.Button(self, -1, 'Optimise', style=wx.BU_EXACTFIT) self.bOptimise.Bind(wx.EVT_BUTTON, self.OnBOptimise) vsizer2.Add(self.bOptimise, 0, wx.ALIGN_CENTER_HORIZONTAL, 5) self.cbAutoOptimise = wx.CheckBox(self, -1, 'Auto') self.cbAutoOptimise.SetValue(True) #self.cbAutoOptimise.Bind(wx.EVT_CHECKBOX, self.OnCbAutoOpt) vsizer2.Add(self.cbAutoOptimise, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, 3) vsizer2.Add((0, 0), 1, 0, 0) #hsizer.Add(vsizer2, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) #vsizer.Add(hsizer, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5) #hsizer = wx.BoxSizer(wx.HORIZONTAL) #scaleSizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Scale"), wx.HORIZONTAL) self.cbScale = wx.ComboBox(self, -1, choices=["1:4", "1:2", "1:1", "2:1", "4:1"], style=wx.CB_DROPDOWN | wx.CB_READONLY, size=(55, -1)) self.cbScale.Bind(wx.EVT_COMBOBOX, self.OnScaleChanged) self.cbScale.SetSelection(self.scale) #scaleSizer.Add(self.cbScale, 0, wx.ALL, 5) #hsizer.Add(wx.StaticText(self, -1, 'Scale: '), 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) vsizer2.Add(self.cbScale, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND, 5) hsizer.Add(vsizer2, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) #vsizer.Add(hsizer, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5) self.SetSizer(hsizer) hsizer.Fit(self)
def __init__(self, parent, displayOpts, horizOrientation=False, thresholdControls=True, **kwargs): kwargs['style'] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, parent, **kwargs) #self.parent = parent self.do = displayOpts vsizer = wx.BoxSizer(wx.VERTICAL) self.hIds = [] self.cIds = [] self.cbIds = [] self.hcs = [] self.shIds = [] cmapnames = pylab.cm.cmapnames + [ 'fastGrey', 'labeled' ] # + [n + '_r' for n in pylab.cm.cmapnames] cmapnames.sort() ##do = parent.do dispSize = (120, 80) if horizOrientation: hsizer = wx.BoxSizer(wx.HORIZONTAL) dispSize = (100, 80) for i in range(len(self.do.Chans)): ssizer = wx.StaticBoxSizer( wx.StaticBox(self, -1, self.do.names[i]), wx.VERTICAL) id = wx.NewId() self.hIds.append(id) c = self.do.ds[:, :, self.do.zp, self.do.Chans[i]].real.ravel() if np.iscomplexobj(c): if self.do.complexMode == 'real': c = c.real elif self.do.complexMode == 'imag': c = c.imag elif self.do.complexMode == 'angle': c = np.angle(c) else: c = np.abs(c) hClim = histLimits.HistLimitPanel(self, id, c[::max(1, len(c) / 1e4)], self.do.Offs[i], self.do.Offs[i] + 1. / self.do.Gains[i], size=dispSize, log=True) hClim.Bind(histLimits.EVT_LIMIT_CHANGE, self.OnCLimChanged) self.hcs.append(hClim) ssizer.Add(hClim, 0, wx.ALL, 2) hsizer2 = wx.BoxSizer(wx.HORIZONTAL) id = wx.NewId() self.cIds.append(id) cCmap = wx.Choice(self, id, choices=cmapnames, size=(80, -1)) cCmap.SetSelection(cmapnames.index(self.do.cmaps[i].name)) cCmap.Bind(wx.EVT_CHOICE, self.OnCMapChanged) hsizer2.Add(cCmap, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) id = wx.NewId() self.shIds.append(id) cbShow = wx.CheckBox(self, id) cbShow.SetValue(self.do.show[i]) cbShow.Bind(wx.EVT_CHECKBOX, self.OnShowChanged) hsizer2.Add(cbShow, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) ssizer.Add(hsizer2, 0, wx.ALL | wx.EXPAND, 0) if horizOrientation: hsizer.Add(ssizer, 0, wx.ALL, 2) else: vsizer.Add(ssizer, 0, wx.ALL, 5) self.bOptimise = wx.Button(self, -1, "Stretch", style=wx.BU_EXACTFIT) self.cbScale = wx.Choice(self, -1, choices=[ "1:16", "1:8", "1:4", "1:2", "1:1", "2:1", "4:1", "8:1", "16:1" ]) self.cbScale.SetSelection(4) self.scale_11 = 4 if horizOrientation: vsizer.Add(hsizer, 0, wx.ALL, 0) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(self.bOptimise, 0, wx.ALL | wx.ALIGN_CENTER, 5) hsizer.Add(self.cbScale, 0, wx.ALL | wx.ALIGN_CENTER, 5) vsizer.Add(hsizer, 0, wx.ALL | wx.ALIGN_CENTER, 0) else: vsizer.Add( self.bOptimise, 0, wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER | wx.EXPAND, 5) hsizer = wx.BoxSizer(wx.HORIZONTAL) #ssizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Slice'), wx.VERTICAL) self.cbSlice = wx.Choice(self, -1, choices=["X-Y", "X-Z", "Y-Z"]) self.cbSlice.SetSelection(0) hsizer.Add(self.cbSlice, 1, wx.ALL | wx.EXPAND, 5) #vsizer.Add(ssizer, 0, wx.ALL|wx.EXPAND, 5) #ssizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Scale'), wx.VERTICAL) hsizer.Add(self.cbScale, 1, wx.ALL | wx.EXPAND, 5) vsizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 0) self.cbSlice.Bind(wx.EVT_CHOICE, self.OnSliceChanged) #self.cbSlice.Bind(wx.EVT_CHOICE, self.OnSliceChanged) self.cbScale.Bind(wx.EVT_CHOICE, self.OnScaleChanged) self.bOptimise.Bind(wx.EVT_BUTTON, self.OnOptimise) if self.do.ds.shape[2] > 1: hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(wx.StaticText(self, -1, 'Projection:'), 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 0) self.czProject = wx.Choice( self, -1, choices=['None', 'Standard', 'Colour Coded']) self.czProject.SetSelection(0) self.czProject.Bind(wx.EVT_CHOICE, self.OnZProjChanged) hsizer.Add(self.czProject, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) vsizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 0) if np.iscomplexobj(self.do.ds[0, 0, 0, 0]): hsizer = wx.BoxSizer(wx.HORIZONTAL) #hsizer.Add(wx.StaticText(self, -1, 'Projection:'), 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 0) self.cComplex = wx.Choice( self, -1, choices=['colored', 'real', 'imag', 'angle', 'abs']) self.cComplex.SetSelection(0) self.cComplex.Bind(wx.EVT_CHOICE, self.OnComplexChanged) hsizer.Add(self.cComplex, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) vsizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 0) if thresholdControls: ssizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Segmentation'), wx.VERTICAL) self.cbShowThreshold = wx.CheckBox(self, -1, 'Threshold mode') self.cbShowThreshold.Bind(wx.EVT_CHECKBOX, self.OnShowThreshold) ssizer.Add(self.cbShowThreshold, 0, wx.ALL, 5) self.bIsodataThresh = wx.Button(self, -1, 'Isodata') self.bIsodataThresh.Bind(wx.EVT_BUTTON, self.OnIsodataThresh) self.bIsodataThresh.Enable(False) ssizer.Add(self.bIsodataThresh, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) hsizer = wx.BoxSizer(wx.HORIZONTAL) self.tPercThresh = wx.TextCtrl(self, -1, '.80', size=[30, -1]) self.tPercThresh.Enable(False) hsizer.Add(self.tPercThresh, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 1) self.bPercThresh = wx.Button(self, -1, 'Signal Fraction') self.bPercThresh.Bind(wx.EVT_BUTTON, self.OnSignalFracThresh) self.bPercThresh.Enable(False) hsizer.Add(self.bPercThresh, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 1) ssizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 5) vsizer.Add(ssizer, 0, wx.ALL | wx.EXPAND, 5) self.SetSizer(vsizer) self.do.WantChangeNotification.append(self.OnDoChange)