Example #1
0
        /// <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;
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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());
            }
        }
Example #4
0
        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;
 }