ArcObjects Library Reference  

NDVICustomFunctionUIForm

About the Create an NDVI custom raster function Sample

[C#]

NDVICustomFunctionUIForm.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Catalog;
using ESRI.ArcGIS.CatalogUI;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;

namespace NDVICustomFunctionUI
{
    public partial class NDVICustomFunctionUIForm : Form
    {
        #region Private Members
        private object myInputRaster;
        private string myBandIndices;
        private bool myDirtyFlag;
        #endregion

        #region NDVICustomFunctionUIForm Properties
        /// <summary>
        /// Constructor
        /// </summary>
        public NDVICustomFunctionUIForm()
        {
            InitializeComponent();
            myInputRaster = null;
            myBandIndices = "";
            HintLbl.Text = "NIR Red";
        }

        /// <summary>
        /// Get or set the band indices.
        /// </summary>
        public string BandIndices
        {
            get
            {
                myBandIndices = BandIndicesTxtBox.Text;
                return myBandIndices;
            }
            set
            {
                myBandIndices = value;
                BandIndicesTxtBox.Text = value;
            }
        }

        /// <summary>
        /// Flag to specify if the form has changed
        /// </summary>
        public bool IsFormDirty
        {
            get
            {
                return myDirtyFlag;
            }
            set
            {
                myDirtyFlag = value;
            }
        }

        /// <summary>
        /// Get or set the input raster
        /// </summary>
        public object InputRaster
        {
            get
            {
                return myInputRaster;
            }
            set
            {
                myInputRaster = value;
                inputRasterTxtbox.Text = GetInputRasterName(myInputRaster);
            }
        }

        #endregion

        #region NDVICustomFunctionUIForm Members

        /// <summary>
        /// This function takes a raster object and returns the formatted name of  
        /// the object for display in the UI.
        /// </summary>
        /// <param name="inputRaster">Object whose name is to be found</param>
        /// <returns>Name of the object</returns>
        private string GetInputRasterName(object inputRaster)
        {
            if ((inputRaster is IRasterDataset))
            {
                IRasterDataset rasterDataset = (IRasterDataset)inputRaster;
                return rasterDataset.CompleteName;
            }

            if ((inputRaster is IRaster))
            {
                IRaster myRaster = (IRaster)inputRaster;
                return ((IRaster2)myRaster).RasterDataset.CompleteName;
            }

            if (inputRaster is IDataset)
            {
                IDataset dataset = (IDataset)inputRaster;
                return dataset.Name;
            }

            if (inputRaster is IName)
            {
                if (inputRaster is IDatasetName)
                {
                    IDatasetName inputDSName = (IDatasetName)inputRaster;
                    return inputDSName.Name;
                }

                if (inputRaster is IFunctionRasterDatasetName)
                {
                    IFunctionRasterDatasetName inputFRDName = (IFunctionRasterDatasetName)inputRaster;
                    return inputFRDName.BrowseName;
                }

                if (inputRaster is IMosaicDatasetName)
                {
                    IMosaicDatasetName inputMDName = (IMosaicDatasetName)inputRaster;
                    return "MD";
                }

                IName inputName = (IName)inputRaster;
                return inputName.NameString;
            }

            if (inputRaster is IRasterFunctionTemplate)
            {
                IRasterFunctionTemplate rasterFunctionTemplate =
                    (IRasterFunctionTemplate)inputRaster;
                return rasterFunctionTemplate.Function.Name;
            }

            if (inputRaster is IRasterFunctionVariable)
            {
                IRasterFunctionVariable rasterFunctionVariable =
                    (IRasterFunctionVariable)inputRaster;
                return rasterFunctionVariable.Name;
            }

            return "";
        }

        /// <summary>
        /// Updates the UI textboxes using the properties that have been set.
        /// </summary>
        public void UpdateUI()
        {
            if (myInputRaster != null)
                inputRasterTxtbox.Text = GetInputRasterName(myInputRaster);
            BandIndicesTxtBox.Text = myBandIndices;
        }

        private void inputRasterBtn_Click(object sender, EventArgs e)
        {
            IEnumGxObject ipSelectedObjects = null;
            ShowRasterDatasetBrowser((int)(Handle.ToInt32()), out ipSelectedObjects);

            IGxObject selectedObject = ipSelectedObjects.Next();
            if (selectedObject is IGxDataset)
            {
                IGxDataset ipGxDS = (IGxDataset)selectedObject;
                IDataset ipDataset;
                ipDataset = ipGxDS.Dataset;
                myInputRaster = ipDataset.FullName;
                inputRasterTxtbox.Text = GetInputRasterName(myInputRaster);
                myDirtyFlag = true;
            }
        }

        public void ShowRasterDatasetBrowser(int handle, out IEnumGxObject ipSelectedObjects)
        {
            IGxObjectFilterCollection ipFilterCollection = new GxDialogClass();

            IGxObjectFilter ipFilter1 = new GxFilterRasterDatasetsClass();
            ipFilterCollection.AddFilter(ipFilter1, true);
            IGxDialog ipGxDialog = (IGxDialog)(ipFilterCollection);

            ipGxDialog.RememberLocation = true;
            ipGxDialog.Title = "Open";

            ipGxDialog.AllowMultiSelect = false;
            ipGxDialog.RememberLocation = true;

            ipGxDialog.DoModalOpen((int)(Handle.ToInt32()), out ipSelectedObjects);
            return;
        }

        private void BandIndicesTxtBox_TextChanged(object sender, EventArgs e)
        {
            myBandIndices = BandIndicesTxtBox.Text;
            myDirtyFlag = true;
        }

        #endregion
    }
}

[Visual Basic .NET]

NDVICustomFunctionUIForm.vb

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports ESRI.ArcGIS.Catalog
Imports ESRI.ArcGIS.CatalogUI
Imports ESRI.ArcGIS.DataSourcesRaster
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.esriSystem

Public Partial Class NDVICustomFunctionUIForm
	Inherits Form
	#Region "Private Members"
	Private myInputRaster As Object
	Private myBandIndices As String
	Private myDirtyFlag As Boolean
	#End Region

	#Region "NDVICustomFunctionUIForm Properties"
	''' <summary>
	''' Constructor
	''' </summary>
	Public Sub New()
		InitializeComponent()
		myInputRaster = Nothing
		myBandIndices = ""
		HintLbl.Text = "NIR Red"
	End Sub

	''' <summary>
	''' Get or set the band indices.
	''' </summary>
	Public Property BandIndices() As String
		Get
			myBandIndices = BandIndicesTxtBox.Text
			Return myBandIndices
		End Get
		Set
			myBandIndices = value
			BandIndicesTxtBox.Text = value
		End Set
	End Property

	''' <summary>
	''' Flag to specify if the form has changed
	''' </summary>
	Public Property IsFormDirty() As Boolean
		Get
			Return myDirtyFlag
		End Get
		Set
			myDirtyFlag = value
		End Set
	End Property

	''' <summary>
	''' Get or set the input raster
	''' </summary>
	Public Property InputRaster() As Object
		Get
			Return myInputRaster
		End Get
		Set
			myInputRaster = value
			inputRasterTxtbox.Text = GetInputRasterName(myInputRaster)
		End Set
	End Property

	#End Region

	#Region "NDVICustomFunctionUIForm Members"

	''' <summary>
	''' This function takes a raster object and returns the formatted name of  
	''' the object for display in the UI.
	''' </summary>
	''' <param name="inputRaster">Object whose name is to be found</param>
	''' <returns>Name of the object</returns>
	Private Function GetInputRasterName(inputRaster As Object) As String
		If (TypeOf inputRaster Is IRasterDataset) Then
			Dim rasterDataset As IRasterDataset = DirectCast(inputRaster, IRasterDataset)
			Return rasterDataset.CompleteName
		End If

		If (TypeOf inputRaster Is IRaster) Then
			Dim myRaster As IRaster = DirectCast(inputRaster, IRaster)
			Return DirectCast(myRaster, IRaster2).RasterDataset.CompleteName
		End If

		If TypeOf inputRaster Is IDataset Then
			Dim dataset As IDataset = DirectCast(inputRaster, IDataset)
			Return dataset.Name
		End If

		If TypeOf inputRaster Is IName Then
			If TypeOf inputRaster Is IDatasetName Then
				Dim inputDSName As IDatasetName = DirectCast(inputRaster, IDatasetName)
				Return inputDSName.Name
			End If

			If TypeOf inputRaster Is IFunctionRasterDatasetName Then
				Dim inputFRDName As IFunctionRasterDatasetName = DirectCast(inputRaster, IFunctionRasterDatasetName)
				Return inputFRDName.BrowseName
			End If

			If TypeOf inputRaster Is IMosaicDatasetName Then
				Dim inputMDName As IMosaicDatasetName = DirectCast(inputRaster, IMosaicDatasetName)
				Return "MD"
			End If

			Dim inputName As IName = DirectCast(inputRaster, IName)
			Return inputName.NameString
		End If

		If TypeOf inputRaster Is IRasterFunctionTemplate Then
			Dim rasterFunctionTemplate As IRasterFunctionTemplate = DirectCast(inputRaster, IRasterFunctionTemplate)
			Return rasterFunctionTemplate.[Function].Name
		End If

		If TypeOf inputRaster Is IRasterFunctionVariable Then
			Dim rasterFunctionVariable As IRasterFunctionVariable = DirectCast(inputRaster, IRasterFunctionVariable)
			Return rasterFunctionVariable.Name
		End If

		Return ""
	End Function

	''' <summary>
	''' Updates the UI textboxes using the properties that have been set.
	''' </summary>
	Public Sub UpdateUI()
		If myInputRaster IsNot Nothing Then
			inputRasterTxtbox.Text = GetInputRasterName(myInputRaster)
		End If
		BandIndicesTxtBox.Text = myBandIndices
	End Sub

	Private Sub inputRasterBtn_Click(sender As Object, e As EventArgs)
		Dim ipSelectedObjects As IEnumGxObject = Nothing
		ShowRasterDatasetBrowser(CInt(Handle.ToInt32()), ipSelectedObjects)

		Dim selectedObject As IGxObject = ipSelectedObjects.[Next]()
		If TypeOf selectedObject Is IGxDataset Then
			Dim ipGxDS As IGxDataset = DirectCast(selectedObject, IGxDataset)
			Dim ipDataset As IDataset
			ipDataset = ipGxDS.Dataset
			myInputRaster = ipDataset.FullName
			inputRasterTxtbox.Text = GetInputRasterName(myInputRaster)
			myDirtyFlag = True
		End If
	End Sub

	Public Sub ShowRasterDatasetBrowser(handle__1 As Integer, ByRef ipSelectedObjects As IEnumGxObject)
		Dim ipFilterCollection As IGxObjectFilterCollection = New GxDialogClass()

		Dim ipFilter1 As IGxObjectFilter = New GxFilterRasterDatasetsClass()
		ipFilterCollection.AddFilter(ipFilter1, True)
		Dim ipGxDialog As IGxDialog = DirectCast(ipFilterCollection, IGxDialog)

		ipGxDialog.RememberLocation = True
		ipGxDialog.Title = "Open"

		ipGxDialog.AllowMultiSelect = False
		ipGxDialog.RememberLocation = True

		ipGxDialog.DoModalOpen(CInt(Handle.ToInt32()), ipSelectedObjects)
		Return
	End Sub

	Private Sub BandIndicesTxtBox_TextChanged(sender As Object, e As EventArgs)
		myBandIndices = BandIndicesTxtBox.Text
		myDirtyFlag = True
	End Sub

	#End Region
End Class