Beispiel #1
0
        // 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);
     }));
 }
Beispiel #4
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);
                }
            }
        }
Beispiel #5
0
        /// <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);
        }