/// <summary> /// 显示指定图层指定字段的标注 /// </summary> /// <param name="geoLayer">要设置注标注的图层(IFeatureLayer as IGeoFeatureLayer)</param> /// <param name="fieldName">显示标注的字段</param> /// <param name="fontName">标注的字体</param> /// <param name="size">标注的大小</param> public static void ShowLabel(this IGeoFeatureLayer geoLayer, string fieldName, string fontName = "宋体", int size = 12) { //标注属性集 IAnnotateLayerPropertiesCollection annotateLyrProColl = geoLayer.AnnotationProperties; annotateLyrProColl.Clear(); //普通标准属性(另一个是Maplex标准属性) ILabelEngineLayerProperties labelEngine = new LabelEngineLayerPropertiesClass(); labelEngine.Expression = $"[{fieldName}]"; //字体 IFontDisp fontDisp = new StdFont() { Name = fontName, Bold = false } as IFontDisp; //标注符号 ITextSymbol textSymbol = new TextSymbolClass(); textSymbol.Color = ColorCreate.GetIColor(0, 0, 0); textSymbol.Font = fontDisp; textSymbol.Size = size; labelEngine.Symbol = textSymbol; //设置同名标注:默认为移除同名标注,应设为每个要素放置一个标注 IBasicOverposterLayerProperties basicOverpLyrPro = labelEngine.BasicOverposterLayerProperties as IBasicOverposterLayerProperties; basicOverpLyrPro.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;//每个要素放置一个标注 annotateLyrProColl.Add(labelEngine as IAnnotateLayerProperties); geoLayer.DisplayAnnotation = true; }
public void SetObjects(object @object) { ILabelStyle style = @object as ILabelStyle; if (style != null) { this.m_pTextSymbol = (style.Symbol as IClone).Clone() as ITextSymbol; this.m_pOverposterLayerProperties = (style.BasicOverposterLayerProperties as IClone).Clone() as IBasicOverposterLayerProperties; } }
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()); } }
private void getLayerLabel_Maplex(IGeoFeatureLayer pGeoFeatLayer) { Boolean bIsLabel = pGeoFeatLayer.DisplayAnnotation; if (bIsLabel) { this.chkIsLabel.Checked = true; } else { this.chkIsLabel.Checked = false;//changed by chulili 20110712修改bug true->false } //added by chulili 20110804按照图层的标注设置初始化界面 //this.chkIsLabel.Checked = pGeoFeatureLayer.DisplayAnnotation; IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = pGeoFeatLayer.AnnotationProperties; if (pAnnotateLayerPropertiesCollection == null) { return; } //定义IAnnotateLayerPropertiesCollection.QueryItem方法中调用的对象 IAnnotateLayerProperties pAnnoLayerProperties = null; IElementCollection pElementCollection = null; IElementCollection pElementCollection1 = null; //获取标注渲染对象 pAnnotateLayerPropertiesCollection.QueryItem(0, out pAnnoLayerProperties, out pElementCollection, out pElementCollection1); if (pAnnoLayerProperties == null) { return; } ILabelEngineLayerProperties2 pLabelEngineLayerPro = pAnnoLayerProperties as ILabelEngineLayerProperties2; if (pLabelEngineLayerPro == null) { return; } ITextSymbol pTextSymbol = pLabelEngineLayerPro.Symbol; IMaplexOverposterLayerProperties pmaplexoverposterlayerprop = pLabelEngineLayerPro.OverposterLayerProperties as IMaplexOverposterLayerProperties; IBasicOverposterLayerProperties pBasicOverposterLayerProp = pLabelEngineLayerPro.OverposterLayerProperties as IBasicOverposterLayerProperties; if (pBasicOverposterLayerProp != null) { switch (pBasicOverposterLayerProp.NumLabelsOption) { case esriBasicNumLabelsOption.esriOneLabelPerName: this.rdbPerName.Checked = true; break; case esriBasicNumLabelsOption.esriOneLabelPerPart: this.rdbPerPart.Checked = true; break; case esriBasicNumLabelsOption.esriOneLabelPerShape: this.rdbPerShape.Checked = true; break; default: this.rdbPerName.Checked = true; break; } } ///////////////////////////// string strMaxScale = pAnnoLayerProperties.AnnotationMaximumScale.ToString(); string strMinScale = pAnnoLayerProperties.AnnotationMinimumScale.ToString(); //////////////////////////// this.txtMaxLabelScale.Text = strMaxScale; this.txtMinLabelScale.Text = strMinScale; this.btnBold.Checked = pTextSymbol.Font.Bold; this.btnItalic.Checked = pTextSymbol.Font.Italic; this.btnUnderLine.Checked = pTextSymbol.Font.Underline; this.FontColorPicker.SelectedColor = ColorTranslator.FromOle(pTextSymbol.Color.RGB); newSize = (float)Convert.ToDouble(pTextSymbol.Font.Size); newFamily = new FontFamily(pTextSymbol.Font.Name); newFont = FontStyle.Regular;//CmbFields string strField = pLabelEngineLayerPro.Expression; //获取字段名称 if (strField.StartsWith("[")) { strField = strField.Substring(1); } if (strField.EndsWith("]")) { strField = strField.Substring(0, strField.Length - 1); } //设置界面上字段名称 for (int i = 0; i < CmbFields.Items.Count; i++) { if (CmbFields.Items[i].ToString() == strField) { CmbFields.SelectedIndex = i; break; } } //设置界面上字体名称 for (int i = 0; i < CmbFontName.Items.Count; i++) { if (CmbFontName.Items[i].ToString() == pTextSymbol.Font.Name) { CmbFontName.SelectedIndex = i; break; } } //设置界面上字体大小 decimal dSize = decimal.Round(pTextSymbol.Font.Size, 0, MidpointRounding.AwayFromZero); string strLabelSize = Convert.ToInt32(dSize).ToString(); for (int i = 0; i < CmbFontSize.Items.Count; i++) { if (CmbFontSize.Items[i].ToString() == strLabelSize) { CmbFontSize.SelectedIndex = i; break; } } if (pTextSymbol.Font.Underline) { newFont = newFont ^ FontStyle.Underline; } if (pTextSymbol.Font.Bold) { newFont = newFont ^ FontStyle.Bold; } if (pTextSymbol.Font.Italic) { newFont = newFont ^ FontStyle.Italic; } //设置界面上字体格式 setFont(); //设置界面上字体颜色 LabelText.ForeColor = ColorTranslator.FromOle(pTextSymbol.Color.RGB); }
public void SetObjects(object @object) { this.m_pOverposterLayerProperties = @object as IBasicOverposterLayerProperties; }