def deserialize(name, value): """ Returns the value of a given key """ if "ColorTransferFunction" in name: data = eval(value) colorTransferFunction = vtk.vtkColorTransferFunction() lib.ImageOperations.loadLUTFromString(data, colorTransferFunction) return colorTransferFunction # Annotations is a list of classes that can easily be # pickled / unpickled if "Annotations" in name: Logging.info("deserializing Annotations", kw="dataunit") #val = zlib.decompress(value) val = pickle.loads(value) Logging.info("unpickled %d annotations" % len(val), kw="dataunit") return val if name not in [ "IntensityTransferFunction", "IntensityTransferFunctions", "AlphaTransferFunction" ]: return eval(value) transferFunction = vtkbxd.vtkIntensityTransferFunction() lst = eval(value) lib.ImageOperations.setFromParameterList(transferFunction, lst) return transferFunction
def initialize(self, dataunit, channels, timepoints): """ Set initial values for settings based on number of channels and timepoints """ DataUnitSettings.initialize(self, dataunit, channels, timepoints) for i in range(channels): tf = vtkbxd.vtkIntensityTransferFunction() self.setCounted("IntensityTransferFunction", i, tf, 0) self.set("PreviewChannel", 1)
def __init__(self, parent, tb): """ Initialization Parameters: parent Is the parent widget of this window """ self.alphaTF = vtkbxd.vtkIntensityTransferFunction() self.operationName = "Merge" self.createItemSelection = 1 TaskPanel.TaskPanel.__init__(self, parent, tb) self.oldBg = self.GetBackgroundColour() self.mainsizer.Layout() self.mainsizer.Fit(self)
def setCombinedDataUnit(self, dataUnit): """ Sets the combined dataunit that is to be processed. It is then used to get the names of all the source data units and they are added to the menu. """ TaskPanel.TaskPanel.setCombinedDataUnit(self, dataUnit) # We add entry "Alpha Channel" to the list of channels to allow # the user to edit the alpha channel for the 24-bit color merging #self.dataUnit.setOpacityTransfer(self.alphaTF) self.settings.set("AlphaTransferFunction", self.alphaTF) ctf = self.settings.get("ColorTransferFunction") sources = dataUnit.getSourceDataUnits() totmax = 0 for i in sources: minval, maxval = i.getScalarRange() ctf = i.getColorTransferFunction() ctfmin, ctfmax = ctf.GetRange() bitmax = 0 sBitDepth = i.getSingleComponentBitDepth() if sBitDepth == 8 or sBitDepth == 12: bitmax = (2**i.getSingleComponentBitDepth() - 1) maxval = max(ctfmax, maxval, bitmax) if maxval > totmax: totmax = maxval self.alphaTF.SetRangeMax(int(totmax)) for i in range(len(sources)): tf = vtkbxd.vtkIntensityTransferFunction() tf.SetRangeMax(int(totmax)) #self.settings.setCounted("IntensityTransferFunction",i,tf,0) sources[i].getSettings().set("IntensityTransferFunction", tf) tf = sources[0].getSettings().get("IntensityTransferFunction") #print "\n\nSETTING ITF EDITOR FUNCTION" self.intensityTransferEditor.setIntensityTransferFunction(tf) for i in range(len(sources)): self.dataUnit.setOutputChannel(i, 1) if self.colorBtn: #Logging.info("Setting ctf of colorbutton to ",ctf,kw="ctf") self.colorBtn.setColorTransferFunction(ctf) else: Logging.info("No color button to set ctf to ", kw="ctf") self.restoreFromCache()
def setCombinedDataUnit(self, dataUnit): """ Sets the combined dataunit that is to be processed. It is then used to get the names of all the source data units and they are added to the menu. """ TaskPanel.TaskPanel.setCombinedDataUnit(self, dataUnit) # We add entry "Alpha Channel" to the list of channels to allow # the user to edit the alpha channel for the 24-bit color merging #self.dataUnit.setOpacityTransfer(self.alphaTF) self.settings.set("AlphaTransferFunction", self.alphaTF) ctf = self.settings.get("ColorTransferFunction") sources = dataUnit.getSourceDataUnits() totmax = 0 for i in sources: minval, maxval = i.getScalarRange() ctf = i.getColorTransferFunction() ctfmin, ctfmax = ctf.GetRange() bitmax = 0 sBitDepth = i.getSingleComponentBitDepth() if sBitDepth == 8 or sBitDepth == 12: bitmax = (2**i.getSingleComponentBitDepth()-1) maxval = max(ctfmax, maxval, bitmax) if maxval > totmax: totmax = maxval self.alphaTF.SetRangeMax(int(totmax)) for i in range(len(sources)): tf = vtkbxd.vtkIntensityTransferFunction() tf.SetRangeMax(int(totmax)) #self.settings.setCounted("IntensityTransferFunction",i,tf,0) sources[i].getSettings().set("IntensityTransferFunction", tf) tf = sources[0].getSettings().get("IntensityTransferFunction") #print "\n\nSETTING ITF EDITOR FUNCTION" self.intensityTransferEditor.setIntensityTransferFunction(tf) for i in range(len(sources)): self.dataUnit.setOutputChannel(i, 1) if self.colorBtn: #Logging.info("Setting ctf of colorbutton to ",ctf,kw="ctf") self.colorBtn.setColorTransferFunction(ctf) else: Logging.info("No color button to set ctf to ", kw = "ctf") self.restoreFromCache()
def __init__(self, n = -1): """ Constructor """ DataUnitSettings.__init__(self, n) #self.registerCounted("MergingColorTransferFunction",1) self.set("Type", "Merging") self.registerCounted("IntensityTransferFunction", 1) self.register("AlphaTransferFunction", 1) self.register("AlphaMode") self.registerCounted("PreviewChannel") tf = vtkbxd.vtkIntensityTransferFunction() self.set("AlphaTransferFunction", tf) self.set("AlphaMode", [0, 0])
def __init__(self, n=-1): """ Constructor """ DataUnitSettings.__init__(self, n) #self.registerCounted("MergingColorTransferFunction",1) self.set("Type", "Merging") self.registerCounted("IntensityTransferFunction", 1) self.register("AlphaTransferFunction", 1) self.register("AlphaMode") self.registerCounted("PreviewChannel") tf = vtkbxd.vtkIntensityTransferFunction() self.set("AlphaTransferFunction", tf) self.set("AlphaMode", [0, 0])
def resetTransferFunctions(self, event=None): """ A method to reset all the intensity transfer functions """ dataunits = self.dataUnit.getSourceDataUnits() for unit in dataunits: setting = unit.getSettings() minval, maxval = unit.getScalarRange() ctf = unit.getColorTransferFunction() ctfmin, ctfmax = ctf.GetRange() print "CTF range=", ctfmax bitmax = (2**unit.getSingleComponentBitDepth() - 1) print "bitmax=", bitmax maxval = max(ctfmax, maxval, bitmax) itf = vtkbxd.vtkIntensityTransferFunction() itf.SetRangeMax(maxval) self.alphaTF.SetRangeMax(maxval) setting.set("IntensityTransferFunction", itf)
def resetTransferFunctions(self, event = None): """ A method to reset all the intensity transfer functions """ dataunits = self.dataUnit.getSourceDataUnits() for unit in dataunits: setting = unit.getSettings() minval, maxval = unit.getScalarRange() ctf = unit.getColorTransferFunction() ctfmin, ctfmax = ctf.GetRange() print "CTF range=",ctfmax bitmax = (2**unit.getSingleComponentBitDepth()-1) print "bitmax=",bitmax maxval = max(ctfmax, maxval,bitmax) itf = vtkbxd.vtkIntensityTransferFunction() itf.SetRangeMax(maxval) self.alphaTF.SetRangeMax(maxval) setting.set("IntensityTransferFunction", itf)
def resetTransferFunctions(self, event=None): """ A method to reset all the intensity transfer functions """ l = self.dataUnit.getNumberOfTimepoints() sources = self.dataUnit.getSourceDataUnits() for i in range(l): minval = min([a.getScalarRange()[0] for a in sources]) maxval = max([a.getScalarRange()[1] for a in sources]) bitdepth = sources[0].getBitDepth() minval = min(0, minval) maxval = max(2 ** bitdepth - 1, maxval) itf = vtkbxd.vtkIntensityTransferFunction() itf.SetRangeMax(maxval) self.settings.setCounted("IntensityTransferFunctions", i, itf) itf = self.settings.getCounted("IntensityTransferFunctions", self.timePoint) self.iTFEditor.setIntensityTransferFunction(itf)
def resetTransferFunctions(self, event=None): """ A method to reset all the intensity transfer functions """ l = self.dataUnit.getNumberOfTimepoints() sources = self.dataUnit.getSourceDataUnits() for i in range(l): minval = min([a.getScalarRange()[0] for a in sources]) maxval = max([a.getScalarRange()[1] for a in sources]) bitdepth = sources[0].getBitDepth() minval = min(0, minval) maxval = max(2**bitdepth - 1, maxval) itf = vtkbxd.vtkIntensityTransferFunction() itf.SetRangeMax(maxval) self.settings.setCounted("IntensityTransferFunctions", i, itf) itf = self.settings.getCounted("IntensityTransferFunctions", self.timePoint) self.iTFEditor.setIntensityTransferFunction(itf)
def initialize(self, dataunit, channels, timepoints): """ Set initial values for settings based on number of channels and timepoints """ DataUnitSettings.initialize(self, dataunit, channels, timepoints) ctf = self.get("ColorTransferFunction") if hasattr(dataunit, "getScalarRange"): minval, maxval = dataunit.getScalarRange() bitdepth = dataunit.getBitDepth() else: minval, maxval = dataunit.getSourceDataUnits()[0].getScalarRange() bitdepth = dataunit.getSourceDataUnits()[0].getBitDepth() minval = min(0,minval) maxval = max(2**bitdepth-1, maxval) for i in range(timepoints): tf = vtkbxd.vtkIntensityTransferFunction() tf.SetRangeMax(maxval) self.setCounted("IntensityTransferFunctions", i, tf, 0)
def initialize(self, dataunit, channels, timepoints): """ Set initial values for settings based on number of channels and timepoints """ DataUnitSettings.initialize(self, dataunit, channels, timepoints) ctf = self.get("ColorTransferFunction") if hasattr(dataunit, "getScalarRange"): minval, maxval = dataunit.getScalarRange() bitdepth = dataunit.getBitDepth() else: minval, maxval = dataunit.getSourceDataUnits()[0].getScalarRange() bitdepth = dataunit.getSourceDataUnits()[0].getBitDepth() minval = min(0, minval) maxval = max(2**bitdepth - 1, maxval) for i in range(timepoints): tf = vtkbxd.vtkIntensityTransferFunction() tf.SetRangeMax(maxval) self.setCounted("IntensityTransferFunctions", i, tf, 0)
def deserialize(name, value): """ Returns the value of a given key """ if "ColorTransferFunction" in name: data = eval(value) colorTransferFunction = vtk.vtkColorTransferFunction() lib.ImageOperations.loadLUTFromString(data, colorTransferFunction) return colorTransferFunction # Annotations is a list of classes that can easily be # pickled / unpickled if "Annotations" in name: Logging.info("deserializing Annotations", kw = "dataunit") #val = zlib.decompress(value) val = pickle.loads(value) Logging.info("unpickled %d annotations" % len(val), kw = "dataunit") return val if name not in ["IntensityTransferFunction", "IntensityTransferFunctions", "AlphaTransferFunction"]: return eval(value) transferFunction = vtkbxd.vtkIntensityTransferFunction() lst = eval(value) lib.ImageOperations.setFromParameterList(transferFunction, lst) return transferFunction
def __init__(self, parent, **kws): """ Initialization """ self.parent = parent wx.Panel.__init__(self, parent, -1) self.doyield = 1 self.calling = 0 self.guiupdate = 0 self.iTF = vtkbxd.vtkIntensityTransferFunction() self.mainsizer = wx.BoxSizer(wx.VERTICAL) self.canvasBox = wx.BoxSizer(wx.HORIZONTAL) self.contrastBox = wx.BoxSizer(wx.VERTICAL) self.gammaBox = wx.BoxSizer(wx.HORIZONTAL) self.brightnessBox = wx.BoxSizer(wx.HORIZONTAL) self.contrastSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(-1, 280), style=wx.SL_VERTICAL) self.contrastSlider.setSnapPoint(1.0, 0.1) self.contrastSlider.setRange(0, 50, 0.0001, 1.0) self.contrastSlider.setRange(50.01, 100, 1.0, 20.0) self.contrastSlider.setScaledValue(1.0) self.contrastLbl = wx.StaticText(self, -1, "Contrast") self.Bind(wx.EVT_COMMAND_SCROLL, self.setContrast, self.contrastSlider) self.canvas = PaintPanel(self) self.canvasBox.Add(self.canvas, 1, wx.ALL | wx.EXPAND, 10) self.canvasBox.Add(self.contrastBox) self.contrastEdit = wx.TextCtrl(self, -1, "1.00", size=(50, -1)) self.contrastBox.Add(self.contrastLbl) self.contrastBox.Add(self.contrastEdit) self.contrastBox.Add(self.contrastSlider, 1, wx.TOP | wx.BOTTOM, 0) self.brightnessEdit = wx.TextCtrl(self, -1, "0.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.gammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.gammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.brightnessSlider = RangedSlider.RangedSlider( self, -1, 5000, size=(260, -1), style=wx.SL_HORIZONTAL) self.brightnessSlider.setRange(0, 100, -255, 255) self.brightnessSlider.setSnapPoint(0.0, 0.1) self.brightnessSlider.setScaledValue(0.1) self.Bind(wx.EVT_COMMAND_SCROLL, self.setBrightness, self.brightnessSlider) self.gammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(260, -1), style=wx.SL_HORIZONTAL) self.gammaSlider.setRange(0, 50, 0.0001, 1.0) self.gammaSlider.setRange(50.01, 100, 1.0, 15.0) self.gammaSlider.setScaledValue(1.0) self.gammaSlider.setSnapPoint(1.0, 0.1) self.Bind(wx.EVT_COMMAND_SCROLL, self.setGamma, self.gammaSlider) self.gammaBox.Add(self.gammaSlider) self.gammaBox.Add(self.gammaEdit, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL) self.brightnessBox.Add(self.brightnessSlider) self.brightnessBox.Add(self.brightnessEdit, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL) self.minValueLbl = wx.StaticText(self, wx.NewId(), "Min value:") self.minValueLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxValueLbl = wx.StaticText(self, wx.NewId(), "Max value:") self.maxValueLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.minValue = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.minValue.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxValue = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.maxValue.SetForegroundColour(scripting.COLOR_EXPERIENCED) fieldsizer = wx.GridBagSizer(0, 5) valuesizer = wx.BoxSizer(wx.HORIZONTAL) fieldsizer.Add(self.minValueLbl, (0, 0)) fieldsizer.Add(self.minValue, (0, 1)) fieldsizer.Add(self.maxValueLbl, (0, 2)) fieldsizer.Add(self.maxValue, (0, 3)) self.minthresholdLbl = wx.StaticText(self, wx.NewId(), "Min threshold:") self.minthresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxthresholdLbl = wx.StaticText(self, wx.NewId(), "Max threshold:") self.maxthresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.minthreshold = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.minthreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxthreshold = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.maxthreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) fieldsizer.Add(self.minthresholdLbl, (1, 0)) fieldsizer.Add(self.minthreshold, (1, 1)) fieldsizer.Add(self.maxthresholdLbl, (1, 2)) fieldsizer.Add(self.maxthreshold, (1, 3)) #self.minProcessLbl=wx.StaticText(self,-1,"Processing\nthreshold:") #TODO: is following line important? at the moment minProcess is used later in code. 19.7.2007 SS #self.minProcess=wx.TextCtrl(self,-1,style=wx.TE_PROCESS_ENTER) #fieldsizer.Add(self.minProcessLbl,(2,0)) #fieldsizer.Add(self.minProcess,(2,1)) self.ssThresholdLbl = wx.StaticText(self, -1, "Smooth start:") self.ssThresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssThreshold = wx.TextCtrl(self, -1, "0", style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.ssThreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssgammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.ssgammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssgammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(150, -1), style=wx.SL_HORIZONTAL) self.ssgammaSlider.setRange(0, 50, 0.0001, 1.0) self.ssgammaSlider.setRange(50.01, 100, 1.0, 15.0) self.ssgammaSlider.setScaledValue(1.0) self.ssgammaSlider.setSnapPoint(1.0, 0.1) self.ssgammaSlider.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.Bind(wx.EVT_COMMAND_SCROLL, self.setSSGamma, self.ssgammaSlider) fieldsizer.Add(self.ssThresholdLbl, (2, 0)) fieldsizer.Add(self.ssThreshold, (2, 1)) fieldsizer.Add(self.ssgammaSlider, (2, 2)) fieldsizer.Add(self.ssgammaEdit, (2, 3)) self.seThresholdLbl = wx.StaticText(self, -1, "Smooth end:") self.seThresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.seThreshold = wx.TextCtrl(self, -1, "255", style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.seThreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.segammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.segammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.segammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(150, -1), style=wx.SL_HORIZONTAL) self.segammaSlider.setRange(0, 50, 0.0001, 1.0) self.segammaSlider.setRange(50.01, 100, 1.0, 15.0) self.segammaSlider.setScaledValue(1.0) self.segammaSlider.setSnapPoint(1.0, 0.1) self.segammaSlider.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.Bind(wx.EVT_COMMAND_SCROLL, self.setSEGamma, self.segammaSlider) self.seThreshold.Bind(wx.EVT_KILL_FOCUS, self.updateSE) self.seThreshold.Bind(wx.EVT_TEXT_ENTER, self.updateSE) self.ssThreshold.Bind(wx.EVT_KILL_FOCUS, self.updateSS) self.ssThreshold.Bind(wx.EVT_TEXT_ENTER, self.updateSS) fieldsizer.Add(self.seThresholdLbl, (3, 0)) fieldsizer.Add(self.seThreshold, (3, 1)) fieldsizer.Add(self.segammaSlider, (3, 2)) fieldsizer.Add(self.segammaEdit, (3, 3)) self.gammaEdit.Bind(wx.EVT_KILL_FOCUS, self.updateGamma) self.gammaEdit.Bind(wx.EVT_TEXT_ENTER, self.updateGamma) self.contrastEdit.Bind(wx.EVT_KILL_FOCUS, self.updateContrast) self.contrastEdit.Bind(wx.EVT_TEXT_ENTER, self.updateContrast) self.brightnessEdit.Bind(wx.EVT_KILL_FOCUS, self.updateBrightness) self.brightnessEdit.Bind(wx.EVT_TEXT_ENTER, self.updateBrightness) self.minValue.Bind(wx.EVT_KILL_FOCUS, self.updateMinimumValue) self.minValue.Bind(wx.EVT_TEXT_ENTER, self.updateMinimumValue) self.maxValue.Bind(wx.EVT_KILL_FOCUS, self.updateMaximumValue) self.maxValue.Bind(wx.EVT_TEXT_ENTER, self.updateMaximumValue) self.minthreshold.Bind(wx.EVT_KILL_FOCUS, self.updateMinimumThreshold) self.minthreshold.Bind(wx.EVT_TEXT_ENTER, self.updateMinimumThreshold) self.maxthreshold.Bind(wx.EVT_KILL_FOCUS, self.updateMaximumThreshold) self.maxthreshold.Bind(wx.EVT_TEXT_ENTER, self.updateMaximumThreshold) self.setMinimumThreshold(0) self.setMaximumThreshold(255) self.setMinimumValue(0) self.setMaximumValue(255) self.mainsizer.Add(self.canvasBox) self.gammaLbl = wx.StaticText(self, -1, "Gamma") self.gammaLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.brightnessLbl = wx.StaticText(self, -1, "Brightness") self.mainsizer.Add(self.brightnessLbl) self.mainsizer.Add(self.brightnessBox) self.mainsizer.Add(self.gammaLbl) self.mainsizer.Add(self.gammaBox) self.mainsizer.Add(fieldsizer) # self.mainsizer.Add(self.defaultBtn) self.SetAutoLayout(True) self.SetSizer(self.mainsizer) self.mainsizer.SetSizeHints(self) self.updateGraph()
D = "/media/sda12/Data/sample2.lsm" t = time.time() def elapsed(): global t return "(%.2fs elapsed)" % (time.time() - t) r1 = vtkbxd.vtkLSMReader() r1.SetFileName(D) r1.SetUpdateChannel(0) d1 = r1.GetOutput() itf1 = vtkbxd.vtkIntensityTransferFunction() itf1.SetBrightness(50.0) ctf1 = vtkbxd.vtkColorTransferFunction() ctf1.AddRGBPoint(0, 0, 0, 0) ctf1.AddRGBPoint(255.0, 0, 1.0, 0) print "Feeding channels to merge ", elapsed() merge = vtkbxd.vtkImageColorMerge() #merge.SetNumberOfThreads(5) merge.AddInput(d1) merge.AddLookupTable(ctf1) merge.AddIntensityTransferFunction(itf1) itfmap = vtkbxd.vtkImageMapToIntensities() itfmap.SetInput(d1)
import vtkbxd import time D="/media/sda12/Data/sample2.lsm" t=time.time() def elapsed(): global t return "(%.2fs elapsed)"%(time.time()-t) r1=vtkbxd.vtkLSMReader() r1.SetFileName(D) r1.SetUpdateChannel(0) d1=r1.GetOutput() itf1=vtkbxd.vtkIntensityTransferFunction() itf1.SetBrightness(50.0) ctf1=vtkbxd.vtkColorTransferFunction() ctf1.AddRGBPoint(0,0,0,0) ctf1.AddRGBPoint(255.0,0,1.0,0) print "Feeding channels to merge ",elapsed() merge = vtkbxd.vtkImageColorMerge() #merge.SetNumberOfThreads(5) merge.AddInput(d1) merge.AddLookupTable(ctf1) merge.AddIntensityTransferFunction(itf1) itfmap = vtkbxd.vtkImageMapToIntensities()
def __init__(self, parent, **kws): """ Initialization """ self.parent = parent wx.Panel.__init__(self, parent, -1) self.doyield = 1 self.calling = 0 self.guiupdate = 0 self.iTF = vtkbxd.vtkIntensityTransferFunction() self.mainsizer = wx.BoxSizer(wx.VERTICAL) self.canvasBox = wx.BoxSizer(wx.HORIZONTAL) self.contrastBox = wx.BoxSizer(wx.VERTICAL) self.gammaBox = wx.BoxSizer(wx.HORIZONTAL) self.brightnessBox = wx.BoxSizer(wx.HORIZONTAL) self.contrastSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(-1, 280), style=wx.SL_VERTICAL) self.contrastSlider.setSnapPoint(1.0, 0.1) self.contrastSlider.setRange(0, 50, 0.0001, 1.0) self.contrastSlider.setRange(50.01, 100, 1.0, 20.0) self.contrastSlider.setScaledValue(1.0) self.contrastLbl = wx.StaticText(self, -1, "Contrast") self.Bind(wx.EVT_COMMAND_SCROLL, self.setContrast, self.contrastSlider) self.canvas = PaintPanel(self) self.canvasBox.Add(self.canvas, 1, wx.ALL | wx.EXPAND, 10) self.canvasBox.Add(self.contrastBox) self.contrastEdit = wx.TextCtrl(self, -1, "1.00", size=(50, -1)) self.contrastBox.Add(self.contrastLbl) self.contrastBox.Add(self.contrastEdit) self.contrastBox.Add(self.contrastSlider, 1, wx.TOP | wx.BOTTOM, 0) self.brightnessEdit = wx.TextCtrl(self, -1, "0.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.gammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.gammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.brightnessSlider = RangedSlider.RangedSlider(self, -1, 5000, size=(260, -1), style=wx.SL_HORIZONTAL) self.brightnessSlider.setRange(0, 100, -255, 255) self.brightnessSlider.setSnapPoint(0.0, 0.1) self.brightnessSlider.setScaledValue(0.1) self.Bind(wx.EVT_COMMAND_SCROLL, self.setBrightness, self.brightnessSlider) self.gammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(260, -1), style=wx.SL_HORIZONTAL) self.gammaSlider.setRange(0, 50, 0.0001, 1.0) self.gammaSlider.setRange(50.01, 100, 1.0, 15.0) self.gammaSlider.setScaledValue(1.0) self.gammaSlider.setSnapPoint(1.0, 0.1) self.Bind(wx.EVT_COMMAND_SCROLL, self.setGamma, self.gammaSlider) self.gammaBox.Add(self.gammaSlider) self.gammaBox.Add(self.gammaEdit, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL) self.brightnessBox.Add(self.brightnessSlider) self.brightnessBox.Add(self.brightnessEdit, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL) self.minValueLbl = wx.StaticText(self, wx.NewId(), "Min value:") self.minValueLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxValueLbl = wx.StaticText(self, wx.NewId(), "Max value:") self.maxValueLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.minValue = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.minValue.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxValue = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.maxValue.SetForegroundColour(scripting.COLOR_EXPERIENCED) fieldsizer = wx.GridBagSizer(0, 5) valuesizer = wx.BoxSizer(wx.HORIZONTAL) fieldsizer.Add(self.minValueLbl, (0, 0)) fieldsizer.Add(self.minValue, (0, 1)) fieldsizer.Add(self.maxValueLbl, (0, 2)) fieldsizer.Add(self.maxValue, (0, 3)) self.minthresholdLbl = wx.StaticText(self, wx.NewId(), "Min threshold:") self.minthresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxthresholdLbl = wx.StaticText(self, wx.NewId(), "Max threshold:") self.maxthresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.minthreshold = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.minthreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.maxthreshold = wx.TextCtrl(self, -1, style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.maxthreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) fieldsizer.Add(self.minthresholdLbl, (1, 0)) fieldsizer.Add(self.minthreshold, (1, 1)) fieldsizer.Add(self.maxthresholdLbl, (1, 2)) fieldsizer.Add(self.maxthreshold, (1, 3)) # self.minProcessLbl=wx.StaticText(self,-1,"Processing\nthreshold:") # TODO: is following line important? at the moment minProcess is used later in code. 19.7.2007 SS # self.minProcess=wx.TextCtrl(self,-1,style=wx.TE_PROCESS_ENTER) # fieldsizer.Add(self.minProcessLbl,(2,0)) # fieldsizer.Add(self.minProcess,(2,1)) self.ssThresholdLbl = wx.StaticText(self, -1, "Smooth start:") self.ssThresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssThreshold = wx.TextCtrl(self, -1, "0", style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.ssThreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssgammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.ssgammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.ssgammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(150, -1), style=wx.SL_HORIZONTAL) self.ssgammaSlider.setRange(0, 50, 0.0001, 1.0) self.ssgammaSlider.setRange(50.01, 100, 1.0, 15.0) self.ssgammaSlider.setScaledValue(1.0) self.ssgammaSlider.setSnapPoint(1.0, 0.1) self.ssgammaSlider.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.Bind(wx.EVT_COMMAND_SCROLL, self.setSSGamma, self.ssgammaSlider) fieldsizer.Add(self.ssThresholdLbl, (2, 0)) fieldsizer.Add(self.ssThreshold, (2, 1)) fieldsizer.Add(self.ssgammaSlider, (2, 2)) fieldsizer.Add(self.ssgammaEdit, (2, 3)) self.seThresholdLbl = wx.StaticText(self, -1, "Smooth end:") self.seThresholdLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.seThreshold = wx.TextCtrl(self, -1, "255", style=wx.TE_PROCESS_ENTER, size=(70, -1)) self.seThreshold.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.segammaEdit = wx.TextCtrl(self, -1, "1.00", size=(70, -1), style=wx.TE_PROCESS_ENTER) self.segammaEdit.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.segammaSlider = RangedSlider.RangedSlider(self, -1, 10000, size=(150, -1), style=wx.SL_HORIZONTAL) self.segammaSlider.setRange(0, 50, 0.0001, 1.0) self.segammaSlider.setRange(50.01, 100, 1.0, 15.0) self.segammaSlider.setScaledValue(1.0) self.segammaSlider.setSnapPoint(1.0, 0.1) self.segammaSlider.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.Bind(wx.EVT_COMMAND_SCROLL, self.setSEGamma, self.segammaSlider) self.seThreshold.Bind(wx.EVT_KILL_FOCUS, self.updateSE) self.seThreshold.Bind(wx.EVT_TEXT_ENTER, self.updateSE) self.ssThreshold.Bind(wx.EVT_KILL_FOCUS, self.updateSS) self.ssThreshold.Bind(wx.EVT_TEXT_ENTER, self.updateSS) fieldsizer.Add(self.seThresholdLbl, (3, 0)) fieldsizer.Add(self.seThreshold, (3, 1)) fieldsizer.Add(self.segammaSlider, (3, 2)) fieldsizer.Add(self.segammaEdit, (3, 3)) self.gammaEdit.Bind(wx.EVT_KILL_FOCUS, self.updateGamma) self.gammaEdit.Bind(wx.EVT_TEXT_ENTER, self.updateGamma) self.contrastEdit.Bind(wx.EVT_KILL_FOCUS, self.updateContrast) self.contrastEdit.Bind(wx.EVT_TEXT_ENTER, self.updateContrast) self.brightnessEdit.Bind(wx.EVT_KILL_FOCUS, self.updateBrightness) self.brightnessEdit.Bind(wx.EVT_TEXT_ENTER, self.updateBrightness) self.minValue.Bind(wx.EVT_KILL_FOCUS, self.updateMinimumValue) self.minValue.Bind(wx.EVT_TEXT_ENTER, self.updateMinimumValue) self.maxValue.Bind(wx.EVT_KILL_FOCUS, self.updateMaximumValue) self.maxValue.Bind(wx.EVT_TEXT_ENTER, self.updateMaximumValue) self.minthreshold.Bind(wx.EVT_KILL_FOCUS, self.updateMinimumThreshold) self.minthreshold.Bind(wx.EVT_TEXT_ENTER, self.updateMinimumThreshold) self.maxthreshold.Bind(wx.EVT_KILL_FOCUS, self.updateMaximumThreshold) self.maxthreshold.Bind(wx.EVT_TEXT_ENTER, self.updateMaximumThreshold) self.setMinimumThreshold(0) self.setMaximumThreshold(255) self.setMinimumValue(0) self.setMaximumValue(255) self.mainsizer.Add(self.canvasBox) self.gammaLbl = wx.StaticText(self, -1, "Gamma") self.gammaLbl.SetForegroundColour(scripting.COLOR_EXPERIENCED) self.brightnessLbl = wx.StaticText(self, -1, "Brightness") self.mainsizer.Add(self.brightnessLbl) self.mainsizer.Add(self.brightnessBox) self.mainsizer.Add(self.gammaLbl) self.mainsizer.Add(self.gammaBox) self.mainsizer.Add(fieldsizer) # self.mainsizer.Add(self.defaultBtn) self.SetAutoLayout(True) self.SetSizer(self.mainsizer) self.mainsizer.SetSizeHints(self) self.updateGraph()