X

Help Articles are product support tips and information straight from the NV5 Geospatial Technical Support team developed to help you use our products to their fullest potential.



58 Rate this article:
No rating

How to create and customize a User Interface (UI) in ENVI Tasks?

It is possible to create a dynamic User interface when customizing an ENVI Task, as proposed in the below example.

More details in the link below

https://www.nv5geospatialsoftware.com/docs/CustomTasksTutorial.html#Create

 

Creating a User Interface (UI) in a customed ENVI task will require creating a Style Sheet first

Examples of various Style Sheet files (.style extensions) for ENVI tasks are available in the following folder:
C:\Program Files\NV5\ENVI62\resource\templates\tasks

 

Below is an example of a customized ENVI task called classthresholds including a customized UI to select

  • The input raster
  • The classifier method using radio buttons
  • The threshold value

For input, the task will require :

  • A raster image
  • A threshold value
  • A method to apply the threshold

Depending on the chosen method, the classifier will behave differently

  • MAX threshold: all pixel values above the threshold will be set to the maximum of the input raster
  • MIN Threshold: all pixel values below or equal to the threshold will be set to the minimum of the input raster

 

  1. The Classthresholds.style file describes the content of the UI. In this example it includes
  • 2 radio buttons to select the method to apply the threshold: MAX Threshold or MIN Threshold
  • A text field to input the threshold value.

In addition, a field to select the input raster, is directly created when running the runclassthresholds_ui .pro with the command

                                            raster = UI.SelectInputData(/RASTER)

It should be saved in the /NV5/ENVIx.x/custom_code/ folder.

{
   "schema": "envitask_3.0",
    "parameters": [
        {
            "name": "CLASSIFIER",
            "type": "IDLRadioButtons_UI",
            "keywords": {
                "OPTIONS": ["MAX Threshold", "MIN Threshold"]
                    },
        },
        {
            "name": "THRESHOLDS",
            "type": "IDLNumeric_UI",
            "keywords": {
                "TYPE": "double",
                },    
        }
        
    ]
}

 

 

  1. The Classthresholds.task file includes the task template of the customized task, that will use the above UI.

The task template maps keywords of the IDL  processing program - Classthresholds.pro -  to the task parameters.

It should be saved in the /NV5/ENVIx.x/custom_code/ folder.

{
  "name": "classthresholds",
  "base_class": "ENVITaskFromProcedure",
  "routine": "classthresholds",
  "display_name": "Compute Class Thresholds",
  "description": "Computes class thresholds from input raster.",
  "schema": "envitask_3.3",
  "revision": "1.0.0",
  "parameters": [
    {
        "name": "RASTER_URI",
        "display_name": "Select a classification image",
        "type": "ENVIURI",
        "direction": "input",
        "required": true,
        "description": "This is the input classification image"
    },
    {
        "name": "CLASSIFIER",
        "display_name": "Classifier",
        "type": "string",
        "direction": "input",
        "default": "MAX Threshold",
        "required": true,
        "description": "Select the threshol method"
    },
    {
         "name": "THRESHOLDS",
         "display_name": "Select a threshold value",
         "type": "double",
         "direction": "input",
         "required": true,
         "description": "Input threshold value"
     },
     {
        "name": "OUTPUT_RASTER_URI",
        "display_name": "Output Raster URI",
        "type": "ENVIURI",
        "direction": "output",
        "required": false,
        "description": "Output thresholded raster",
        "auto_extension": ".dat"
    }
    ]
}

 

 

  1. The Classthresholds.pro file is the IDL program that will contain the processing steps to be executed in ENVI +IDL.

It would need to be compiled and saved as a .sav file to be run with ENVI only (without IDL).

It should be saved in the /NV5/ENVIx.x/custom_code/ folder.

; CUSTOM TASK CODE
PRO classthresholds,                     $
  RASTER_URI        = raster_uri,        $
  CLASSIFIER        = classifer,         $  
  THRESHOLDS        = thresholds,         $
  OUTPUT_RASTER_URI = output_raster_uri
  
  COMPILE_OPT IDL2, hidden
  ON_ERROR, 2

  ; Access the current ENVI session
  e = ENVI(/CURRENT)
  
  ; Get the User Interface object
  UI = e.UI

  ; Open raster
  raster= e.Openraster(raster_uri)
   
  ; Get the number of bands, the metadata object and the data
  nbands = raster.nbands
  metadata = raster.METADATA
  b1 = raster.GetData()

  ; apply threshold method
  IF classifer EQ 'MAX Threshold' Then b1[WHERE(b1 GT thresholds)]=MAX(b1)
  IF classifer EQ 'MIN Threshold' Then b1[WHERE(b1 LE thresholds)]=MIN(b1)

  ; Get output raster URI  and save the output raster
  if output_raster_uri eq !NULL || output_raster_uri eq '' then begin
    output_raster_uri = e.GetTemporaryFilename('.dat')
  endif
  outputRaster = ENVIRaster(b1, inherits_from=raster, uri=output_raster_uri)
  outputRaster.save
 
  result = DIALOG_MESSAGE('end', /INFORMATION, TITLE='Class Thresholds')

END

 

 

  1. Last step consists in building a runclassthresholds_ui .pro IDL code to deploy the custom task in ENVI+IDL.

Again, this one should be compiled and saved as a .sav file for usage in ENVI only (without IDL)

This file should be saved in /NV5/ENVI6.2/extensions folder.

It will create a new menu in ENVI Toolbox: /Extensions/runclassthresholds_ui to execute the custom task

 

PRO runclassthresholds_ui_extensions_init
  COMPILE_OPT IDL2, HIDDEN

  ; Get the current ENVI session
  e = ENVI(/CURRENT)

  ; Add the custom task as an extension to the ENVI toolbox
  e.AddExtension, 'Compute Class Thresholds', $
    'runclassthresholds_ui ';, PATH='/Classification'

END

PRO runclassthresholds_ui   

  COMPILE_OPT IDL2, hidden
  ON_ERROR, 2

  ; Get the current ENVI session 
  e = ENVI(/CURRENT)

  ; Run the custom task
  Task = ENVITask('classthresholds')
  dynamicUI = e.UI.SelectTaskParameters(Task)
  IF (dynamicUI NE 'OK') THEN RETURN
  Task.Execute 

  ; Re-open the input and output raster dataset
  raster=e.OpenRaster(task.raster_URI)
  outputRaster = e.OpenRaster(task.OUTPUT_RASTER_URI)

  ; Add the result to the Data Manager
  DataColl = e.Data
  DataColl.Add, raster
  DataColl.Add, outputraster
  
  ; Display in ENVI view
  view = e.GetView()
  layer = view.CreateLayer(Raster)
  layer = view.CreateLayer(outputRaster)
  
  print, 'Thresholded raster displayed in ENVI view'

END

 

 

  1. Start the new /Extensions/runclassthresholds_ui menu in the ENVI Toolbox to execute the custom task.

 

 

 

---------------------------------------

created by BC (EU) on 6/2/2026

reviewed by MM on 6/2/2026

Please login or register to post comments.
Featured

IDL and ENVI Agent FAQ

3/17/2026

What are the IDL and ENVI Agents? What can IDL or ENVI Agent help me do? What platforms support IDL... more »

My Licenses Portal - Users Guide

9/24/2025

  Introduction License Administrators (and Distributors) can view license Original... more »

End-of-Life Policy Enforcement for ENVI 5.3 / IDL 8.5 and Earlier Versions

5/6/2024

April 1, 2024 Dear ENVI/IDL Customer,  We are reaching out to notify you of our supported... more »

How to Upgrade Your ENVI 6.x / IDL 9.x Licenses (including modules)

12/5/2023

What is the new Upgrade function? Starting with ENVI 6.0 and IDL 9.0, we have implemented an... more »

What to do if the 'License Administrator - License Server' for the Next-Generation License Server does not start?

6/13/2023

Background: With the release of ENVI 5.7 & IDL 8.9 and the corresponding Next-Generation licensing... more »

Next-Generation Licensing FAQ

4/28/2023

  NV5 Geospatial has adopted a new licensing technology for all future releases of our ENVI, IDL... more »

The IDL Virtual Machine

6/6/2013

What is the IDL Virtual Machine? An IDL Virtual Machine is a runtime version of IDL that can... more »