/// <summary> /// Event handler for layer selection change. /// </summary> /// <param name="mapViewArgs">An instance of the MapViewEventArgs.</param> private async void SelectedLayersChanged(ArcGIS.Desktop.Mapping.Events.MapViewEventArgs mapViewArgs) { // Check if there is an active map view. if (MapView.Active != null) { // Gets the selected layers from the current Map. IReadOnlyList <Layer> selectedLayers = MapView.Active.GetSelectedLayers(); // The combo box will update only if one layer is selected. if (selectedLayers.Count == 1) { // Gets the selected layer. Layer firstSelectedLayer = selectedLayers.First(); // Make sure the selected layer is an image service layer. if (firstSelectedLayer != null && firstSelectedLayer is ImageServiceLayer) { // Initiates the combox box selected item. //InitializeComboBox(); await QueuedTask.Run(() => { // Get and store the rendering rule of the selected image service layer. renderingRule_default = (firstSelectedLayer as ImageServiceLayer).GetRenderingRule(); }); } } } else { MessageBox.Show("There is no active map.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// This function is used to apply a raster function template onto an image service layer. /// </summary> /// <param name="selectedLayer">The selected image service layer. </param> /// <param name="operation">An Enum type represents the user selected operation. </param> /// <param name="xmlFilePath">The XML file path.</param> /// <returns></returns> public static async Task ApplyRFTXmlFile(ImageServiceLayer selectedLayer, Enum operation, string xmlFilePath) { // Creates a new instance of XmlDocument class. XmlDocument xmlDoc = new XmlDocument(); // Loads the RFT XML file from its file path. xmlDoc.Load(xmlFilePath); // Creates a new instance of the rendering rule. CIMRenderingRule setRenderingrule = new CIMRenderingRule(); // Gets the markup containing all the nodes and their child nodes, passes to the rendering rule definition. setRenderingrule.Definition = xmlDoc.OuterXml; // Defines the rendering rule name as the operation name. setRenderingrule.Name = Convert.ToString(operation); await QueuedTask.Run(() => { // Sets the new rendering rule to the selected layer. selectedLayer.SetRenderingRule(setRenderingrule); // Gets the current rendering rule from the layer. CIMRenderingRule renderingRule = selectedLayer.GetRenderingRule(); //Verifies if the current rendering rule name is correct. Else, error message shows up. if (renderingRule.Name != Convert.ToString(operation)) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("The operation is not succeeded, please check...", "Operation unsucceeded:", MessageBoxButton.OK, MessageBoxImage.Error); } }); }
/// <summary> /// Set the processing template on the first selected image service layer in the first open 2D map. /// </summary> /// <param name="templateName">The name of the processing template to set on the layer.</param> /// <returns></returns> public static async Task SetProcessingTemplateAsync(string templateName) { try { // Get the first 2D map from the project that is called Map. Map _map = await GetMapFromProject(Project.Current, "Map"); if (_map == null) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("SetResamplingType: Failed to get map."); return; } // Get the most recently selected layer. Layer firstSelectedLayer = MapView.Active.GetSelectedLayers().First(); // Check if the first selected layer is an image service layer. if (firstSelectedLayer is ImageServiceLayer) { // Set the colorizer on the most recently selected layer. // The colorizer has to be set on the Main CIM Thread (MCT). ImageServiceLayer isLayer = (ImageServiceLayer)firstSelectedLayer; await QueuedTask.Run(() => { // Create a new Rendering rule CIMRenderingRule setRenderingrule = new CIMRenderingRule() { // Set the name of the rendering rule. Name = templateName }; // Update the image service with the new mosaic rule. isLayer.SetRenderingRule(setRenderingrule); }); } } catch (Exception exc) { // Catch any exception found and display a message box. ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Exception caught while trying to set processing template: " + exc.Message); return; } }
// Event Handler, gets name of selected RFT and changes the rendering rule of the Image Service to be displayed accordingly private async void RFT_SelectChanged(object sender) { try { //Map _map1 = await GetMapFromProject(Project.Current, "Map"); Map _map = MapView.Active.Map; if (_map == null) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("AddRasterLayerToMap: Failed to get map."); return; } string dataSoureUrl = ServiceURL; ImageServiceLayer imageServiceLayer = null; await QueuedTask.Run(() => { imageServiceLayer = (ImageServiceLayer)LayerFactory.Instance.CreateLayer(new Uri(dataSoureUrl), _map); if (imageServiceLayer == null) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to create layer for url:" + dataSoureUrl); return; } ImageServiceLayer isLayer = imageServiceLayer; // Create a new Rendering rule CIMRenderingRule setRenderingrule = new CIMRenderingRule(); // Set the name of the rendering rule. setRenderingrule.Name = sender.ToString(); // Update the image service with the new mosaic rule. isLayer.SetRenderingRule(setRenderingrule); string originalLayerName = isLayer.Name; isLayer.SetName(originalLayerName + "_" + sender.ToString()); }); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } }