Has anybody got this sample to work? I want to be able to remove all construction tools and only use the my custom tools but I can't seem to find a way to remove the default tools without having to manually enter the ID for each and everytool. This example off ESRI web page shows featLayer.GetTemplates but the GetTemplates function does not exist.
QueuedTask.Run(() => { //hide all tools except line tool on layer var featLayer = MapView.Active.Map.FindLayers("Roads").First(); var editTemplates = featLayer.GetTemplates(); var newCIMEditingTemplates = new List<CIMEditingTemplate>(); foreach (var et in editTemplates) { //initialize template by activating default tool et.ActivateDefaultToolAsync(); var cimEditTemplate = et.GetDefinition(); //get the visible tools on this template var allTools = et.ToolIDs.ToList(); //add the hidden tools on this template allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList()); //hide all the tools then allow the line tool //At 2.x - //allTools.AddRange(cimEditTemplate.GetExcludedToolDamlIds().ToList()); allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList()); //At 2.x - //cimEditTemplate.SetExcludedToolDamlIds(allTools.ToArray()); //cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool"); cimEditTemplate.SetExcludedToolIDs(allTools.ToArray()); cimEditTemplate.AllowToolID("esri_editing_SketchLineTool"); newCIMEditingTemplates.Add(cimEditTemplate); } //update the layer templates var layerDef = featLayer.GetDefinition() as CIMFeatureLayer; // Set AutoGenerateFeatureTemplates to false for template changes to stick layerDef.AutoGenerateFeatureTemplates = false; layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray(); featLayer.SetDefinition(layerDef); });
Solved! Go to Solution.
Got it working. My code was missing the ArcGIS .Desktop.Extensions reference.
Hi,
GetTemplates is static function of MappingExtensions class with MapMember type parameter. You need to add using :
using ArcGIS.Desktop.Mapping;
There are 2 alternatives to use GetTemplates method:
var editTemplates = featLayer.GetTemplates();
// or
var editTemplates1 = MappingExtensions.GetTemplates(featLayer);
What ArcGIS Pro SDK version do you use?
I have tested on 3.1 and it works
When I run the tool, the Create features pane needed to be open. If it was not open, the code did not work. In your scenario, was the Create Features pane open?
Would it be possible for you to zip up your code and send it over as an attachment?
Here is a sample test class. I get compiler errors stating that MappingExtensions and GetTemplates do not exist.
using ArcGIS.Core.CIM;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace rmg.AlbertaWildfireTools.Core
{
public class Test
{
public static async Task SetConstructionToolsAsync(object sender, Layer layer, CancellationToken cancellationToken = default(CancellationToken))
{
await QueuedTask.Run(() => SetConstructionTools(sender, layer, cancellationToken));
}
public static void SetConstructionTools(object sender, Layer featLayer, CancellationToken cancellationToken = default(CancellationToken))
{
try
{
//self-documenting thread check
if (!QueuedTask.OnWorker) throw new ArcGIS.Core.CalledOnWrongThreadException();
if (cancellationToken.IsCancellationRequested == true)
{
rmg.Common.Events.ProgressBarEvents.OnTaskCancelled(sender);
return;
}
// var featLayer = MapView.Active.Map.FindLayers("Roads").First();
var x = MappingExtensions.GetTemplates(featLayer);
var editTemplates = featLayer.GetTemplates();
var newCIMEditingTemplates = new List<CIMEditingTemplate>();
foreach (var et in editTemplates)
{
//initialize template by activating default tool
et.ActivateDefaultToolAsync();
var cimEditTemplate = et.GetDefinition();
//get the visible tools on this template
var allTools = et.ToolIDs.ToList();
//add the hidden tools on this template
allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
//hide all the tools then allow the line tool
//At 2.x -
//allTools.AddRange(cimEditTemplate.GetExcludedToolDamlIds().ToList());
allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
//At 2.x -
//cimEditTemplate.SetExcludedToolDamlIds(allTools.ToArray());
//cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool");
cimEditTemplate.SetExcludedToolIDs(allTools.ToArray());
cimEditTemplate.AllowToolID("rmg_AlbertaWildfireTools_Buttons_Editing_ConstructionTool_FireLine");
newCIMEditingTemplates.Add(cimEditTemplate);
}
//update the layer templates
var layerDef = featLayer.GetDefinition() as CIMFeatureLayer;
// Set AutoGenerateFeatureTemplates to false for template changes to stick
layerDef.AutoGenerateFeatureTemplates = false;
layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray();
featLayer.SetDefinition(layerDef);
}
catch (Exception ex)
{
rmg.Common.Events.ProgressBarEvents.OnTaskCancelled(sender);
// errorHandler.WriteError(ex, "kkkkfeer");
return;
}
}
}
}