Exemple #1
0
    def init ( self, parent ):
        """
        Finishes initializing the editor by creating the underlying widget.
        """
        from PYME.ui import histLimits
        
        l_lower, l_upper = self.value

        self.control = histLimits.HistLimitPanel(parent, -1, data=self.factory.data(), limit_lower=l_lower, limit_upper=l_upper)
                                   
        self.control.Bind(histLimits.EVT_LIMIT_CHANGE, self.limits_changed)
        
        if not self.factory.update_signal is None:
            self.factory.update_signal.connect(self.n_update)
        
        return
    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 = list(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, int(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 | wx.EXPAND, 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 | wx.EXPAND, 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)

            hsizer = wx.BoxSizer(wx.HORIZONTAL)
            self.bIsodataThresh = wx.Button(self, -1, 'Isodata')
            self.bIsodataThresh.Bind(wx.EVT_BUTTON, self.OnIsodataThresh)
            self.bIsodataThresh.Enable(False)
            hsizer.Add(self.bIsodataThresh, 0,
                       wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2)

            self.bLIsodataThresh = wx.Button(self, -1, 'Isodata (logbins)')
            self.bLIsodataThresh.Bind(
                wx.EVT_BUTTON,
                lambda e: self.OnIsodataThresh(e, bin_spacing='log'))
            self.bLIsodataThresh.Enable(False)
            hsizer.Add(self.bLIsodataThresh, 0,
                       wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2)

            ssizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 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)
    def __init__(self, parent, mode='current', defaultPixelSize=5.0, jitterVariables = [], jitterVarDefault=0,
                 mcProbDefault = 1.0, colours = [], zvals=None, jitterVarDefaultZ=0, geometric_mean=False):
        wx.Dialog.__init__(self, parent, title='Generate Image ...')

        pixelSzs = ['%3.2f' % (defaultPixelSize*2**n) for n in range(6)]

        jitterPhrase = 'Jitter [nm]:'
        if mode in ['gaussian', '3Dgaussian']:
            jitterPhrase = 'Std. Dev. [nm]:'
        
        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        
        #we always want a pixel size
        sizer2.Add(wx.StaticText(self, -1, 'Pixel Size [nm]:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        
        self.cbPixelSize = wx.ComboBox(self, -1, value='%3.2f' % defaultPixelSize, choices=pixelSzs, style=wx.CB_DROPDOWN, size=(150, -1))


        sizer2.Add(self.cbPixelSize, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        sizer1.Add(sizer2, 0, wx.ALL, 5)
        
        if not zvals is None:
            nZlevels = len(set(zvals))
        else:
            nZlevels = 0

        #jitter parameter for gaussian and triangles
        if mode in ['gaussian', 'triangles', 'trianglesw', '3Dgaussian', '3Dtriangles']:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, jitterPhrase), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.tJitterScale = wx.TextCtrl(self, -1, '1.0', size=(60, -1))
            sizer2.Add(self.tJitterScale, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            sizer2.Add(wx.StaticText(self, -1, 'x'), 0, wx.ALIGN_CENTER_VERTICAL | wx.TOP|wx.BOTTOM, 5)
    
            self.cJitterVariable = wx.Choice(self, -1, choices=jitterVariables, size=(150, -1))
            self.cJitterVariable.SetSelection(jitterVarDefault)
            sizer2.Add(self.cJitterVariable, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        
            sizer1.Add(sizer2, 0, wx.ALL, 5)

        #jitter parameter for gaussian in z
        if mode in  ['3Dgaussian', '3Dtriangles']:
            zJitSc = 1.0
            if nZlevels < 100: #stack rather than 3D fit
                zJitSc = 200.
                jitterVarDefaultZ = 0
                
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, 'Z Std. Dev. [nm]:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.tJitterScaleZ = wx.TextCtrl(self, -1, '%3.2f'% zJitSc, size=(60, -1))
            sizer2.Add(self.tJitterScaleZ, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            sizer2.Add(wx.StaticText(self, -1, 'x'), 0, wx.ALIGN_CENTER_VERTICAL | wx.TOP|wx.BOTTOM, 5)

            self.cJitterVariableZ = wx.Choice(self, -1, choices=jitterVariables, size=(150, -1))
            self.cJitterVariableZ.SetSelection(jitterVarDefaultZ)
            sizer2.Add(self.cJitterVariableZ, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

        #MC subsampling parameter for triangles
        if mode in ['triangles', 'trianglesw', '3Dtriangles']:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, 'MC subsampling probability:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.tMCProb = wx.TextCtrl(self, -1, '%3.2f' % mcProbDefault, size=(60, -1))
            sizer2.Add(self.tMCProb, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
            sizer1.Add(sizer2, 0, wx.ALL, 5)

            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, '# Samples to average:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.tNumSamps = wx.TextCtrl(self, -1, '10', size=(60, -1))
            sizer2.Add(self.tNumSamps, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        
            sizer1.Add(sizer2, 0, wx.ALL, 5)

            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            self.cbTriangGeometric = wx.CheckBox(self, -1, 'Geometric mean')
            self.cbTriangGeometric.SetValue(geometric_mean)
            sizer2.Add(self.cbTriangGeometric, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            sizer1.Add(sizer2, 0, wx.ALL, 5)
            
        if mode in ['densityfit']:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, '# Samples:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
    
            self.tNumSamps = wx.TextCtrl(self, -1, '25', size=(60, -1))
            sizer2.Add(self.tNumSamps, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
    
            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
            
            
        if mode in ['quadtree']:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, 'max leaf size:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
    
            self.tMaxLeafSize = wx.TextCtrl(self, -1, '10', size=(60, -1))
            sizer2.Add(self.tMaxLeafSize, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
    
            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            
            #sizer2.Add(wx.StaticText(self, -1, 'Use software rendereing:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

        if False: #mode in ['triangles', 'trianglesw']:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            self.cbTriangSoftRender = wx.CheckBox(self, -1, 'Use software rendering')
            self.cbTriangSoftRender.SetValue(True)
            sizer2.Add(self.cbTriangSoftRender, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

        if mode in ['3Dhistogram', '3Dgaussian', '3Dtriangles']:
            zThick = 50
            if nZlevels < 100: #stack rather than 3D fit
                zThick = 200
                
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, 'Z slice thickness [nm]:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.tZThickness = wx.TextCtrl(self, -1, '%d' % zThick, size=(60, -1))
            sizer2.Add(self.tZThickness, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

            sizer2 = wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Z range:'), wx.VERTICAL)

            self.hZRange = histLimits.HistLimitPanel(self, -1, zvals[::int(max(len(zvals)/1e4, 1))], zvals.min() - 50, zvals.max() + 50, size=(150, 80))
            self.hZRange.binSize = float(self.tZThickness.GetValue())

            self.tZThickness.Bind(wx.EVT_TEXT, self.OnZBinChange)

            sizer2.Add(self.hZRange, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL|wx.EXPAND, 5)

            sizer1.Add(sizer2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

        #multiple colour channels
        if len(colours) > 0:
            sizer2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer2.Add(wx.StaticText(self, -1, 'Colour[s]:'), 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)

            self.colours = ['Everything'] + colours

            self.lColour = wx.ListBox(self, -1, choices=self.colours, size=(150, -1), style=wx.LB_MULTIPLE)

            for n in range(1, len(self.colours)):
                self.lColour.SetSelection(n)

            sizer2.Add(self.lColour, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
            sizer1.Add(sizer2, 0, wx.ALL|wx.EXPAND, 5)

        
        btSizer = wx.StdDialogButtonSizer()

        btn = wx.Button(self, wx.ID_OK)
        btn.SetDefault()

        btSizer.AddButton(btn)

        btn = wx.Button(self, wx.ID_CANCEL)

        btSizer.AddButton(btn)

        btSizer.Realize()

        sizer1.Add(btSizer, 0, wx.ALIGN_RIGHT|wx.ALL, 5)

        self.SetSizer(sizer1)
        sizer1.Fit(self)
    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, panel, glCanvas, visFr):
        afp.foldingPane.__init__(self,
                                 panel,
                                 -1,
                                 caption="Display",
                                 pinned=True)

        self.glCanvas = glCanvas
        self.visFr = visFr

        self.scaleBarLengths = OrderedDict([('<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 = 'gist_rainbow'

        #cmapReversed = False

        if curCMapName[-2:] == '_r':
            #cmapReversed = True
            curCMapName = curCMapName[:-2]

        cmInd = cmapnames.index(curCMapName)

        ##

        #box = wx.StaticBox(pan, -1, 'Colourmap:')
        #bsizer = wx.StaticBoxSizer(box)
        #hsizer = wx.BoxSizer(wx.HORIZONTAL)

        #self.AddNewElement(self.r3DMode)

        pan = wx.Panel(self, -1)

        vsizer = wx.BoxSizer(wx.VERTICAL)

        # hsizer = wx.BoxSizer(wx.HORIZONTAL)
        # self.r3DMode = wx.RadioBox(pan, choices=['2D','3D'])
        # self.r3DMode.Bind(wx.EVT_RADIOBOX, self.OnChange3D)
        # hsizer.Add(self.r3DMode, 1, wx.ALL, 2)
        #
        # vsizer.Add(hsizer, 0, wx.ALL|wx.EXPAND, 0)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(pan, wx.ID_ANY, 'LUT:'), 0, wx.ALL, 2)

        self.cColourmap = wx.Choice(pan, -1, choices=cmapnames)
        self.cColourmap.SetSelection(cmInd)

        hsizer.Add(self.cColourmap, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2)

        #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)

        # cbLUTDraw = wx.CheckBox(pan, -1, 'Show')
        # cbLUTDraw.SetValue(self.glCanvas.LUTDraw)
        #
        # cbLUTDraw.Bind(wx.EVT_CHECKBOX, self.OnLUTDrawCB)
        #
        # hsizer.Add(cbLUTDraw, 0,wx.ALL|wx.ALIGN_CENTER_VERTICAL, 2)

        vsizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 0)

        pan.SetSizerAndFit(vsizer)

        #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, 'Display range:')
        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, 1)

        self.tCLimMin = wx.TextCtrl(pan,
                                    -1,
                                    '%3.2f' % self.glCanvas.clim[0],
                                    size=(40, -1))
        hsizer.Add(self.tCLimMin, 1,
                   wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 1)

        hsizer.Add(wx.StaticText(pan, -1, '  Max: '), 0,
                   wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 1)

        self.tCLimMax = wx.TextCtrl(pan,
                                    -1,
                                    '%3.2f' % self.glCanvas.clim[1],
                                    size=(40, -1))
        hsizer.Add(self.tCLimMax, 1,
                   wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 1)

        bsizer.Add(hsizer, 0, wx.ALL | wx.EXPAND, 0)

        self.hlCLim = histLimits.HistLimitPanel(pan,
                                                -1,
                                                np.array(self.glCanvas.c),
                                                self.glCanvas.clim[0],
                                                self.glCanvas.clim[1],
                                                size=(150, 100))
        bsizer.Add(self.hlCLim, 0, wx.ALL | wx.EXPAND, 1)

        #        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)
Exemple #6
0
    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)