ArcGIS Pro SDK (七)编辑 12 编辑模版
文章目录
1 在图层上按名称查找编辑模板
ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
() =>
{
var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;
if (map == null)
return;
var mainTemplate = map.FindLayers("main").FirstOrDefault()?.GetTemplate("Distribution");
var mhTemplate = map.FindLayers("Manhole").FirstOrDefault()?.GetTemplate("Active");
});
2 查找属于独立表的表模板
ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
() =>
{
var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;
if (map == null)
return;
var tableTemplate = map.FindStandaloneTables("Address Points").FirstOrDefault()?.GetTemplate("Residences");
var ownersTableTemplates = map.FindStandaloneTables("Owners").FirstOrDefault()?.GetTemplates();
var statisticsTableTemplates = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().First(l => l.Name.Equals("Trading Statistics")).GetTemplates();
});
3 当前模板
EditingTemplate template = EditingTemplate.Current;
4 更改模板的默认编辑工具
public Task ChangeTemplateDefaultToolAsync(ArcGIS.Desktop.Mapping.FeatureLayer flayer,
string toolContentGUID, string templateName)
{
return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(
() =>
{
var template = flayer?.GetTemplate(templateName) as ArcGIS.Desktop.Editing.Templates.EditingTemplate;
var layerDef = flayer?.GetDefinition() as ArcGIS.Core.CIM.CIMFeatureLayer;
if ((template == null) || (layerDef == null))
return;
if (template.DefaultToolID != this.ID)
{
bool updateLayerDef = false;
if (layerDef.AutoGenerateFeatureTemplates)
{
layerDef.AutoGenerateFeatureTemplates = false;
updateLayerDef = true;
}
var templateDef = template.GetDefinition();
templateDef.DefaultToolGUID = toolContentGUID;
template.SetDefinition(templateDef);
if (updateLayerDef)
flayer.SetDefinition(layerDef);
}
});
}
5 隐藏或显示模板上的编辑工具
QueuedTask.Run(
() =>
{
var featLayer = MapView.Active.Map.FindLayers("Roads").First();
var editTemplates = featLayer.GetTemplates();
var newCIMEditingTemplates = new List<CIMEditingTemplate>();
foreach (var et in editTemplates)
{
et.ActivateDefaultToolAsync();
var cimEditTemplate = et.GetDefinition();
var allTools = et.ToolIDs.ToList();
allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
cimEditTemplate.SetExcludedToolIDs(allTools.ToArray());
cimEditTemplate.AllowToolID("esri_editing_SketchLineTool");
newCIMEditingTemplates.Add(cimEditTemplate);
}
var layerDef = featLayer.GetDefinition() as CIMFeatureLayer;
layerDef.AutoGenerateFeatureTemplates = false;
layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray();
featLayer.SetDefinition(layerDef);
});
6 使用图层创建新模板
var layer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault();
if (layer == null)
return;
QueuedTask.Run(
() =>
{
var insp = new Inspector();
insp.LoadSchema(layer);
insp["Field1"] = value1;
insp["Field2"] = value2;
insp["Field3"] = value3;
var tags = new[] { "Polygon", "tag1", "tag2" };
string defaultTool = "esri_editing_SketchCirclePolygonTool";
var toolFilter = new[] { "esri_editing_SketchTracePolygonTool" };
var newTemplate = layer.CreateTemplate("My new template", "description", insp, defaultTool, tags, toolFilter);
});
7 使用表创建新表模板
var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)
return;
QueuedTask.Run(
() =>
{
var tableTemplate = table.GetTemplate("Template1");
var definition = tableTemplate.GetDefinition();
definition.Description = "New definition";
definition.Name = "New name";
table.CreateTemplate(definition);
table.CreateTemplate("New template name", "Template description", tags: new string[] { "tag 1", "tag 2" });
});
8 更新表模板
QueuedTask.Run(
() =>
{
var tableTemplate = table.GetTemplate("Template1");
var definition = tableTemplate.GetDefinition();
definition.Description = "New definition";
definition.Name = "New name";
tableTemplate.SetDefinition(definition);
});
9 创建注释模板
AnnotationLayer annoLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<AnnotationLayer>().FirstOrDefault();
if (annoLayer == null)
return;
QueuedTask.Run(
() =>
{
Inspector insp = null;
var fc = annoLayer.GetFeatureClass() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClass;
var cimDefinition = fc.GetDefinition() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClassDefinition;
var labels = cimDefinition.GetLabelClassCollection();
var symbols = cimDefinition.GetSymbolCollection();
if ((labels.Count == 0) || (symbols.Count == 0))
return;
var label = labels[0];
var symbolName = label.TextSymbol.SymbolName;
int symbolID = -1;
if (!int.TryParse(symbolName, out symbolID))
{
foreach (var symbol in symbols)
{
if (symbol.Name == symbolName)
{
symbolID = symbol.ID;
break;
}
}
}
if (symbolID == -1)
return;
insp = new Inspector();
insp.LoadSchema(annoLayer);
insp["AnnotationClassID"] = label.ID;
insp["SymbolID"] = symbolID;
AnnotationProperties annoProperties = insp.GetAnnotationProperties();
annoProperties.FontSize = 36;
annoProperties.TextString = "My Annotation feature";
annoProperties.VerticalAlignment = VerticalAlignment.Top;
annoProperties.HorizontalAlignment = HorizontalAlignment.Justify;
insp.SetAnnotationProperties(annoProperties);
var tags = new[] { "Annotation", "tag1", "tag2" };
string defaultTool = "esri_editing_SketchStraightAnnoTool";
var toolFilter = new[] { "esri_editing_SketchCurvedAnnoTool" };
var newTemplate = annoLayer.CreateTemplate("new anno template", "description", insp, defaultTool, tags, toolFilter);
});
10 删除表模板
var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)
return;
QueuedTask.Run(
() =>
{
var tableTemplate = table.GetTemplate("Template1");
table.RemoveTemplate(tableTemplate);
table.RemoveTemplate("Template2");
});
11 活动模板已更改
ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEvent.Subscribe(OnActiveTemplateChanged);
async void OnActiveTemplateChanged(ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEventArgs args)
{
if (args.IncomingTemplate == null)
return;
if (args.IncomingTemplate.Name == "Freeway" && args.IncomingMapView.Map.Name == "Layers")
await args.IncomingTemplate.ActivateToolAsync("esri_editing_SketchTwoPointLineTool");
}