/// <summary> /// This event is called, when the ArcMap tool is activated. /// </summary> protected override void OnActivate() { try { _pickLayers = ArcmapLayerUtils.EnumerateLayers(ArcmapUtils.GetFocusMap(), false).ToList(); } catch (Exception) { // Don't let the exeption escape to arcgis. } }
private List <LayerInfoViewModel> LoadLayerInfosFromArcMap() { List <LayerInfoViewModel> result = new List <LayerInfoViewModel>(); var layers = ArcmapLayerUtils.EnumerateLayers(ArcmapUtils.GetFocusMap(), false); foreach (IFeatureLayer layer in layers) { LayerInfoViewModel layerInfo = LoadLayerInfoFromArcMap(layer); result.Add(layerInfo); } return(result); }
private void CreateLabels() { if (Layer is IGeoFeatureLayer geoFeatureLayer) { const double TextSizePt = 9.0; const double GoodLookingScale = 500.0; double referenceScale = ArcmapUtils.GetReferenceScale(GoodLookingScale); string tableName = ArcobjWorkspaceUtils.UnqualifyTableName(ArcobjWorkspaceUtils.GetTableName(geoFeatureLayer.FeatureClass as IDataset)); string oidFieldName = geoFeatureLayer.FeatureClass.OIDFieldName; string globalIdFieldName = ArcobjWorkspaceUtils.GetGlobalIdFieldName(geoFeatureLayer.FeatureClass as ITable); string expression = FormatLabelExpression(tableName, oidFieldName, globalIdFieldName); ITextSymbol textSymbol = new TextSymbolClass(); textSymbol.Color = ArcmapLayerUtils.DetectLayerMainColor(geoFeatureLayer); textSymbol.Size = TextSizePt / referenceScale * GoodLookingScale; // Remove existing annotations geoFeatureLayer.DisplayAnnotation = false; geoFeatureLayer.AnnotationProperties.Clear(); IAnnotateLayerProperties annotateLayerProperties = new LabelEngineLayerPropertiesClass(); annotateLayerProperties.UseOutput = true; annotateLayerProperties.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures; annotateLayerProperties.CreateUnplacedElements = true; ILabelEngineLayerProperties2 labelEngineProperties = (ILabelEngineLayerProperties2)annotateLayerProperties; labelEngineProperties.ExpressionParser = new AnnotationVBScriptEngineClass(); labelEngineProperties.Expression = expression; labelEngineProperties.Symbol = textSymbol; IBasicOverposterLayerProperties overposterProperties = labelEngineProperties.BasicOverposterLayerProperties; overposterProperties.GenerateUnplacedLabels = true; overposterProperties.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape; overposterProperties.PointPlacementOnTop = true; overposterProperties.PointPlacementMethod = esriOverposterPointPlacementMethod.esriSpecifiedAngles; overposterProperties.PointPlacementAngles = new[] { 30.0 }; overposterProperties.LineLabelPosition = CreateLineLabelPosition(); if (labelEngineProperties.OverposterLayerProperties is IOverposterLayerProperties2 overposterProperties2) { overposterProperties2.TagUnplaced = false; // The "place overlapping labels" option } // Show new annotation in map geoFeatureLayer.AnnotationProperties.Add(annotateLayerProperties); geoFeatureLayer.DisplayAnnotation = true; ArcmapUtils.InvalidateMap(ArcmapUtils.GetFocusMap()); } }
/// <summary> /// Expands the table of contents in ArcMap to the matching layer and selects it. /// </summary> private void SelectFeature() { IFeatureSelection featureSelection; IMap map = ArcmapUtils.GetFocusMap(); foreach (IFeatureLayer featureLayer in ArcmapLayerUtils.EnumerateLayers(map, false)) { featureSelection = featureLayer as IFeatureSelection; featureSelection?.Clear(); } featureSelection = _layer as IFeatureSelection; featureSelection?.Add(_feature); ArcmapUtils.InvalidateMap(map); }
private static LayerInfoViewModel LoadLayerInfoFromArcMap(IFeatureLayer layer) { // tablename IDataset dataset = (IDataset)layer.FeatureClass; string tableName = ArcobjWorkspaceUtils.GetTableName(dataset); IFeatureLayerDefinition layerDefinition = layer as IFeatureLayerDefinition; string filter = layerDefinition?.DefinitionExpression; int?[] rowCounts = { ArcmapLayerUtils.GetFilteredLayerRowCount(layer), ArcmapLayerUtils.GetLayerRowCount(layer) }; return(new LayerInfoViewModel { Title = layer.Name, Layer = layer, TableName = tableName, Filter = filter, RowCount = string.Join(" / ", rowCounts.Where(item => item != null)), }); }
/// <summary> /// Expands the table of contents in ArcMap to the matching layer and selects it. /// </summary> private void JumpToLayer() { ArcmapLayerUtils.ExpandParentLayers(Layer, ArcmapUtils.GetFocusMap()); ArcmapLayerUtils.SelectLayer(Layer, ArcMap.Application); }