// respond to click event protected override async void OnClick() { string xml = ""; var toc = MappingModule.ActiveTOC; if (toc != null) { // get toc highlighted layers var selLayers = toc.SelectedLayers; // retrieve the first one Layer layer = selLayers.FirstOrDefault(); if (layer != null) { // find the CIM and serialize it CIMBaseLayer cim = await layer.QueryLayerDefinitionAsync(); xml = XmlUtil.SerializeCartoXObject(cim); } } if (string.IsNullOrEmpty(xml)) { return; } // show it CIMViewerViewModel vm = new CIMViewerViewModel(); vm.Xml = xml; ArcGIS.Desktop.Internal.Framework.DialogManager.ShowDialog(vm, null); }
protected async override void OnClick() { string xml = ""; //var toc = MapView.Active.MappingModule.ActiveTOC; if (MapView.Active != null) { // get toc highlighted layers var selLayers = MapView.Active.GetSelectedLayers(); // retrieve the first one Layer layer = selLayers.FirstOrDefault(); if (layer != null) { // find the CIM and serialize it await QueuedTask.Run(() => { CIMBaseLayer cim = layer.GetDefinition(); xml = XmlUtil.SerializeCartoXObject(cim); }); } } if (string.IsNullOrEmpty(xml)) { return; } // show it CIMViewerViewModel vm = new CIMViewerViewModel(); vm.Xml = xml; ArcGIS.Desktop.Internal.Framework.DialogManager.ShowDialog(vm, null); }
public async Task <double> GetOffsetZAsync() { return(await QueuedTask.Run(() => { CIMBaseLayer cimBaseLayer = Layer?.GetDefinition(); CIMBasicFeatureLayer cimBasicFeatureLayer = cimBaseLayer as CIMBasicFeatureLayer; CIMLayerElevationSurface layerElevation = cimBasicFeatureLayer?.LayerElevation; return (layerElevation?.OffsetZ ?? 0.0); })); }
private void AddMatchingSymbolSetsToLayer(Layer layer, List <CIMFeatureTemplate> list) { // get layer symbol codes, "symbolset" var symbolCodeList = new List <string>(); var fl = layer as FeatureLayer; if (fl.GetTable().GetDatastore() is UnknownDatastore) { return; } using (var table = fl.GetTable()) { IReadOnlyList <ArcGIS.Core.Data.Subtype> readOnlyList; try { var tableDef = table.GetDefinition(); readOnlyList = tableDef.GetSubtypes(); var fieldIndex = tableDef.FindField("symbolset"); if (fieldIndex >= 0) { var fieldValue = tableDef.GetFields().ElementAt(fieldIndex).GetDefaultValue(); if (fieldValue != null) { symbolCodeList.Add(fieldValue.ToString()); } } } catch (Exception e) { return; } foreach (var subtype in readOnlyList) { //var name = subtype.GetName(); var code = subtype.GetCode().ToString(); if (!symbolCodeList.Contains(code)) { symbolCodeList.Add(code); } } } var filteredList = list.Where(t => symbolCodeList.Contains(t.DefaultValues["symbolset"].ToString())); if (filteredList != null && filteredList.Any()) { CIMBaseLayer cim = layer.GetDefinition(); var cimFL = ((CIMFeatureLayer)cim); if (cimFL != null) { if (cimFL.FeatureTemplates != null && cimFL.FeatureTemplates.Any()) { var tempList = cimFL.FeatureTemplates.ToList(); tempList.AddRange(filteredList); cimFL.FeatureTemplates = tempList.ToArray(); } else { cimFL.FeatureTemplates = filteredList.ToArray(); } layer.SetDefinition(cim); } } }
/// <summary> /// Call this method to apply symbol groups to the featureLayer - one group per value in the renderer. /// The first group to be added will be the first group to be drawn /// </summary> /// <param name="featureLayer"></param> private void SetUpSymbolLevelsForUSHighways(FeatureLayer featureLayer) { //All of these methods have to be called on the MCT if (Module1.OnUIThread) { throw new CalledOnWrongThreadException(); } CIMBaseLayer baseLayer = featureLayer.GetDefinition(); //We need CIMGeoFeatureLayerBase because this class controls whether or not we //use 'groups' (ie Pro Symbol Levels) with the renderer CIMGeoFeatureLayerBase geoFeatureLayer = baseLayer as CIMGeoFeatureLayerBase; // assume the unique value renderer was created using the CreateCIMRenderer() CIMUniqueValueRenderer uniqueValueRenderer = geoFeatureLayer.Renderer as CIMUniqueValueRenderer; CIMSymbolLayerDrawing symbolLayerDrawing = new CIMSymbolLayerDrawing() { // This flag controls the drawing code and forces it to use defined symbol layers. //It must be set 'true' UseSymbolLayerDrawing = true }; // setup the symbol layers. List <CIMSymbolLayerIdentifier> symbolLayers = new List <CIMSymbolLayerIdentifier>(); // this will be a for loop that will iterate over the unique value classes and updating the symbol in each class int index = 0; foreach (CIMUniqueValueGroup nextGroup in uniqueValueRenderer.Groups) { foreach (CIMUniqueValueClass nextClass in nextGroup.Classes) { CIMMultiLayerSymbol multiLayerSymbol = nextClass.Symbol.Symbol as CIMMultiLayerSymbol; if (multiLayerSymbol == null) //This check probably is not needed { continue; } //Each group must be uniquely named string uniqueName = "Group_" + index.ToString(); nextClass.Symbol.SymbolName = uniqueName; for (int i = 0; i < multiLayerSymbol.SymbolLayers.Length; i++) { //Assign the unique name to all of the layers in the symbol multiLayerSymbol.SymbolLayers[i].Name = uniqueName; } index++; //Assign the name to a 'CIMSymbolLayerIdentifier'. This is the equivalent //of a KeyValuePair in a Dictionary. The Names of each SymbolLayerIdentifier //will be matched up in the renderer to a corresponding symbol (via nextClass.Symbol.SymbolName) //So that each SymbolLayer is associated with a specific symbol for a specific value CIMSymbolLayerIdentifier nextSymbolLayer = new CIMSymbolLayerIdentifier() { SymbolLayerName = uniqueName }; symbolLayers.Add(nextSymbolLayer); } } //This is where the symbol layers get added to the feature layer definition symbolLayerDrawing.SymbolLayers = symbolLayers.ToArray(); geoFeatureLayer.SymbolLayerDrawing = symbolLayerDrawing; // update the featureLayer definition. featureLayer.SetDefinition(geoFeatureLayer as CIMBaseLayer); }