This example displays a UI dialog with a button for users to randomly select an input raster from files that are currently open in ENVI. The dialog is created using a simple IDL widget. This is an example of custom UI functionality that can be added to a workflow step.
Follow these steps to run the example:
- Copy and paste the code below into the IDL Editor. Save the file as pickrandomraster_ui__define.pro.
- Compile pickrandomraster_ui__define.pro.
- Start ENVI.
- From the ENVI menu bar, select File > Open.
- Navigate to the ENVIxx\data\time_series folder of your ENVI installation path and use Ctrl-click to select all of the AirTemp*.dat files. Click Open.
- Type the following in the IDL command line:
IDL> e = ENVI()
IDL> outputUI = Obj_New('PickRandomRaster_UI')
IDL> raster = e.UI.CreateFromDialog(outputUI)
- In the dialog that appears, click the Pick a Random Raster button. ENVI selects a random raster from the opened files and displays it in the dialog.
Code Example
PRO PickRandomRaster_UI_EventHandler, sEvent
COMPILE_OPT IDL2, HIDDEN
Widget_Control, sEvent.id, GET_UVALUE=self
self.HandleEvent, sEvent
END
FUNCTION PickRandomRaster_UI::Init, _REF_EXTRA=refExtra
COMPILE_OPT IDL2, HIDDEN
self.oRaster = ENVIRaster_UI()
return, self.ENVIParameterUI::Init(_EXTRA=refExtra)
END
PRO PickRandomRaster_UI::Cleanup
COMPILE_OPT IDL2, HIDDEN
IF (Obj_Valid(self.oRaster)) THEN BEGIN
Obj_Destroy, self.oRaster
ENDIF
self.ENVIParameterUI::Cleanup
END
PRO PickRandomRaster_UI::SetValue, value
COMPILE_OPT IDL2, HIDDEN
self.oRaster.SetValue, value
END
FUNCTION PickRandomRaster_UI::GetValue, ERROR=error
COMPILE_OPT IDL2, HIDDEN
return, self.oRaster.GetValue(ERROR=error)
END
PRO PickRandomRaster_UI::HandleEvent, sEvent
COMPILE_OPT IDL2, HIDDEN
CASE Widget_Info(sEvent.id, /UNAME) OF
'randomize': BEGIN
rasters = envi.data.Get(/RASTER)
value = !null
IF (N_Elements(rasters) ne 0) THEN BEGIN
pos = Sort(Randomu(seed, N_Elements(rasters)))
value = rasters[pos[0]]
ENDIF
self.SetValue, value
END
ELSE:
ENDCASE
END
PRO PickRandomRaster_UI::BuildUI, wBase, xSize
COMPILE_OPT IDL2, HIDDEN
wColumn = WIDGET_BASE(wBase, /COLUMN)
self.oRaster.BuildUI, wColumn, xSize
wRow = WIDGET_BASE(wColumn, /ROW)
!null = WIDGET_BUTTON(wRow, $
VALUE='Pick a Random Raster', $
UVALUE=self, $
UNAME='randomize', $
EVENT_PRO='PickRandomRaster_UI_EventHandler')
END
PRO PickRandomRaster_UI__Define
COMPILE_OPT IDL2, HIDDEN
!null = {PickRandomRaster_UI, $
inherits ENVIParameterUI, $
oRaster: Obj_New() $
}
END
See Also
Customize Workflows