Ejemplo n.º 1
0
        private void AddLabel(string StrDisplayField)
        {
            pGeoFeatLayer.DisplayAnnotation = false;
            pMapControl.ActiveView.Refresh();

            pGeoFeatLayer.DisplayField = StrDisplayField;

            IAnnotateLayerPropertiesCollection pAnnoProps = null;

            pAnnoProps = pGeoFeatLayer.AnnotationProperties;

            ILineLabelPosition pPosition = null;

            pPosition          = new LineLabelPositionClass();
            pPosition.Parallel = true;
            pPosition.Above    = true;

            ILineLabelPlacementPriorities    pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties4 pBasic     = new BasicOverposterLayerPropertiesClass();

            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPlacementPriorities = pPlacement;
            pBasic.LineLabelPosition            = pPosition;
            pBasic.BufferRatio     = 0;
            pBasic.FeatureWeight   = esriBasicOverposterWeight.esriHighWeight;
            pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart;
            //pBasic.PlaceOnlyInsidePolygon = true;//仅在地物内部显示标注  deleted by chulili s20111018 界面上并没有这项设置,这句话应注释掉,否则像是错误

            ILabelEngineLayerProperties pLabelEngine = null;

            pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;
            pLabelEngine.Expression = "[" + StrDisplayField + "]";
            ITextSymbol pTextSymbol = null;

            pTextSymbol = pLabelEngine.Symbol;
            System.Drawing.Font pFont = null;
            pFont = LabelText.Font;
            IFontDisp pFontDisp = ESRI.ArcGIS.ADF.Converter.ToStdFont(pFont);

            pTextSymbol.Font = pFontDisp;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red          = Convert.ToInt32(LabelText.ForeColor.R);
            pColor.Green        = Convert.ToInt32(LabelText.ForeColor.G);
            pColor.Blue         = Convert.ToInt32(LabelText.ForeColor.B);
            pTextSymbol.Color   = pColor as IColor;
            pLabelEngine.Symbol = pTextSymbol;

            IAnnotateLayerProperties pAnnoLayerProps = null;

            pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            pAnnoProps.Clear();

            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLayer.DisplayAnnotation = true;
            pMapControl.ActiveView.Refresh();
        }
Ejemplo n.º 2
0
 internal AnnotateLayerPropertiesWrap(IAnnotateLayerProperties iannotateLayerProperties_1, int int_1,
                                      bool bool_2)
 {
     this.iannotateLayerProperties_0 = iannotateLayerProperties_1;
     this.bool_0 = bool_2;
     this.int_0  = int_1;
 }
Ejemplo n.º 3
0
 public AnnotateLayerPropertiesWrap(IAnnotateLayerProperties iannotateLayerProperties_1, int int_1,
                                    bool bool_1)
 {
     this.iannotateLayerProperties_0 = iannotateLayerProperties_1;
     this.int_0  = int_1;
     this.bool_0 = bool_1;
 }
Ejemplo n.º 4
0
 public AnnotationClass(IFeatureLayer pFeatureLayer)
 {
     if (pFeatureLayer != null)
     {
         if (pFeatureLayer is IGeoFeatureLayer)
         {
             IGeoFeatureLayer objGFL = pFeatureLayer as IGeoFeatureLayer;
             IAnnotateLayerPropertiesCollection annoPropsColl = objGFL.AnnotationProperties;
             if (objGFL.DisplayAnnotation && annoPropsColl.Count > 0)
             {
                 IAnnotateLayerProperties             annoLayerProps = null;
                 ESRI.ArcGIS.Carto.IElementCollection null_ESRIArcGISCartoIElementCollection  = null;
                 ESRI.ArcGIS.Carto.IElementCollection null_ESRIArcGISCartoIElementCollection2 = null;
                 annoPropsColl.QueryItem(0, out annoLayerProps, out null_ESRIArcGISCartoIElementCollection, out null_ESRIArcGISCartoIElementCollection2);
                 if (annoLayerProps is ILabelEngineLayerProperties && annoLayerProps.DisplayAnnotation)
                 {
                     ILabelEngineLayerProperties labelProps = annoLayerProps as ILabelEngineLayerProperties;
                     if (annoLayerProps.WhereClause == "" && labelProps.IsExpressionSimple)
                     {
                         IsSingleProperty = true;
                         PropertyName     = labelProps.Expression.Replace("[", "").Replace("]", "");
                         TextSymbol       = new TextSymbolClass(labelProps.Symbol as ISymbol);
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
        public static void SetLayerInfoFromXml(IGeoFeatureLayer pGeaFeatureLayer)
        {
            IAnnotateLayerPropertiesCollection pAnnoLayerProperCol = pGeaFeatureLayer.AnnotationProperties;

            pAnnoLayerProperCol.Clear();

            ILabelEngineLayerProperties pLabelEngineLayerPro = new LabelEngineLayerPropertiesClass();
            IAnnotateLayerProperties    pAnnoLayerProperties = pLabelEngineLayerPro as IAnnotateLayerProperties;

            //从图层节点的XML中读取标注设置(会覆盖上面语句的设置结果)
            try
            {
                XmlNode nodeLayerXml = GetSelectNodeXml(pGeaFeatureLayer);
                if (nodeLayerXml != null)
                {
                    ReadLabelConfigFromXML(ref pAnnoLayerProperties, nodeLayerXml, pGeaFeatureLayer.FeatureClass.ShapeType.ToString());
                }
                pAnnoLayerProperCol.Add(pAnnoLayerProperties);

                //shduan 20110623 添加
                pGeaFeatureLayer.DisplayAnnotation = true;
            }
            catch
            {
            }
        }
Ejemplo n.º 6
0
        private void LabelHighWay(ILayer pLayer)
        {
            IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer;

            if (pGeoFeatureLayer != null)
            {
                IAnnotateLayerPropertiesCollection panAnnotateLayerPropertiesCollection =
                    pGeoFeatureLayer.AnnotationProperties;
                panAnnotateLayerPropertiesCollection.Clear();


                IRgbColor pColor = new RgbColor();
                pColor.Red   = 0;
                pColor.Blue  = 0;
                pColor.Green = 0;
                IFormattedTextSymbol pTextSymbol = new TextSymbol();
                //ITextSymbol pTextSymbol = new TextSymbol();
                pTextSymbol.Background = CreateBalloonCallout() as ITextBackground;
                pTextSymbol.Color      = pColor;
                pTextSymbol.Size       = 10;
                pTextSymbol.Direction  = esriTextDirection.esriTDHorizontal;
                Font font = new System.Drawing.Font("宋体", 10);
                pTextSymbol.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(font) as stdole.IFontDisp;
                IBasicOverposterLayerProperties properties = new BasicOverposterLayerProperties();
                IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

                switch (pFeatureLayer.FeatureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPolygon:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    break;

                case esriGeometryType.esriGeometryPoint:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    break;
                }
                ILabelEngineLayerProperties2 properties2 =
                    new LabelEngineLayerProperties() as ILabelEngineLayerProperties2;
                if (properties2 != null)
                {
                    properties2.Expression = "[LXDM]";
                    properties2.Symbol     = pTextSymbol;
                    properties2.BasicOverposterLayerProperties = properties;

                    IAnnotateLayerProperties p = properties2 as IAnnotateLayerProperties;
//                    p.AnnotationMaximumScale = maxScale;
//                    p.AnnotationMinimumScale = minScale;
                    panAnnotateLayerPropertiesCollection.Add(p);
                }
            }
            if (pGeoFeatureLayer != null)
            {
                pGeoFeatureLayer.DisplayAnnotation = true;
            }
            _mxDocument.ActivatedView.Refresh();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Annotate Layer
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="labelField"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091111</date>
        public static void AnnotateLayer(ILayer layer, string labelField)
        {
            IFeatureLayer    feaLayer    = layer as IFeatureLayer;
            IGeoFeatureLayer geoFeaLayer = layer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection pAnnoProps = geoFeaLayer.AnnotationProperties;

            pAnnoProps.Clear();

            ITextSymbol pTextSyl = new TextSymbolClass();
            Font        fnt      = new System.Drawing.Font("宋体", 10f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

            pTextSyl.Size = 10;
            //pTextSyl.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(fnt) as stdole.IFontDisp;
            pTextSyl.Color = Town.ArcGIS.Color.ToEsriColor(System.Drawing.Color.Black);

            IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();

            if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
            {
                ILineLabelPosition            pPosition      = new LineLabelPositionClass();
                ILineLabelPlacementPriorities pPlacementLine = new LineLabelPlacementPrioritiesClass();

                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                pBasic.LineLabelPlacementPriorities = pPlacementLine;
                pBasic.LineLabelPosition            = pPosition;
            }
            else if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
            {
                IPointPlacementPriorities pPlacementPoint = new PointPlacementPrioritiesClass();
                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                pBasic.PointPlacementPriorities = pPlacementPoint;
                pBasic.PointPlacementOnTop      = false;
                pBasic.PointPlacementMethod     = esriOverposterPointPlacementMethod.esriAroundPoint;
            }
            else if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
            {
                ILineLabelPosition            pPosition      = new LineLabelPositionClass();
                ILineLabelPlacementPriorities pPlacementLine = new LineLabelPlacementPrioritiesClass();

                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                pBasic.LineLabelPlacementPriorities = pPlacementLine;
                pBasic.LineLabelPosition            = pPosition;
            }

            pBasic.LabelWeight   = esriBasicOverposterWeight.esriHighWeight;
            pBasic.FeatureWeight = esriBasicOverposterWeight.esriNoWeight;

            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol = pTextSyl;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;
            pLabelEngine.Expression = "[" + labelField + "]";

            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

            pAnnoProps.Add(pAnnoLayerProps);
            geoFeaLayer.DisplayAnnotation = true;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 标注图层
        /// </summary>
        /// <param name="pLayer">需要标注的图层</param>
        /// <param name="fontSize">字体大小</param>
        /// <param name="labelField">标注字段</param>
        /// <param name="minScale">显示标注的最小比例尺</param>
        /// <param name="maxScale">显示标注的最大比例尺</param>
        /// 注意:一问最后两个参数是比例尺的分母,所有minScale的值应该比maxSacle的值大
        private void LabelLayer(ILayer pLayer, int fontSize, string labelField, double minScale, double maxScale)
        {
            IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer;

            if (pGeoFeatureLayer != null)
            {
                IAnnotateLayerPropertiesCollection panAnnotateLayerPropertiesCollection =
                    pGeoFeatureLayer.AnnotationProperties;
                panAnnotateLayerPropertiesCollection.Clear();
                IRgbColor pColor = new RgbColor();
                pColor.Red   = 0;
                pColor.Blue  = 0;
                pColor.Green = 0;
                ITextSymbol pTextSymbol = new TextSymbol();
                pTextSymbol.Color = pColor;
                pTextSymbol.Size  = fontSize;
                Font font = new System.Drawing.Font("宋体", fontSize);
                pTextSymbol.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(font) as stdole.IFontDisp;
                IBasicOverposterLayerProperties properties = new BasicOverposterLayerProperties();
                IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

                switch (pFeatureLayer.FeatureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPolygon:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    break;

                case esriGeometryType.esriGeometryPoint:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    break;
                }
                ILabelEngineLayerProperties2 properties2 =
                    new LabelEngineLayerProperties() as ILabelEngineLayerProperties2;
                if (properties2 != null)
                {
                    properties2.Expression = "[" + labelField + "]";
                    properties2.Symbol     = pTextSymbol;
                    properties2.BasicOverposterLayerProperties = properties;

                    IAnnotateLayerProperties p = properties2 as IAnnotateLayerProperties;
                    p.AnnotationMaximumScale = maxScale;
                    p.AnnotationMinimumScale = minScale;
                    panAnnotateLayerPropertiesCollection.Add(p);
                }
            }

            if (pGeoFeatureLayer != null)
            {
                pGeoFeatureLayer.DisplayAnnotation = true;
            }
            _mxDocument.ActiveView.Refresh();
        }
Ejemplo n.º 9
0
        private void btnLabel_Click(object sender, RoutedEventArgs e)
        {
            //The FeatureLayer for labelling


            IFeatureLayer    labelLayer  = this.m_map.Map.get_Layer(0) as IFeatureLayer;
            IGeoFeatureLayer gLabelLayer = labelLayer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annoPropCol = gLabelLayer.AnnotationProperties;

            annoPropCol.Clear();
            //ITextSymbol uasage
            ITextSymbol pTextSyl = new TextSymbol();
            //Font fnt = new System.Drawing.Font("宋体", 10f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
            //using stdole
            IFontDisp font = new StdFont() as IFontDisp;

            font.Size   = 20;
            font.Italic = true;
            // pTextSyl.Size = 20;
            pTextSyl.Font = font;
            //IRgbColor fromColor = new RgbColor(255,0, 0);
            //ESRI.ArcGIS.Display.RgbColorClass()
            RgbColor color = new RgbColor();

            color.Red      = 255;
            color.Green    = 0;
            color.Blue     = 0;
            pTextSyl.Color = color;
            //Position
            IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerProperties();

            //   if (labelLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
            //   {
            IPointPlacementPriorities pPlacementPoint = new PointPlacementPriorities();

            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
            pBasic.PointPlacementPriorities = pPlacementPoint;
            pBasic.PointPlacementOnTop      = false;
            pBasic.PointPlacementMethod     = esriOverposterPointPlacementMethod.esriOnTopPoint;// esriAroundPoint;
            //      }

            //Point a field as a label
            ILabelEngineLayerProperties labelField = new LabelEngineLayerProperties() as ILabelEngineLayerProperties;

            labelField.Expression = "[name]";
            //set postion
            labelField.BasicOverposterLayerProperties = pBasic;
            //set  symbol
            labelField.Symbol = pTextSyl;
            IAnnotateLayerProperties annoProp = labelField as IAnnotateLayerProperties;

            annoPropCol.Add(annoProp);
            gLabelLayer.DisplayAnnotation = true;
            m_map.Refresh();
        }
Ejemplo n.º 10
0
        private void mnuAnnotation_Click(object sender, EventArgs e)
        {
            IGraphicsContainer pGraphicsContainer = MainMap.Map as IGraphicsContainer;
            ILayer             pLayer             = MainMap.get_Layer(0);
            IGeoFeatureLayer   pGeoFeatureLayer   = pLayer as IGeoFeatureLayer;

            // 清空当前图层标注集合
            IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatureLayer.AnnotationProperties;

            pAnnoProps.Clear();

            // 建立标注文本符号
            stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
            pFont.Name = "宋体";
            pFont.Size = 9;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red   = 250;
            pColor.Blue  = 10;
            pColor.Green = 50;

            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Font  = pFont;
            pTextSymbol.Color = pColor as IColor;

            // 设置标注位置
            ILineLabelPosition pPosition = new LineLabelPositionClass();

            pPosition.Parallel      = false;
            pPosition.Perpendicular = false;

            ILineLabelPlacementPriorities   pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties pBasic     = new BasicOverposterLayerProperties();

            pBasic.FeatureType       = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPosition = pPosition;

            // 新建一个图层标注引擎对象
            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol = pTextSymbol;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;
            pLabelEngine.IsExpressionSimple             = true;
            pLabelEngine.Expression = "[ADCODE93]";
            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatureLayer.DisplayAnnotation = true;

            MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }
Ejemplo n.º 11
0
        private void ShowLabel()
        {
            if (labelOn)
            {
                if (!this.cbxActiveMap.HasItems || !this.cbxFeatureLayer.HasItems || !this.cbxField.HasItems)
                {
                    return;
                }
                if (annoPropCol != null)
                {
                    annoPropCol.Clear();
                }
                labelLayer  = this.m_map.Map.get_Layer(this.cbxFeatureLayer.SelectedIndex) as IFeatureLayer;
                gLabelLayer = labelLayer as IGeoFeatureLayer;
                annoPropCol = gLabelLayer.AnnotationProperties;

                ITextSymbol pTextSyl = new TextSymbol();
                IFontDisp   font     = new StdFont() as IFontDisp;
                font.Size     = 20;
                font.Italic   = true;
                pTextSyl.Font = font;
                RgbColor color = new RgbColor();
                color.Red      = LabelColor.R;
                color.Green    = LabelColor.G;
                color.Blue     = LabelColor.B;
                pTextSyl.Color = color;

                IBasicOverposterLayerProperties pBasic          = new BasicOverposterLayerProperties();
                IPointPlacementPriorities       pPlacementPoint = new PointPlacementPriorities();
                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                pBasic.PointPlacementPriorities = pPlacementPoint;
                pBasic.PointPlacementOnTop      = false;
                pBasic.PointPlacementMethod     = esriOverposterPointPlacementMethod.esriOnTopPoint;

                ILabelEngineLayerProperties labelField = new LabelEngineLayerProperties() as ILabelEngineLayerProperties;

                //IFeatureClass fClass = ((IFeatureLayer)labelLayer).FeatureClass;
                //IFields fields = fClass.Fields;
                //String fieldName = fields.get_Field(this.cbxField.SelectedIndex).Name;

                string fieldName = (string)cbxField.SelectedItem;
                //Console.WriteLine(fields.FindField(fieldName));
                labelField.Expression = "[" + fieldName + "]";
                //set postion
                labelField.BasicOverposterLayerProperties = pBasic;
                //set  symbol
                labelField.Symbol = pTextSyl;
                IAnnotateLayerProperties annoProp = labelField as IAnnotateLayerProperties;
                annoPropCol.Add(annoProp);
                gLabelLayer.DisplayAnnotation = true;
                m_map.Refresh();
            }
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 设置标注大小
        /// </summary>
        /// <param name="geoLayer">要设置标注的图层(IFeatureLayer as IGeoFeatureLayer)</param>
        /// <param name="size">标注的大小</param>
        public static void SetLabelSize(this IGeoFeatureLayer geoLayer, int size)
        {
            IAnnotateLayerPropertiesCollection annotateLyrProColl = geoLayer.AnnotationProperties;
            IAnnotateLayerProperties           annoPros           = null;
            IElementCollection placeElements   = null;
            IElementCollection unplaceElements = null;

            for (int i = 0; i < annotateLyrProColl.Count; i++)
            {
                annotateLyrProColl.QueryItem(i, out annoPros, out placeElements, out unplaceElements);
                if (annoPros is ILabelEngineLayerProperties labelEngine)
                {
                    labelEngine.Symbol.Size = size;
                    break;
                }
            }
        }
Ejemplo n.º 13
0
        protected override void OnClick()
        {
            IMap             map             = ArcMap.Document.ActiveView as IMap;
            IGeoFeatureLayer geoFeatureLayer = map.get_Layer(0) as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annotateLayerPropertiesCollection = geoFeatureLayer.AnnotationProperties;

            LabelEngineLayerProperties labelEngineLayerProperties = new LabelEngineLayerProperties();
            IAnnotateLayerProperties   annotateLayerProperties    = labelEngineLayerProperties as IAnnotateLayerProperties;

            IElementCollection placedElements   = new ElementCollection();
            IElementCollection unplacedElements = new ElementCollection();

            annotateLayerPropertiesCollection.QueryItem(1, out annotateLayerProperties, out placedElements, out unplacedElements); // 0 = default, 1 = 1st Class

            string className = annotateLayerProperties.Class;

            System.Diagnostics.Debug.WriteLine("Class Name: " + className);

            ArcMap.Application.CurrentTool = null;
        }
Ejemplo n.º 14
0
        private void method_1(TreeNode treeNode_0)
        {
            IAnnotateLayerPropertiesCollection2 annoLayerPropertiesColn =
                (treeNode_0.Tag as GeoFeatureLayerWrap).AnnoLayerPropertiesColn as IAnnotateLayerPropertiesCollection2;

            for (int i = 0; i < treeNode_0.Nodes.Count; i++)
            {
                TreeNode node = treeNode_0.Nodes[i];
                IAnnotateLayerProperties annoLayerProperty = (node.Tag as AnnotateLayerPropertiesWrap).AnnoLayerProperty;
                annoLayerProperty.DisplayAnnotation = node.Checked;
                if ((node.Tag as AnnotateLayerPropertiesWrap).IsNew)
                {
                    annoLayerPropertiesColn.Add(annoLayerProperty);
                }
                else
                {
                    annoLayerPropertiesColn.Replace((node.Tag as AnnotateLayerPropertiesWrap).ID, annoLayerProperty);
                }
            }
            (treeNode_0.Tag as GeoFeatureLayerWrap).GeoFeatureLayer.DisplayAnnotation = treeNode_0.Checked;
        }
Ejemplo n.º 15
0
        private void Annotation()
        {
            string           fieldname    = cbxField.SelectedItem.ToString();
            IFeatureLayer    featureLayer = getlayerbyname(cbxLayer.SelectedItem.ToString());
            IGeoFeatureLayer pGeoFeatLyr  = featureLayer as IGeoFeatureLayer;

            stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
            pFont.Name = comboBox2.SelectedItem.ToString();
            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Size = Convert.ToInt16(comboBox3.SelectedItem.ToString());
            pTextSymbol.Font = pFont;
            if (pRGB.NullColor)
            {
                pRGB.Red   = 255;
                pRGB.Blue  = 0;
                pRGB.Green = 0;
            }
            pTextSymbol.Color = pRGB;
            IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatLyr.AnnotationProperties;

            pAnnoProps.Clear();
            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol     = pTextSymbol;
            pLabelEngine.Expression = "[" + fieldname + "]";
            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

            pAnnoLayerProps.DisplayAnnotation  = true;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLyr.DisplayField      = fieldname;
            pGeoFeatLyr.DisplayAnnotation = true;
            IActiveView pActiveView = pMap as IActiveView;

            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }
Ejemplo n.º 16
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);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 从图层对应节点的XML中读取当前层的标注设置
        /// </summary>
        /// <param name="pAnnoLayerProper"></param>
        public static void ReadLabelConfigFromXML(ref IAnnotateLayerProperties pAnnoLayerProper, XmlNode nodeLayerXml, string pFeatureType)
        {
            //设置标注的相关信息             ;
            ILabelEngineLayerProperties pLabelEngineLayerProperties = null;

            if (pAnnoLayerProper == null)
            {
                pLabelEngineLayerProperties = new LabelEngineLayerProperties() as ILabelEngineLayerProperties;
                pAnnoLayerProper            = pLabelEngineLayerProperties as IAnnotateLayerProperties;
            }
            else
            {
                pLabelEngineLayerProperties = pAnnoLayerProper as ILabelEngineLayerProperties;
            }

            IAnnotationExpressionEngine pAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();

            pLabelEngineLayerProperties.ExpressionParser = pAnnoVBScriptEngine;

            IBasicOverposterLayerProperties4 pBasicOverposterLayerProperties = pLabelEngineLayerProperties.BasicOverposterLayerProperties as IBasicOverposterLayerProperties4;

            switch (pFeatureType)
            {
            case "esriGeometryPoint":
                pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                break;

            case "esriGeometryPolyline":
                pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                break;

            case "esriGeometryPolygon":
                pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                break;
            }

            ITextSymbol pTextSymbol = pLabelEngineLayerProperties.Symbol;
            IFontDisp   pFont       = pTextSymbol.Font;

            foreach (XmlNode nd in nodeLayerXml)
            {
                if (nd.Name == "AttrLabel")
                {
                    //读取共同的标注设置信息
                    pFont.Name = nd.Attributes["FontName"].Value;
                    pFont.Size = Convert.ToDecimal(nd.Attributes["FontSize"].Value.ToLower());
                    if (nd.Attributes["FontBold"].Value != "")
                    {
                        pFont.Bold = Convert.ToBoolean(nd.Attributes["FontBold"].Value.ToLower());
                    }
                    if (nd.Attributes["FontItalic"].Value != "")
                    {
                        pFont.Italic = Convert.ToBoolean(nd.Attributes["FontItalic"].Value.ToLower());
                    }
                    if (nd.Attributes["FontUnderLine"].Value != "")
                    {
                        pFont.Underline = Convert.ToBoolean(nd.Attributes["FontUnderLine"].Value.ToLower());
                    }
                    pTextSymbol.Font = pFont;
                    IColor pColor = new RgbColorClass();
                    if (nd.Attributes["FontBoldColor"].Value != "")
                    {
                        pColor.RGB = Convert.ToInt32(nd.Attributes["FontBoldColor"].Value);
                    }
                    else
                    {
                        pColor.RGB = 36054566;
                        //pColor.Green = 0;
                        //pColor.Blue = 0;
                        pTextSymbol.Color = pColor as IColor;
                    }
                    pTextSymbol.Color = pColor;


                    if (nd.Attributes["Expression"].Value != "")
                    {
                        pLabelEngineLayerProperties.Expression = "[" + nd.Attributes["Expression"].Value + "]";
                    }

                    if (nd.Attributes["MaxScale"].Value != "" && nd.Attributes["MaxScale"].Value != null)
                    {
                        pAnnoLayerProper.AnnotationMaximumScale = Convert.ToDouble(nd.Attributes["MaxScale"].Value);
                    }
                    if (nd.Attributes["MinScale"].Value != "" && nd.Attributes["MinScale"].Value != null)
                    {
                        pAnnoLayerProper.AnnotationMinimumScale = Convert.ToDouble(nd.Attributes["MinScale"].Value);
                    }

                    if (nd.Attributes["NumLabelsOption"].Value == "esriOneLabelPerName")
                    {
                        pBasicOverposterLayerProperties.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerName;
                    }
                    else if (nd.Attributes["NumLabelsOption"].Value == "esriOneLabelPerPart")
                    {
                        pBasicOverposterLayerProperties.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart;
                    }
                    else if (nd.Attributes["NumLabelsOption"].Value == "esriOneLabelPerShape")
                    {
                        pBasicOverposterLayerProperties.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
                    }
                    //下面按不同要素类型读取不同的标注设置信息
                    //点要素
                    if (pBasicOverposterLayerProperties.FeatureType == esriBasicOverposterFeatureType.esriOverposterPoint)
                    {
                        pBasicOverposterLayerProperties.PointPlacementOnTop = Convert.ToBoolean(nd.Attributes["PointPlacementOnTop"].Value.ToLower());
                        if (nd.Attributes["PointPlacementMethod"].Value == "esriAroundPoint")
                        {
                            pBasicOverposterLayerProperties.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;

                            IPointPlacementPriorities pPointPlacementPriorities = pBasicOverposterLayerProperties.PointPlacementPriorities;
                            string strPlacement;
                            try
                            {
                                //读取标注位置的设置
                                strPlacement = nd.Attributes["PointPlacementPriorities"].Value;
                                SetPlacementPriotities(pPointPlacementPriorities, strPlacement);
                                pBasicOverposterLayerProperties.PointPlacementPriorities = pPointPlacementPriorities;
                            }
                            catch
                            {
                                //MessageBox.Show("该图层XML中不存在PointPlacementPriorities属性!");
                            }
                        }
                        else if (nd.Attributes["PointPlacementMethod"].Value == "esriOnTopPoint")
                        {
                            pBasicOverposterLayerProperties.PointPlacementMethod = esriOverposterPointPlacementMethod.esriOnTopPoint;
                        }
                        else if (nd.Attributes["PointPlacementMethod"].Value == "esriSpecifiedAngles")
                        {
                            double[] dArray = new double[1];
                            string   sAngle = nd.Attributes["PointPlacementAngles"].Value;
                            if (sAngle.Contains(",") == false)
                            {
                                dArray[0] = Convert.ToDouble(sAngle);
                            }
                            else
                            {
                                string[] sAngles = sAngle.Split(new char[] { ',' });
                                dArray = new double[sAngles.Length];
                                for (int i = 0; i < sAngles.Length; i++)
                                {
                                    dArray[i] = Convert.ToDouble(sAngles[i]);
                                }
                            }
                            pBasicOverposterLayerProperties.PointPlacementAngles = dArray;
                        }
                        else if (nd.Attributes["PointPlacementMethod"].Value == "esriRotationField")
                        {
                            pBasicOverposterLayerProperties.PointPlacementMethod = esriOverposterPointPlacementMethod.esriRotationField;
                            pBasicOverposterLayerProperties.RotationField        = nd.Attributes["RotationField"].Value;
                            if (nd.Attributes["RotationType"].Value == "esriRotateLabelArithmetic")
                            {
                                pBasicOverposterLayerProperties.RotationType = esriLabelRotationType.esriRotateLabelArithmetic;
                            }
                            else if (nd.Attributes["RotationType"].Value == "esriRotateLabelGeographic")
                            {
                                pBasicOverposterLayerProperties.RotationType = esriLabelRotationType.esriRotateLabelGeographic;
                            }

                            pBasicOverposterLayerProperties.PerpendicularToAngle = Convert.ToBoolean(nd.Attributes["PerpendicularToAngle"].Value);
                        }
                    }
                    //线要素
                    else if (pBasicOverposterLayerProperties.FeatureType == esriBasicOverposterFeatureType.esriOverposterPolyline)
                    {
                        ILineLabelPosition pLineLabelPosition = pBasicOverposterLayerProperties.LineLabelPosition;
                        if (nd.Attributes["Above"] != null)
                        {
                            pLineLabelPosition.Above = Convert.ToBoolean(nd.Attributes["Above"].Value);
                        }
                        if (nd.Attributes["AtEnd"] != null)
                        {
                            pLineLabelPosition.AtEnd = Convert.ToBoolean(nd.Attributes["AtEnd"].Value);
                        }
                        if (nd.Attributes["AtStart"] != null)
                        {
                            pLineLabelPosition.AtStart = Convert.ToBoolean(nd.Attributes["AtStart"].Value);
                        }
                        if (nd.Attributes["Below"] != null)
                        {
                            pLineLabelPosition.Below = Convert.ToBoolean(nd.Attributes["Below"].Value);
                        }
                        if (nd.Attributes["Horizontal"] != null)
                        {
                            pLineLabelPosition.Horizontal = Convert.ToBoolean(nd.Attributes["Horizontal"].Value);
                        }
                        if (nd.Attributes["InLine"] != null)
                        {
                            pLineLabelPosition.InLine = Convert.ToBoolean(nd.Attributes["InLine"].Value);
                        }
                        if (nd.Attributes["Left"] != null)
                        {
                            pLineLabelPosition.Left = Convert.ToBoolean(nd.Attributes["Left"].Value);
                        }
                        if (nd.Attributes["Offset"] != null)
                        {
                            pLineLabelPosition.Offset = Convert.ToDouble(nd.Attributes["Offset"].Value);
                        }
                        if (nd.Attributes["OnTop"] != null)
                        {
                            pLineLabelPosition.OnTop = Convert.ToBoolean(nd.Attributes["OnTop"].Value);
                        }
                        if (nd.Attributes["Parallel"] != null)
                        {
                            pLineLabelPosition.Parallel = Convert.ToBoolean(nd.Attributes["Parallel"].Value);
                        }
                        if (nd.Attributes["Perpendicular"] != null)
                        {
                            pLineLabelPosition.Perpendicular = Convert.ToBoolean(nd.Attributes["Perpendicular"].Value);
                        }
                        if (nd.Attributes["ProduceCurvedLabels"] != null)
                        {
                            pLineLabelPosition.ProduceCurvedLabels = Convert.ToBoolean(nd.Attributes["ProduceCurvedLabels"].Value);
                        }
                        if (nd.Attributes["Right"] != null)
                        {
                            pLineLabelPosition.Right = Convert.ToBoolean(nd.Attributes["Right"].Value);
                        }
                    }
                    //面要素
                    else if (pBasicOverposterLayerProperties.FeatureType == esriBasicOverposterFeatureType.esriOverposterPolygon)
                    {
                        if (nd.Attributes["PolygonPlacementMethod"].Value == "esriAlwaysHorizontal")
                        {
                            pBasicOverposterLayerProperties.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                        }
                        else if (nd.Attributes["PolygonPlacementMethod"].Value == "esriAlwaysStraight")
                        {
                            pBasicOverposterLayerProperties.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysStraight;
                        }
                        else if (nd.Attributes["PolygonPlacementMethod"].Value == "esriMixedStrategy")
                        {
                            pBasicOverposterLayerProperties.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriMixedStrategy;
                        }

                        pBasicOverposterLayerProperties.PlaceOnlyInsidePolygon = Convert.ToBoolean(nd.Attributes["PlaceOnlyInsidePolygon"].Value);
                    }
                }
            }
        }
Ejemplo n.º 18
0
        private void AddLabel(string StrDisplayField)
        {
            pGeoFeatLayer.DisplayAnnotation = false;
            pMapControl.ActiveView.Refresh();

            pGeoFeatLayer.DisplayField = StrDisplayField;

            IAnnotateLayerPropertiesCollection pAnnoProps = null;

            pAnnoProps = pGeoFeatLayer.AnnotationProperties;

            ILineLabelPosition pPosition = null;

            pPosition          = new LineLabelPositionClass();
            pPosition.Parallel = true;
            pPosition.Above    = true;

            ILineLabelPlacementPriorities    pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties4 pBasic     = new BasicOverposterLayerPropertiesClass();

            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPlacementPriorities = pPlacement;
            pBasic.LineLabelPosition            = pPosition;
            pBasic.BufferRatio   = 0;
            pBasic.FeatureWeight = esriBasicOverposterWeight.esriHighWeight;
            if (this.rdbPerName.Checked)
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerName;  //每个名称标注一次
            }
            else if (this.rdbPerPart.Checked)
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart;  //每个部分标注一次
            }
            else
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;  //每个地物标注一次
            }
            //pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriNoLabelRestrictions ;
            //pBasic.PlaceOnlyInsidePolygon = true;  //仅在地物内部显示标注  deleted by chulili s20111018 界面上并没有这项设置,这句话应注释掉,否则像是错误

            ILabelEngineLayerProperties pLabelEngine = null;

            pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;
            pLabelEngine.Expression = "[" + StrDisplayField + "]";
            ITextSymbol pTextSymbol = null;

            pTextSymbol = pLabelEngine.Symbol;
            System.Drawing.Font pFont = null;
            pFont = LabelText.Font;
            IFontDisp pFontDisp = ESRI.ArcGIS.ADF.Converter.ToStdFont(pFont);

            pTextSymbol.Font = pFontDisp;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red          = Convert.ToInt32(LabelText.ForeColor.R);
            pColor.Green        = Convert.ToInt32(LabelText.ForeColor.G);
            pColor.Blue         = Convert.ToInt32(LabelText.ForeColor.B);
            pTextSymbol.Color   = pColor as IColor;
            pLabelEngine.Symbol = pTextSymbol;

            IAnnotateLayerProperties pAnnoLayerProps = null;

            pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            //最大\最小比例尺
            try
            {
                if (this.txtMaxLabelScale.Text.Trim() != "")
                {
                    pAnnoLayerProps.AnnotationMaximumScale = Convert.ToDouble(this.txtMaxLabelScale.Text);
                }
                if (this.txtMinLabelScale.Text.Trim() != "")
                {
                    pAnnoLayerProps.AnnotationMinimumScale = Convert.ToDouble(this.txtMinLabelScale.Text);
                }
            }
            catch (Exception err)
            {}
            pAnnoProps.Clear();

            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLayer.DisplayAnnotation = this.chkIsLabel.Checked;
            (pMapControl.Map as IActiveView).Refresh();
        }
Ejemplo n.º 19
0
        /// <summary>
        /// 对生成的各图层进行符号、标注设置
        /// </summary>
        /// <param name="impfilepath">导入符号mxd文件路径</param>
        /// <param name="passpoint">生成的点图层</param>
        /// <param name="passline">生成的线图层</param>
        public void ImpSymbolFromFile(string impfilepath, ILayer passpoint, ILayer passline)
        {
            IMapDocument pMapDocument = new MapDocumentClass();

            pMapDocument.Open(impfilepath, null);
            IMap pMap = pMapDocument.Map[0];

            for (int i = 0; i < pMap.LayerCount; i++)
            {
                ILayer pLayerSymbol = pMap.get_Layer(i);
                if (pLayerSymbol is IFeatureLayer && pLayerSymbol.Name.Contains("point"))
                {
                    IFeatureLayer    pFLayerSymbol   = pLayerSymbol as IFeatureLayer;
                    IGeoFeatureLayer pGFLayerSymbol  = pFLayerSymbol as IGeoFeatureLayer;
                    IFeatureLayer    pFPasspointWait = passpoint as IFeatureLayer;
                    IGeoFeatureLayer pGPasspointWait = pFPasspointWait as IGeoFeatureLayer;
                    if (pGFLayerSymbol != null)
                    {
                        pGPasspointWait.Renderer = pGFLayerSymbol.Renderer;

                        IAnnotateLayerProperties pAnnoLayerP; // = new LabelEngineLayerPropertiesClass();//渲染图层的符号图层标注
                        IElementCollection       PELECOLL;    //queryitem的参数,用不到
                        IElementCollection       pelecoll;    //同上
                        pGFLayerSymbol.AnnotationProperties.QueryItem(0, out pAnnoLayerP, out PELECOLL, out pelecoll);
                        ILabelEngineLayerProperties pLabelEenLayPro = pAnnoLayerP as ILabelEngineLayerProperties;


                        IFontDisp   pFont       = new StdFontClass() as IFontDisp;
                        ITextSymbol pTextSymbol = new TextSymbolClass();
                        pTextSymbol.Color   = pLabelEenLayPro.Symbol.Color;
                        pFont.Bold          = pLabelEenLayPro.Symbol.Font.Bold;
                        pFont.Italic        = pLabelEenLayPro.Symbol.Font.Italic;
                        pFont.Strikethrough = pLabelEenLayPro.Symbol.Font.Strikethrough;
                        pFont.Underline     = pLabelEenLayPro.Symbol.Font.Underline;
                        pFont.Name          = pLabelEenLayPro.Symbol.Font.Name;
                        pFont.Size          = pLabelEenLayPro.Symbol.Font.Size;
                        pTextSymbol.Font    = pFont;

                        pGPasspointWait.AnnotationProperties.Clear();
                        ILabelEngineLayerProperties pLabelWaitLayPro = new LabelEngineLayerPropertiesClass();//设置待渲染图层的标注
                        pLabelWaitLayPro.Expression = pLabelEenLayPro.Expression;
                        pLabelWaitLayPro.Symbol     = pTextSymbol;

                        IAnnotateLayerProperties pAnnLayProWait = pLabelWaitLayPro as IAnnotateLayerProperties;//新生成的符号图层设置标注
                        pAnnLayProWait.DisplayAnnotation  = true;
                        pAnnLayProWait.FeatureLayer       = pGPasspointWait;
                        pAnnLayProWait.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                        pAnnLayProWait.WhereClause        = "";
                        pGPasspointWait.AnnotationProperties.Add(pAnnLayProWait);
                        pGPasspointWait.DisplayAnnotation = true;
                    }
                }
                else if (pLayerSymbol is IFeatureLayer && pLayerSymbol.Name.Contains("line"))
                {
                    IFeatureLayer    pFLayerSymbol   = pLayerSymbol as IFeatureLayer;
                    IGeoFeatureLayer pGFLayerSymbol  = pFLayerSymbol as IGeoFeatureLayer;
                    IFeatureLayer    pFPasspointWait = passline as IFeatureLayer;
                    IGeoFeatureLayer pGPasspointWait = pFPasspointWait as IGeoFeatureLayer;
                    if (pGFLayerSymbol != null)
                    {
                        pGPasspointWait.Renderer = pGFLayerSymbol.Renderer;

                        IAnnotateLayerProperties pAnnoLayerP = new LabelEngineLayerPropertiesClass(); //符号图层标注
                        IElementCollection       PELECOLL;                                            //queryitem的参数,用不到
                        IElementCollection       pelecoll;                                            //同上
                        pGFLayerSymbol.AnnotationProperties.QueryItem(0, out pAnnoLayerP, out PELECOLL, out pelecoll);
                        ILabelEngineLayerProperties pLabelEenLayPro = pAnnoLayerP as ILabelEngineLayerProperties;

                        IFontDisp   pFont       = new StdFontClass() as IFontDisp;
                        ITextSymbol pTextSymbol = new TextSymbolClass();
                        pTextSymbol.Color   = pLabelEenLayPro.Symbol.Color;
                        pFont.Bold          = pLabelEenLayPro.Symbol.Font.Bold;
                        pFont.Italic        = pLabelEenLayPro.Symbol.Font.Italic;
                        pFont.Strikethrough = pLabelEenLayPro.Symbol.Font.Strikethrough;
                        pFont.Underline     = pLabelEenLayPro.Symbol.Font.Underline;
                        pFont.Name          = pLabelEenLayPro.Symbol.Font.Name;
                        pFont.Size          = pLabelEenLayPro.Symbol.Font.Size;
                        pTextSymbol.Font    = pFont;

                        pGPasspointWait.AnnotationProperties.Clear();
                        ILabelEngineLayerProperties pLabelWaitLayPro = new LabelEngineLayerPropertiesClass();//设置待渲染图层的标注
                        pLabelWaitLayPro.Expression = pLabelEenLayPro.Expression;
                        pLabelWaitLayPro.Symbol     = pTextSymbol;

                        IAnnotateLayerProperties pAnnLayProWait = pLabelWaitLayPro as IAnnotateLayerProperties;//新生成的符号图层设置标注
                        pAnnLayProWait.DisplayAnnotation  = true;
                        pAnnLayProWait.FeatureLayer       = pGPasspointWait;
                        pAnnLayProWait.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                        pAnnLayProWait.WhereClause        = "";
                        pGPasspointWait.AnnotationProperties.Add(pAnnLayProWait);
                        pGPasspointWait.DisplayAnnotation = true;
                    }
                }
            }
            m_pTOCCtl.SetBuddyControl(m_pMapCtl);
            m_pTOCCtl.ActiveView.Refresh();
            m_pMapCtl.ActiveView.Refresh();
        }
Ejemplo n.º 20
0
        /// <summary>
        /// 初始化form element
        /// </summary>
        private void Initialize()
        {
            IFeatureLayer           featureLayer    = (IFeatureLayer)m_layer;
            IGeoFeatureLayer        geoLayer        = (IGeoFeatureLayer)m_layer;
            IFeatureClass           featureClass    = featureLayer.FeatureClass;
            ILayerGeneralProperties layerProperties = (ILayerGeneralProperties)featureLayer;

            // 图层属性页
            this.textBoxLayerName.Text        = m_layer.Name;
            this.textBoxLayerDescription.Text = layerProperties.LayerDescription;
            this.checkBoxVisibility.Checked   = m_layer.Visible;

            String scaleMin = geoLayer.MinimumScale.ToString();
            String sacleMax = geoLayer.MaximumScale.ToString();

            if ("0" == scaleMin && "0" == sacleMax)
            {
                this.radioButtonScaleAll.Checked  = true;
                this.radioButtonScaleZoom.Checked = false;
            }
            else
            {
                this.radioButtonScaleAll.Checked  = false;
                this.radioButtonScaleZoom.Checked = true;
                this.comboBoxScaleMax.Text        = sacleMax;
                this.comboBoxScaleMin.Text        = scaleMin;
            }

            // 字段定义页
            IFields fields     = featureClass.Fields;
            int     fieldCount = fields.FieldCount;

            for (int i = 0; i < fieldCount; i++)
            {
                IField       field = fields.get_Field(i);
                ListViewItem item  = new ListViewItem(field.Name);
                item.SubItems.Add(field.AliasName);
                item.SubItems.Add(field.Editable ? "允许编辑" : "不允许编辑");
                item.SubItems.Add(field.IsNullable ? "允许为空" : "不允许为空");
                item.SubItems.Add(field.Length.ToString());
                item.SubItems.Add(field.Precision.ToString());
                item.SubItems.Add(field.Scale.ToString());
                item.SubItems.Add(GetFieldType(field.Type));
                listViewFields.Items.Add(item);
            }

            // 数据源及四至范围
            IEnvelope envelope = m_layer.AreaOfInterest;

            textBoxLeft.Text   = envelope.XMin.ToString();
            textBoxRight.Text  = envelope.XMax.ToString();
            textBoxTop.Text    = envelope.YMin.ToString();
            textBoxBottom.Text = envelope.YMax.ToString();

            IDataset dataset = (IDataset)featureLayer;

            textBoxDataSource.AppendText("数据源类型:           ");
            textBoxDataSource.AppendText(featureLayer.DataSourceType);
            textBoxDataSource.AppendText("\r\n数据集:               ");
            textBoxDataSource.AppendText(dataset.BrowseName);
            textBoxDataSource.AppendText("\r\n数据源名称:           ");
            textBoxDataSource.AppendText(dataset.Workspace.PathName);

            textBoxDataSource.AppendText("\r\n要素类:               ");
            textBoxDataSource.AppendText(featureClass.AliasName);
            textBoxDataSource.AppendText("\r\n要素类类型:           ");
            textBoxDataSource.AppendText(GetFeatureType(featureClass.FeatureType));
            textBoxDataSource.AppendText("\r\n几何类型:             ");
            textBoxDataSource.AppendText(GetGeometryType(featureClass.ShapeType));

            IGeoDataset geoDataset = (IGeoDataset)featureClass;
            // 通过IGeoDataset接口获取FeatureClass坐标系统
            ISpatialReference          spatialReference   = geoDataset.SpatialReference;
            IProjectedCoordinateSystem projectCoordSystem = null;

            if (spatialReference is IProjectedCoordinateSystem)
            {
                projectCoordSystem = (IProjectedCoordinateSystem)spatialReference;

                if (projectCoordSystem == null)
                {
                    return;
                }

                textBoxDataSource.AppendText("\r\n");

                IProjection project = projectCoordSystem.Projection;
                textBoxDataSource.AppendText("\r\n投影坐标系:           ");
                textBoxDataSource.AppendText(projectCoordSystem.Name);
                textBoxDataSource.AppendText("\r\n投影:                 ");
                textBoxDataSource.AppendText(project.Name);
                textBoxDataSource.AppendText("\r\nFalseEasting:         ");
                textBoxDataSource.AppendText(projectCoordSystem.FalseEasting.ToString());
                textBoxDataSource.AppendText("\r\nFalseNorthing:        ");
                textBoxDataSource.AppendText(projectCoordSystem.FalseNorthing.ToString());
                textBoxDataSource.AppendText("\r\n中央经线:             ");
                textBoxDataSource.AppendText(projectCoordSystem.get_CentralMeridian(true).ToString());
                textBoxDataSource.AppendText("\r\n缩放比例:             ");
                textBoxDataSource.AppendText(projectCoordSystem.ScaleFactor.ToString());
                textBoxDataSource.AppendText("\r\n高度原点:             ");
                try
                {
                    textBoxDataSource.AppendText(projectCoordSystem.LongitudeOfOrigin.ToString());
                }
                catch (Exception e)
                {
                    textBoxDataSource.AppendText("0");
                }

                textBoxDataSource.AppendText("\r\n单位:                 ");
                textBoxDataSource.AppendText(projectCoordSystem.CoordinateUnit.Name);

                textBoxDataSource.AppendText("\r\n");

                IGeographicCoordinateSystem geographCoordinateSystem = projectCoordSystem.GeographicCoordinateSystem;
                if (geographCoordinateSystem != null)
                {
                    textBoxDataSource.AppendText("\r\n地理坐标系:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Name);
                    textBoxDataSource.AppendText("\r\n基准面:               ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Datum.Name);
                    textBoxDataSource.AppendText("\r\n本初子午线:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.PrimeMeridian.Name);
                    textBoxDataSource.AppendText("\r\n单位:                 ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.CoordinateUnit.Name);
                }
            }
            else if (spatialReference is IGeographicCoordinateSystem)
            {
                IGeographicCoordinateSystem geographCoordinateSystem = spatialReference as IGeographicCoordinateSystem;
                if (geographCoordinateSystem != null)
                {
                    textBoxDataSource.AppendText("\r\n地理坐标系:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Name);
                    textBoxDataSource.AppendText("\r\n基准面:               ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.Datum.Name);
                    textBoxDataSource.AppendText("\r\n本初子午线:           ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.PrimeMeridian.Name);
                    textBoxDataSource.AppendText("\r\n单位:                 ");
                    textBoxDataSource.AppendText(geographCoordinateSystem.CoordinateUnit.Name);
                }
            }



            // filter

            IDisplayString displayString = (IDisplayString)featureLayer;

            textBoxFilter.AppendText(displayString.ExpressionProperties.Expression);

            // 标注
            IAnnotateLayerPropertiesCollection annoLayerPropsColl = geoLayer.AnnotationProperties;
            IAnnotateLayerProperties           annoLayerProps     = null;
            IElementCollection placedElements   = null;
            IElementCollection unplacedElements = null;

            annoLayerPropsColl.QueryItem(0, out annoLayerProps, out placedElements, out unplacedElements);
            ILabelEngineLayerProperties aLELayerProps = annoLayerProps as ILabelEngineLayerProperties;

            // annoLayerProps.DisplayAnnotation;
            checkBoxLabelVisibility.Checked = annoLayerProps.DisplayAnnotation;

            //初始化字体大小下拉框
            for (int k = 5; k <= 11; k++)
            {
                cmbFontSize.Items.Add(k);
            }
            for (int k = 12; k <= 72; k = k + 2)
            {
                cmbFontSize.Items.Add(k);
            }
            // cmbFontSize.Text = "8";

            //初始化字体下拉框
            foreach (FontFamily onefontfamily in FontFamily.Families)
            {
                //去掉名称头个字为@的字体
                if (onefontfamily.Name.Substring(0, 1) != "@")
                {
                    cmbFontName.Items.Add(onefontfamily.Name);
                }
            }
            // cmbFontName.Text = "宋体";
            ITextSymbol pTextSymbol = aLELayerProps.Symbol;

            stdole.IFontDisp pFontDisp = pTextSymbol.Font;
            cmbFontSize.Text = pFontDisp.Size.ToString();
            toolBarStyle.Buttons[0].Pushed = pFontDisp.Bold;
            toolBarStyle.Buttons[1].Pushed = pFontDisp.Italic;
            toolBarStyle.Buttons[2].Pushed = pFontDisp.Underline;
            cmbFontName.Text = pFontDisp.Name;
            IRgbColor rgbColor = (IRgbColor)pTextSymbol.Color;

            colorButtonFont.Color = Color.FromArgb(rgbColor.Transparency,
                                                   rgbColor.Red,
                                                   rgbColor.Green,
                                                   rgbColor.Blue);
            colorButtonFont.Refresh();
            for (int i = 0; i < fields.FieldCount; i++)
            {
                IField field = fields.get_Field(i);
                cmbFieldName.Items.Add(field.Name);
            }

            cmbFieldName.Enabled = aLELayerProps.IsExpressionSimple;
            String expr = aLELayerProps.Expression.Trim('[').Trim(']');

            cmbFieldName.SelectedIndex = cmbFieldName.FindString(expr);

            cmbMaxScale.Text = annoLayerProps.AnnotationMaximumScale.ToString();
            cmbMinScale.Text = annoLayerProps.AnnotationMinimumScale.ToString();

            if (cmbMaxScale.Text == "0" && cmbMinScale.Text == "0")
            {
                rbScaleWithLayer.Checked    = true;
                this.rbScaleDefined.Checked = false;
            }
            else
            {
                rbScaleWithLayer.Checked    = false;
                this.rbScaleDefined.Checked = true;
            }

            //ITextSymbol pTextSymbol = aLELayerProps.Symbol;
            //stdole.IFontDisp pFontDisp = pTextSymbol.Font;
            //pFontDisp.Size = decimal.Parse(fontSize);
            //pFontDisp.Bold = boldBool;
            //pFontDisp.Italic = italicBool;
            //pFontDisp.Name = fontStyle;
            //IRgbColor pRgbColor = new RgbColorClass();
            //pRgbColor.Red = int.Parse(fontColor.R.ToString());
            //pRgbColor.Blue = int.Parse(fontColor.B.ToString());
            //pRgbColor.Green = int.Parse(fontColor.G.ToString());
            //pTextSymbol.Font = pFontDisp;
            //pTextSymbol.Color = pRgbColor;
            //aLELayerProps.Symbol = pTextSymbol;
            //annoLayerProps = aLELayerProps as IAnnotateLayerProperties;
            //annoLayerProps.FeatureLayer = geoLayer;
            //annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            //annoLayerPropsColl.Add(annoLayerProps);

            // 符号
            checkBoxCostomSymbol.Checked = EPSUtils.IsLayerRenderer(featureLayer);
        }
Ejemplo n.º 21
0
        public IFeatureClass CreateStandardAnnotationClass(
            IFeatureWorkspace featureWorkspace,
            IFeatureDataset featureDataset,
            String className,
            ISpatialReference spatialReference,
            double referenceScale,
            esriUnits referenceScaleUnits,
            String configKeyword
            )
        {
            // Create an annotation class and provide it with a name.
            ILabelEngineLayerProperties labelEngineLayerProperties = new
                                                                     LabelEngineLayerPropertiesClass();
            IAnnotateLayerProperties annotateLayerProperties = (IAnnotateLayerProperties)
                                                               labelEngineLayerProperties;

            annotateLayerProperties.Class = className;

            // Get the symbol from the annotation class. Make any changes to its properties
            // here.
            ITextSymbol annotationTextSymbol = labelEngineLayerProperties.Symbol;
            ISymbol     annotationSymbol     = (ISymbol)annotationTextSymbol;

            // Create a symbol collection and add the default symbol from the
            // annotation class to the collection. Assign the resulting symbol ID
            // to the annotation class.
            ISymbolCollection  symbolCollection  = new SymbolCollectionClass();
            ISymbolCollection2 symbolCollection2 = (ISymbolCollection2)symbolCollection;
            ISymbolIdentifier2 symbolIdentifier2 = null;

            symbolCollection2.AddSymbol(annotationSymbol, className, out symbolIdentifier2);
            labelEngineLayerProperties.SymbolID = symbolIdentifier2.ID;

            // Add the annotation class to a collection.
            IAnnotateLayerPropertiesCollection annotateLayerPropsCollection = new
                                                                              AnnotateLayerPropertiesCollectionClass();

            annotateLayerPropsCollection.Add(annotateLayerProperties);

            // Create a graphics layer scale object.
            IGraphicsLayerScale graphicsLayerScale = new GraphicsLayerScaleClass();

            graphicsLayerScale.ReferenceScale = referenceScale;
            graphicsLayerScale.Units          = referenceScaleUnits;

            // Create the overposter properties for the standard label engine.
            IOverposterProperties overposterProperties = new BasicOverposterPropertiesClass()
            ;

            // Instantiate a class description object.
            //IObjectClassDescription ocDescription = new
            //    AnnotationFeatureClassDescriptionClass();
            //IFeatureClassDescription fcDescription = (IFeatureClassDescription)ocDescription;

            //// Get the shape field from the class description's required fields.
            //IFields requiredFields = ocDescription.RequiredFields;
            //int shapeFieldIndex = requiredFields.FindField(fcDescription.ShapeFieldName);
            //IField shapeField = requiredFields.get_Field(shapeFieldIndex);
            IFeatureLayer    layer           = (IFeatureLayer)mLayer;
            IFields          fields          = layer.FeatureClass.Fields;
            IField           shapeField      = fields.Field[fields.FindField(mField)];
            IGeometryDef     geometryDef     = shapeField.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            geometryDefEdit.SpatialReference_2 = spatialReference;

            // Create the annotation layer factory.
            IAnnotationLayerFactory annotationLayerFactory = new
                                                             FDOGraphicsLayerFactoryClass();

            // Create the annotation feature class and an annotation layer for it.
            IAnnotationLayer annotationLayer = annotationLayerFactory.CreateAnnotationLayer
                                                   (featureWorkspace, featureDataset, className, geometryDef, null,
                                                   annotateLayerPropsCollection, graphicsLayerScale, symbolCollection, false,
                                                   false, false, true, overposterProperties, configKeyword);

            // Get the feature class from the feature layer.
            IFeatureLayer featureLayer = (IFeatureLayer)annotationLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;

            return(featureClass);
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Adds the layer lable.
        /// </summary>
        /// <param name="pMap">The p map.</param>
        /// <param name="layer">The layer.</param>
        /// <param name="fieldName">Name of the field.</param>
        /// <param name="pTextSymbol">The p text symbol.</param>
        /// <param name="dRefScale">The d reference scale.</param>
        public static void AddLayerLable(IMap pMap, ILayer layer, string fieldName, ITextSymbol pTextSymbol, double dRefScale)
        {
            IGeoFeatureLayer geoFeatureLayer = layer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annotationProperties = geoFeatureLayer.AnnotationProperties;

            annotationProperties.Clear();
            ILineLabelPosition lineLabelPosition = new LineLabelPositionClass
            {
                Parallel      = false,
                Perpendicular = false,
                InLine        = true,
                OnTop         = true,
                Above         = false,
                Horizontal    = true
            };
            LineLabelPlacementPrioritiesClass lineLabelPlacementPrioritiesClass = new LineLabelPlacementPrioritiesClass();

            lineLabelPlacementPrioritiesClass.AboveStart = 5;
            lineLabelPlacementPrioritiesClass.BelowAfter = 4;
            IBasicOverposterLayerProperties basicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass
            {
                LineLabelPosition = lineLabelPosition
            };
            ILabelEngineLayerProperties labelEngineLayerProperties;

            if (pMap.AnnotationEngine.Name.Equals("Esri Maplex Label Engine", System.StringComparison.CurrentCultureIgnoreCase))
            {
                labelEngineLayerProperties = new MaplexLabelEngineLayerPropertiesClass();
                IMaplexOverposterLayerProperties maplexOverposterLayerProperties = new MaplexOverposterLayerPropertiesClass();
                IFeatureLayer featureLayer = layer as IFeatureLayer;
                switch (featureLayer.FeatureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPoint:
                    maplexOverposterLayerProperties.FeatureType          = esriBasicOverposterFeatureType.esriOverposterPoint;
                    maplexOverposterLayerProperties.PointPlacementMethod = esriMaplexPointPlacementMethod.esriMaplexAroundPoint;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    maplexOverposterLayerProperties.FeatureType         = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    maplexOverposterLayerProperties.LinePlacementMethod = esriMaplexLinePlacementMethod.esriMaplexCenteredStraightOnLine;
                    break;

                case esriGeometryType.esriGeometryPolygon:
                    maplexOverposterLayerProperties.FeatureType            = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    maplexOverposterLayerProperties.PolygonPlacementMethod = esriMaplexPolygonPlacementMethod.esriMaplexHorizontalInPolygon;
                    break;
                }
                maplexOverposterLayerProperties.CanRemoveOverlappingLabel = false;
                maplexOverposterLayerProperties.RepeatLabel = false;
                (labelEngineLayerProperties as ILabelEngineLayerProperties2).OverposterLayerProperties = (maplexOverposterLayerProperties as IOverposterLayerProperties);
                IMapOverposter              mapOverposter              = pMap as IMapOverposter;
                IOverposterProperties       overposterProperties       = mapOverposter.OverposterProperties;
                IMaplexOverposterProperties maplexOverposterProperties = overposterProperties as IMaplexOverposterProperties;
                maplexOverposterProperties.LabelLargestPolygon = false;
            }
            else
            {
                labelEngineLayerProperties = new LabelEngineLayerPropertiesClass();
                labelEngineLayerProperties.BasicOverposterLayerProperties = basicOverposterLayerProperties;
            }
            labelEngineLayerProperties.Symbol             = pTextSymbol;
            labelEngineLayerProperties.IsExpressionSimple = true;
            labelEngineLayerProperties.Expression         = "[" + fieldName + "]";
            IAnnotateLayerProperties item = labelEngineLayerProperties as IAnnotateLayerProperties;

            if (dRefScale != -1.0)
            {
                IAnnotateLayerTransformationProperties annotateLayerTransformationProperties = labelEngineLayerProperties as IAnnotateLayerTransformationProperties;
                annotateLayerTransformationProperties.ReferenceScale = dRefScale;
            }
            annotationProperties.Add(item);
            geoFeatureLayer.DisplayAnnotation = true;
        }
Ejemplo n.º 23
0
        //把当前层的标注设置保存成xml节点
        private XmlElement WriteLabelInfoToXML(IAnnotateLayerProperties pAnnoLayerProper)
        {
            XmlDocument xml = new XmlDocument();
            XmlElement  pElement;

            //标注的属性
            ILabelEngineLayerProperties pLabelEngineLayerProper;
            //标注的位置相关属性
            IBasicOverposterLayerProperties4 pBasicOverposterLayerProper;
            ILineLabelPosition pLinePosition;
            //标注的字体
            ITextSymbol pTextSymbol;
            IFontDisp   pFont;
            int         i;

            double[] dArray;
            string   sAngle = string.Empty;

            pElement = xml.CreateElement("LABEL");

            pLabelEngineLayerProper     = (ILabelEngineLayerProperties)pAnnoLayerProper;
            pBasicOverposterLayerProper = (IBasicOverposterLayerProperties4)pLabelEngineLayerProper.BasicOverposterLayerProperties;
            pTextSymbol = pLabelEngineLayerProper.Symbol;
            pFont       = pTextSymbol.Font;

            //记录字体
            pElement.SetAttribute(Strings.UCase("FontName"), pFont.Name);
            pElement.SetAttribute(Strings.UCase("FontSize"), pFont.Size.ToString());
            pElement.SetAttribute(Strings.UCase("FontItalic"), pFont.Italic.ToString());
            pElement.SetAttribute(Strings.UCase("FontUnderline"), pFont.Underline.ToString());
            pElement.SetAttribute(Strings.UCase("FontBold"), pFont.Bold.ToString());

            //记录颜色信息
            pElement.SetAttribute(Strings.UCase("Color"), pTextSymbol.Color.RGB.ToString());

            //记录表达式信息
            pElement.SetAttribute(Strings.UCase("Expression"), pLabelEngineLayerProper.Expression.ToString());

            //记录显示比例尺信息
            pElement.SetAttribute(Strings.UCase("MaximumScale"), pAnnoLayerProper.AnnotationMaximumScale.ToString());
            pElement.SetAttribute(Strings.UCase("MinimumScale"), pAnnoLayerProper.AnnotationMinimumScale.ToString());

            //标注与要素类对应关系的信息
            if (pBasicOverposterLayerProper.NumLabelsOption == esriBasicNumLabelsOption.esriOneLabelPerName)
            {
                pElement.SetAttribute(Strings.UCase("NumLabelsOption"), "esriOneLabelPerName");
            }
            else if (pBasicOverposterLayerProper.NumLabelsOption == esriBasicNumLabelsOption.esriOneLabelPerPart)
            {
                pElement.SetAttribute(Strings.UCase("NumLabelsOption"), "esriOneLabelPerPart");
            }
            else
            {
                pElement.SetAttribute(Strings.UCase("NumLabelsOption"), "esriOneLabelPerShape");
            }

            //下面分要素类开始记录不同的信息
            //记录点类型图层的信息
            if (pBasicOverposterLayerProper.FeatureType == esriBasicOverposterFeatureType.esriOverposterPoint)
            {
                pElement.SetAttribute(Strings.UCase("FeatType"), "esriOverposterPoint");

                if (pBasicOverposterLayerProper.PointPlacementMethod == esriOverposterPointPlacementMethod.esriAroundPoint)
                {
                    pElement.SetAttribute(Strings.UCase("PointPlacementMethod"), "esriAroundPoint");
                    pElement.SetAttribute(Strings.UCase("PointPlacementOnTop"), pBasicOverposterLayerProper.PointPlacementOnTop.ToString());
                }
                else if (pBasicOverposterLayerProper.PointPlacementMethod == esriOverposterPointPlacementMethod.esriOnTopPoint)
                {
                    pElement.SetAttribute(Strings.UCase("PointPlacementMethod"), "esriOnTopPoint");
                    pElement.SetAttribute(Strings.UCase("PointPlacementOnTop"), pBasicOverposterLayerProper.PointPlacementOnTop.ToString());
                }
                //某个字段决定旋转角度
                else if (pBasicOverposterLayerProper.PointPlacementMethod == esriOverposterPointPlacementMethod.esriRotationField)
                {
                    pElement.SetAttribute(Strings.UCase("PointPlacementMethod"), "esriRotationField");
                    pElement.SetAttribute(Strings.UCase("RotationField"), pBasicOverposterLayerProper.RotationField);

                    //参照旋转坐标系
                    if (pBasicOverposterLayerProper.RotationType == esriLabelRotationType.esriRotateLabelArithmetic)
                    {
                        pElement.SetAttribute(Strings.UCase("RotationType"), "esriRotateLabelArithmetic");
                    }
                    else if (pBasicOverposterLayerProper.RotationType == esriLabelRotationType.esriRotateLabelGeographic)
                    {
                        pElement.SetAttribute(Strings.UCase("RotationType"), "esriRotateLabelGeographic");
                    }

                    //是否在原旋转基础上加90度
                    pElement.SetAttribute(Strings.UCase("PerpendicularToAngle"), pBasicOverposterLayerProper.PerpendicularToAngle.ToString());
                    pElement.SetAttribute(Strings.UCase("PointPlacementOnTop"), pBasicOverposterLayerProper.PointPlacementOnTop.ToString());
                }

                //特定的角度数组来决定旋转角度
                else if (pBasicOverposterLayerProper.PointPlacementMethod == esriOverposterPointPlacementMethod.esriSpecifiedAngles)
                {
                    pElement.SetAttribute(Strings.UCase("PointPlacementMethod"), "esriSpecifiedAngles");
                    dArray = (double[])pBasicOverposterLayerProper.PointPlacementAngles;

                    //最后一维默认的是零
                    for (i = 0; i <= dArray.Length - 1; i++)
                    {
                        if (i == 0)
                        {
                            sAngle = dArray[i].ToString();
                        }
                        else
                        {
                            sAngle = sAngle + "" + dArray[i];
                        }
                    }

                    pElement.SetAttribute(Strings.UCase("PointPlacementAngles"), sAngle);
                    pElement.SetAttribute(Strings.UCase("PointPlacementOnTop"), pBasicOverposterLayerProper.PointPlacementOnTop.ToString());
                }
            }

            //记录线类型要素类的标注的信息
            else if (pBasicOverposterLayerProper.FeatureType == esriBasicOverposterFeatureType.esriOverposterPolyline)
            {
                pElement.SetAttribute(Strings.UCase("FeatType"), "esriOverposterPolyline");
                pLinePosition = pBasicOverposterLayerProper.LineLabelPosition;

                //记录位置的所有信息
                if (pLinePosition != null)
                {
                    pElement.SetAttribute(Strings.UCase("Above"), pLinePosition.Above.ToString());
                    pElement.SetAttribute(Strings.UCase("AtEnd"), pLinePosition.AtEnd.ToString());
                    pElement.SetAttribute(Strings.UCase("AtStart"), pLinePosition.AtStart.ToString());
                    pElement.SetAttribute(Strings.UCase("Below"), pLinePosition.Below.ToString());
                    pElement.SetAttribute(Strings.UCase("Horizontal"), pLinePosition.Horizontal.ToString());
                    pElement.SetAttribute(Strings.UCase("InLine"), pLinePosition.InLine.ToString());
                    pElement.SetAttribute(Strings.UCase("Left"), pLinePosition.Left.ToString());
                    pElement.SetAttribute(Strings.UCase("Offset"), pLinePosition.Offset.ToString());
                    pElement.SetAttribute(Strings.UCase("OnTop"), pLinePosition.OnTop.ToString());
                    pElement.SetAttribute(Strings.UCase("Parallel"), pLinePosition.Parallel.ToString());
                    pElement.SetAttribute(Strings.UCase("Perpendicular"), pLinePosition.Perpendicular.ToString());
                    pElement.SetAttribute(Strings.UCase("ProduceCurvedLabels"), pLinePosition.ProduceCurvedLabels.ToString());
                    pElement.SetAttribute(Strings.UCase("Right"), pLinePosition.Right.ToString());
                }
            }

            else if (pBasicOverposterLayerProper.FeatureType == esriBasicOverposterFeatureType.esriOverposterPolygon)
            {
                pElement.SetAttribute(Strings.UCase("FeatType"), "esriOverposterPolygon");

                //方向信息
                if (pBasicOverposterLayerProper.PolygonPlacementMethod == esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal)
                {
                    pElement.SetAttribute(Strings.UCase("PolygonPlacementMethod"), "esriAlwaysHorizontal");
                }
                else if (pBasicOverposterLayerProper.PolygonPlacementMethod == esriOverposterPolygonPlacementMethod.esriAlwaysStraight)
                {
                    pElement.SetAttribute(Strings.UCase("PolygonPlacementMethod"), "esriAlwaysStraight");
                }
                else
                {
                    pElement.SetAttribute(Strings.UCase("PolygonPlacementMethod"), "esriMixedStrategy");
                }

                pElement.SetAttribute(Strings.UCase("PlaceOnlyInsidePolygon"), pBasicOverposterLayerProper.PlaceOnlyInsidePolygon.ToString());
            }
            return(pElement);
        }
Ejemplo n.º 24
0
        private void FrmLabelDesign_Load(object sender, EventArgs e)
        {
            IGeoFeatureLayer geoFeatureLayer              = (IGeoFeatureLayer)pLayer;
            IAnnotateLayerPropertiesCollection  pAnnColl  = geoFeatureLayer.AnnotationProperties;
            IAnnotateLayerPropertiesCollection2 pAnnColl2 = (IAnnotateLayerPropertiesCollection2)pAnnColl;
            IAnnotateLayerProperties            pAnnProp  = pAnnColl2.get_Properties(0);
            ILabelEngineLayerProperties         pLable    = (ILabelEngineLayerProperties)pAnnProp;
            IBasicOverposterLayerProperties4    pBasic    = (IBasicOverposterLayerProperties4)pLable.BasicOverposterLayerProperties;

            //IPointPlacementPriorities pPlace = pBasic.PointPlacementPriorities;

            chklabel.Checked = pAnnProp.DisplayAnnotation;
            ITable  pTable  = (ITable)pLayer;
            IFields pFields = pTable.Fields;

            for (int i = 0; i < pFields.FieldCount; i++)
            {
                if (pFields.Field[i].Name != "Shape")
                {
                    cmbfields.Items.Add(pFields.Field[i].Name);
                }
            }
            //if (chklabel.Checked)
            //{
            //    cmbfields.Text = pLable.Expression;
            //}
            //else
            //{
            //    cmbfields.SelectedIndex = 0;
            //}
            cmbfields.Text = pLable.Expression;

            InstalledFontCollection pFontCollection = new InstalledFontCollection();

            FontFamily[] pFontFamily = pFontCollection.Families;
            for (int i = 0; i < pFontFamily.Length; i++)
            {
                string pFontName = pFontFamily[i].Name;
                this.cmbfont.Items.Add(pFontName);
            }

            //标注方向
            ILineLabelPosition pLineLabelPosition = pBasic.LineLabelPosition;

            if (pLineLabelPosition != null)
            {
                if (pLineLabelPosition.Horizontal)  //水平
                {
                    radioBtnHorizontal.Checked    = true;
                    radioBtnParallel.Checked      = false;
                    radioBtnPerpendicular.Checked = false;
                }
                if (pLineLabelPosition.Perpendicular)//垂直
                {
                    radioBtnHorizontal.Checked    = false;
                    radioBtnParallel.Checked      = false;
                    radioBtnPerpendicular.Checked = true;
                }
                if (pLineLabelPosition.Parallel)//平行
                {
                    radioBtnHorizontal.Checked    = false;
                    radioBtnParallel.Checked      = true;
                    radioBtnPerpendicular.Checked = false;
                }
            }

            if (pLable.Symbol != null)
            {
                pTextSymbol = pLable.Symbol;
                stdole.IFontDisp pFont = pTextSymbol.Font;
                symbolcolor.SelectedColor = ClsGDBDataCommon.IColorToColor(pTextSymbol.Color);
                //cmbfont.Text = pTextSymbol.Font.Name;
                for (int i = 0; i < cmbfont.Items.Count; i++)
                {
                    if (cmbfont.Items[i].ToString() == pTextSymbol.Font.Name)
                    {
                        cmbfont.SelectedIndex = i;
                    }
                }
                cmbsize.Text = pTextSymbol.Size.ToString();
                if (pFont.Bold == true)
                {
                    toolBtnBold.Checked = true;
                }
                else
                {
                    toolBtnBold.Checked = false;
                }
                if (pFont.Italic == true)
                {
                    toolBtnIntend.Checked = true;
                }
                else
                {
                    toolBtnIntend.Checked = false;
                }
                if (pFont.Underline == true)
                {
                    toolBtnUnderline.Checked = true;
                }
                else
                {
                    toolBtnUnderline.Checked = false;
                }
                if (pFont.Strikethrough == true)
                {
                    toolBtnStrikethrough.Checked = true;
                }
                else
                {
                    toolBtnStrikethrough.Checked = false;
                }
            }
            else
            {
                symbolcolor.SelectedColor = Color.Black;
                cmbfont.SelectedIndex     = cmbfont.Items.Count - 9;
                cmbsize.Text                 = "8";
                toolBtnBold.Checked          = false;
                toolBtnIntend.Checked        = false;
                toolBtnUnderline.Checked     = false;
                toolBtnStrikethrough.Checked = false;
            }
        }
Ejemplo n.º 25
0
        /// <summary>
        /// 设置图层
        /// </summary>
        private void DoApply()
        {
            IFeatureLayer           featureLayer    = (IFeatureLayer)m_layer;
            IGeoFeatureLayer        geoLayer        = (IGeoFeatureLayer)m_layer;
            IFeatureClass           featureClass    = featureLayer.FeatureClass;
            ILayerGeneralProperties layerProperties = (ILayerGeneralProperties)featureLayer;

            // 图层属性页
            String tmp = this.textBoxLayerName.Text.Trim();

            if (!String.IsNullOrEmpty(tmp))
            {
                m_layer.Name = tmp;
            }
            tmp = layerProperties.LayerDescription.Trim();
            layerProperties.LayerDescription = tmp;
            m_layer.Visible = this.checkBoxVisibility.Checked;

            if (this.radioButtonScaleAll.Checked)
            {
                geoLayer.MaximumScale = 0;
                geoLayer.MinimumScale = 0;
            }
            else
            {
                tmp = this.comboBoxScaleMax.Text.Trim();
                double d = 0;
                if (Double.TryParse(tmp, out d))
                {
                    geoLayer.MaximumScale = d;
                }
                else
                {
                    geoLayer.MaximumScale = 0;
                }
                tmp = this.comboBoxScaleMin.Text.Trim();
                if (Double.TryParse(tmp, out d))
                {
                    geoLayer.MinimumScale = d;
                }
                else
                {
                    geoLayer.MinimumScale = 0;
                }
            }

            // 标注
            IAnnotateLayerPropertiesCollection annoLayerPropsColl = geoLayer.AnnotationProperties;
            IAnnotateLayerProperties           annoLayerProps     = null;
            IElementCollection placedElements   = null;
            IElementCollection unplacedElements = null;

            annoLayerPropsColl.QueryItem(0, out annoLayerProps, out placedElements, out unplacedElements);
            ILabelEngineLayerProperties aLELayerProps = annoLayerProps as ILabelEngineLayerProperties;

            annoLayerProps.DisplayAnnotation = checkBoxLabelVisibility.Checked;
            if (annoLayerProps.DisplayAnnotation)
            {
                // cmbFontName.Text = "宋体";
                ITextSymbol      textSymbol = aLELayerProps.Symbol;
                stdole.IFontDisp fontDisp   = textSymbol.Font;
                decimal          d          = 8;
                if (decimal.TryParse(cmbFontSize.Text, out d))
                {
                    fontDisp.Size = d;
                }

                fontDisp.Bold      = toolBarStyle.Buttons[0].Pushed;
                fontDisp.Italic    = toolBarStyle.Buttons[1].Pushed;
                fontDisp.Underline = toolBarStyle.Buttons[2].Pushed;
                fontDisp.Name      = cmbFontName.Text;
                IRgbColor rgbColor = new RgbColorClass();
                rgbColor.Transparency             = this.colorButtonFont.Color.A;
                rgbColor.Red                      = this.colorButtonFont.Color.R;
                rgbColor.Green                    = this.colorButtonFont.Color.G;
                rgbColor.Blue                     = this.colorButtonFont.Color.B;
                textSymbol.Color                  = rgbColor;
                textSymbol.Font                   = fontDisp;
                aLELayerProps.Symbol              = textSymbol;
                annoLayerProps                    = aLELayerProps as IAnnotateLayerProperties;
                annoLayerProps.FeatureLayer       = geoLayer;
                annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
                // annoLayerPropsColl.Add(annoLayerProps);

                if (cmbFieldName.SelectedIndex == -1)
                {
                    aLELayerProps.IsExpressionSimple = false;
                }
                else
                {
                    aLELayerProps.IsExpressionSimple = true;
                    String expr = "[" + cmbFieldName.Items[cmbFieldName.SelectedIndex] + "]";
                    aLELayerProps.Expression = expr;
                }

                if (this.rbScaleWithLayer.Checked)
                {
                    annoLayerProps.AnnotationMaximumScale = 0;
                    annoLayerProps.AnnotationMinimumScale = 0;
                }
                else
                {
                    double dTmp = 0;
                    if (double.TryParse(cmbMaxScale.Text, out dTmp))
                    {
                        annoLayerProps.AnnotationMaximumScale = dTmp;
                    }
                    dTmp = 0;
                    if (double.TryParse(cmbMinScale.Text, out dTmp))
                    {
                        annoLayerProps.AnnotationMinimumScale = dTmp;
                    }
                }


                //ITextSymbol pTextSymbol = aLELayerProps.Symbol;
                //stdole.IFontDisp pFontDisp = pTextSymbol.Font;
                //pFontDisp.Size = decimal.Parse(fontSize);
                //pFontDisp.Bold = boldBool;
                //pFontDisp.Italic = italicBool;
                //pFontDisp.Name = fontStyle;
                //IRgbColor pRgbColor = new RgbColorClass();
                //pRgbColor.Red = int.Parse(fontColor.R.ToString());
                //pRgbColor.Blue = int.Parse(fontColor.B.ToString());
                //pRgbColor.Green = int.Parse(fontColor.G.ToString());
                //pTextSymbol.Font = pFontDisp;
                //pTextSymbol.Color = pRgbColor;
                //aLELayerProps.Symbol = pTextSymbol;
                //annoLayerProps = aLELayerProps as IAnnotateLayerProperties;
                //annoLayerProps.FeatureLayer = geoLayer;
                //annoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
                //annoLayerPropsColl.Add(annoLayerProps);
            }

            // 符号
            EPSUtils.RendererFeatureLayer(featureLayer, checkBoxCostomSymbol.Checked);
            MapUtils.GetActiveView().Refresh();
        }
Ejemplo n.º 26
0
        public static void AddToMapVector(FileInfo sSource, string sDisplayName, IGroupLayer pGrpLyr, string displayField, IFeatureRenderer pRenderer, string queryFilter, string labelField, short fTransparency = -1)
        {
            if (string.IsNullOrEmpty(sDisplayName))
            {
                throw new ArgumentNullException("Display Name", "Null or empty display Name");
            }

            IFeatureLayer pResultLayer = IsFeatureLayerInGroupLayer(sSource.FullName, pGrpLyr);


            IFeatureWorkspace pWS = (IFeatureWorkspace)ArcMapUtilities.GetWorkspace(sSource);
            IFeatureClass     pFC = pWS.OpenFeatureClass(Path.GetFileNameWithoutExtension(sSource.FullName));

            pResultLayer = new FeatureLayer();
            pResultLayer.FeatureClass = pFC;
            if (fTransparency >= 0)
            {
                ILayerEffects pLayerEffects = (ILayerEffects)pResultLayer;
                pLayerEffects.Transparency = fTransparency;
            }

            if (!string.IsNullOrEmpty(sDisplayName))
            {
                pResultLayer.Name = sDisplayName;
            }

            IMapLayers pMapLayers = (IMapLayers)ArcMap.Document.FocusMap;

            if (pGrpLyr == null)
            {
                pMapLayers.InsertLayer(pResultLayer, true, 0);
            }
            else
            {
                pMapLayers.InsertLayerInGroup(pGrpLyr, pResultLayer, true, 0);
            }

            if (pRenderer != null)
            {
                ((IGeoFeatureLayer)pResultLayer).Renderer = pRenderer;
            }

            if (!string.IsNullOrEmpty(labelField))
            {
                IGeoFeatureLayer pGFL = pResultLayer as IGeoFeatureLayer;

                // This first attempt seems to set the label field, but doesn't
                // cause the labeling to refresh and take effect
                //IDisplayString displayString = pGFL as IDisplayString;
                //IDisplayExpressionProperties properties = displayString.ExpressionProperties;
                //properties.Expression = string.Format("[{0}]", labelField);

                // This second attempt takes more effort but actually works
                // https://community.esri.com/thread/19005
                IAnnotateLayerPropertiesCollection labelPropsCollection = pGFL.AnnotationProperties;
                labelPropsCollection.Clear();

                //IBasicOverposterLayerProperties pBOLayerProps = new BasicOverposterLayerProperties();
                //pBOLayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon
                //pBOLayerProps.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape
                //pBOLayerProps.FeatureWeight = esriBasicOverposterWeight.esriNoWeight
                //pBOLayerProps.LabelWeight = esriBasicOverposterWeight.esriLowWeight

                //Dim tSym As ITextSymbol
                //Set tSym = New TextSymbol
                //Dim font As IFontDisp
                //Set font = tSym.font
                //font.Bold = False
                //font.size = 6
                //tSym.font = font

                ILabelEngineLayerProperties aLELayerProps = (ILabelEngineLayerProperties) new LabelEngineLayerProperties();
                aLELayerProps.Expression = string.Format("[{0}]", labelField);

                //Set aLELayerProps.Symbol = tSym
                //Set aLELayerProps.BasicOverposterLayerProperties = pBOLayerProps
                IAnnotateLayerProperties lProps = aLELayerProps as IAnnotateLayerProperties;
                lProps.Class = "Any Name";
                labelPropsCollection.Add(lProps);

                pGFL.DisplayAnnotation = true;
            }

            if (pRenderer is IUniqueValueRenderer)
            {
                // If you didn't use a color ramp that was predefined in a style,
                // you need to use "Custom" here, otherwise use the name of the color ramp you chose.
                ((IGeoFeatureLayer)pResultLayer).DisplayField = displayField;

                // This makes the layer properties symbology tab show the correct interface
                IUID pUID = new UIDClass();
                pUID.Value = "{683C994E-A17B-11D1-8816-080009EC732A}";
                ((IGeoFeatureLayer)pResultLayer).RendererPropertyPageClassID = pUID as UIDClass;
            }

            if (!string.IsNullOrEmpty(queryFilter))
            {
                ((IFeatureLayerDefinition)pResultLayer).DefinitionExpression = queryFilter;
            }

            int refsLeft = 0;

            do
            {
                refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(pFC);
            }while (refsLeft > 0);

            do
            {
                refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(pResultLayer);
            }while (refsLeft > 0);

            ArcMap.Document.UpdateContents();
            ArcMap.Document.ActiveView.Refresh();
            ArcMap.Document.CurrentContentsView.Refresh(null);
        }
Ejemplo n.º 27
0
        private void ConvertAnnotation(IMap map, ILayer featureLayer, string annotationFeatureClassName, double scale,
                                       IWorkspace workspace, ILineLabelPosition lineLabelPosition,
                                       IPointPlacementPriorities pointPlacementPriorities,
                                       esriBasicOverposterWeight labelWeight, esriBasicOverposterWeight featureWeight, bool tagUnplaced,
                                       string fontName, double fontSize, IRgbColor rgbColor, string expression, bool featureLinked,
                                       esriLabelWhichFeatures labelWhichFeatures)
        {
            if (workspace.Type != esriWorkspaceType.esriFileSystemWorkspace && featureLayer is IGeoFeatureLayer)
            {
                IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer;
                IAnnotateLayerPropertiesCollection annotateLayerPropertiesCollectionClass =
                    geoFeatureLayer.AnnotationProperties;
                annotateLayerPropertiesCollectionClass.Clear();
                ILabelEngineLayerProperties     labelEngineLayerProperties     = new LabelEngineLayerPropertiesClass();
                IBasicOverposterLayerProperties basicOverposterLayerProperties =
                    new BasicOverposterLayerPropertiesClass();
                if (lineLabelPosition != null)
                {
                    basicOverposterLayerProperties.LineLabelPosition = lineLabelPosition;
                }
                else if (pointPlacementPriorities != null)
                {
                    basicOverposterLayerProperties.PointPlacementPriorities = pointPlacementPriorities;
                }
                basicOverposterLayerProperties.LabelWeight   = labelWeight;
                basicOverposterLayerProperties.FeatureWeight = featureWeight;

                IOverposterLayerProperties2 overposterLayerProperties2 =
                    basicOverposterLayerProperties as IOverposterLayerProperties2;
                overposterLayerProperties2.TagUnplaced = tagUnplaced;

                labelEngineLayerProperties.BasicOverposterLayerProperties = basicOverposterLayerProperties;
                stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
                pFont.Name = fontName;
                ITextSymbol pTextSymbol = new TextSymbolClass();
                pTextSymbol.Size  = fontSize;
                pTextSymbol.Font  = pFont;
                pTextSymbol.Color = rgbColor;
                labelEngineLayerProperties.Symbol     = pTextSymbol;
                labelEngineLayerProperties.Expression = expression;

                IAnnotateLayerProperties annotateLayerProperties =
                    labelEngineLayerProperties as IAnnotateLayerProperties;
                annotateLayerProperties.DisplayAnnotation = true;

                IAnnotationLayer annotationLayer =
                    CommonHelper.GetLayerByFeatureClassName(_context.FocusMap, annotationFeatureClassName) as
                    IAnnotationLayer;
                CommonHelper.SetReferenceScale(annotationLayer, scale);
                annotateLayerProperties.FeatureLayer      = geoFeatureLayer;
                annotateLayerProperties.GraphicsContainer = annotationLayer as IGraphicsContainer;
                annotateLayerProperties.AddUnplacedToGraphicsContainer = true;
                annotateLayerProperties.CreateUnplacedElements         = true;
                annotateLayerProperties.DisplayAnnotation  = true;
                annotateLayerProperties.FeatureLinked      = featureLinked;
                annotateLayerProperties.LabelWhichFeatures = labelWhichFeatures;
                annotateLayerProperties.UseOutput          = true;
                annotateLayerPropertiesCollectionClass.Add(annotateLayerProperties);

                annotateLayerPropertiesCollectionClass.Sort();
                IAnnotateMapProperties annotateMapPropertiesClass = new AnnotateMapPropertiesClass()
                {
                    AnnotateLayerPropertiesCollection = annotateLayerPropertiesCollectionClass
                };
                ITrackCancel          cancelTrackerClass   = new CancelTrackerClass();
                IAnnotateMap2         annotateMap2         = map.AnnotationEngine as IAnnotateMap2;
                IOverposterProperties overposterProperties = (map as IMapOverposter).OverposterProperties;
                annotateMap2.Label(overposterProperties, annotateMapPropertiesClass, map, cancelTrackerClass);
                map.AddLayer(annotationLayer as ILayer);
                geoFeatureLayer.DisplayAnnotation = false;
                map.ReferenceScale = scale;
                map.MapScale       = scale;
                IActiveView activeView = map as IActiveView;
                activeView.Refresh();
            }
        }
Ejemplo n.º 28
0
        private void btnuse_Click(object sender, EventArgs e)
        {
            try
            {
                IFontDisp pFont = new StdFontClass() as IFontDisp;
                pTextSymbol.Color   = ClsGDBDataCommon.ColorToIColor(symbolcolor.SelectedColor);
                pFont.Bold          = toolBtnBold.Checked;
                pFont.Italic        = toolBtnIntend.Checked;
                pFont.Strikethrough = toolBtnStrikethrough.Checked;
                pFont.Underline     = toolBtnUnderline.Checked;
                pFont.Name          = cmbfont.Text;
                pFont.Size          = decimal.Parse(cmbsize.Text);
                pTextSymbol.Font    = pFont;

                IGeoFeatureLayer pGeoLayer = (IGeoFeatureLayer)pLayer;
                pGeoLayer.AnnotationProperties.Clear();
                ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();
                pLabelEngine.Symbol = pTextSymbol;

                //pLabelEngine2.BasicOverposterLayerProperties = pBasicProperties as IBasicOverposterLayerProperties;

                if (cmbfields.Text.Contains("[") && cmbfields.Text.Contains("]"))
                {
                    pLabelEngine.Expression = cmbfields.Text;
                }
                else
                {
                    string Exptext = "[" + cmbfields.Text + "]";
                    pLabelEngine.Expression = Exptext;
                }

                IBasicOverposterLayerProperties4 pBasic = new BasicOverposterLayerPropertiesClass();
                //pBasic.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                if (chkOverLap.Checked)
                {
                    pBasic.GenerateUnplacedLabels = true;
                }
                if (pLayer is IFeatureLayer)
                {
                    IFeatureLayer featureLayer = pLayer as FeatureLayer;
                    if (featureLayer.FeatureClass == null)
                    {
                        return;
                    }

                    if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
                    {
                        IPointPlacementPriorities pPointPlace = new PointPlacementPrioritiesClass();
                        pBasic.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;
                        pBasic.PointPlacementOnTop  = radioCenterTop.Checked;

                        SetPointPlacementPriorities(pPointPlace);
                        pBasic.PointPlacementPriorities = pPointPlace;
                    }
                    else if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
                    {
                        //更改角度
                        //= new LineLabelPositionClass();
                        IClone             pSrcClone          = pBasic.LineLabelPosition as IClone;
                        IClone             pDstClone          = pSrcClone.Clone();
                        ILineLabelPosition pLineLabelPosition = pDstClone as ILineLabelPosition;
                        if (pLineLabelPosition != null)
                        {
                            if (radioBtnHorizontal.Checked)
                            {
                                pLineLabelPosition.Horizontal    = true;
                                pLineLabelPosition.Parallel      = false;
                                pLineLabelPosition.Perpendicular = false;
                            }

                            if (radioBtnPerpendicular.Checked)
                            {
                                pLineLabelPosition.Horizontal    = false;
                                pLineLabelPosition.Parallel      = false;
                                pLineLabelPosition.Perpendicular = true;
                            }

                            if (radioBtnParallel.Checked)
                            {
                                pLineLabelPosition.Horizontal    = false;
                                pLineLabelPosition.Parallel      = true;
                                pLineLabelPosition.Perpendicular = false;
                            }
                        }

                        pBasic.LineLabelPosition = pLineLabelPosition;
                        //pBasic.PerpendicularToAngle = true;
                    }
                    else if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                    {
                        pBasic.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                    }
                }

                //赋给labelEngine
                pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;


                IAnnotateLayerProperties pAnnoLayerP = (IAnnotateLayerProperties)pLabelEngine;
                pAnnoLayerP.DisplayAnnotation  = chklabel.Checked;
                pAnnoLayerP.FeatureLayer       = pGeoLayer;
                pAnnoLayerP.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                pAnnoLayerP.WhereClause        = "";

                pGeoLayer.AnnotationProperties.Add(pAnnoLayerP);
                pGeoLayer.DisplayAnnotation = chklabel.Checked;


                pMapControl.ActiveView.Refresh();
                //if (pTocControl.Buddy == pMapControl.Object)
                //{
                //    pTocControl.SetBuddyControl(pMapControl);
                //    pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //    pTocControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //}
                //else if (pTocControl.Buddy.Equals(pSceneControl.Object))
                //{
                //    pTocControl.SetBuddyControl(pSceneControl);
                //    IActiveView pActiveView = pSceneControl.Scene as IActiveView;
                //    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null);
                //    pTocControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //}
            }
            catch (System.Exception ex)
            {
            }
        }
Ejemplo n.º 29
0
        public void showAnnotationByScale()
        {
            IMap             pMap             = axMapControl.Map;
            IFeatureLayer    pFeaturelayer    = pMap.get_Layer(1) as IFeatureLayer;
            IGeoFeatureLayer pGeoFeatureLayer = pFeaturelayer as IGeoFeatureLayer;
            //创建标注集接口,可以对标注进行添加、删除、查询、排序等操作
            IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = new AnnotateLayerPropertiesCollectionClass();

            pAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties;
            pAnnotateLayerPropertiesCollection.Clear();
            //创建标注的颜色
            IRgbColor pRgbColor = new RgbColorClass();

            pRgbColor.Red   = 255;
            pRgbColor.Green = 0;
            pRgbColor.Blue  = 0;
            //创建标注的字体样式
            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Color     = pRgbColor;
            pTextSymbol.Size      = 12;
            pTextSymbol.Font.Name = "宋体";
            //定义 ILineLabelPosition接口,用来管理line features的标注属性,指定标注和线要素的位置关系
            ILineLabelPosition pLineLabelPosition = new LineLabelPositionClass();

            pLineLabelPosition.Parallel      = false;
            pLineLabelPosition.Perpendicular = true;
            pLineLabelPosition.InLine        = true;
            //定义 ILineLabelPlacementPriorities接口用来控制标注冲突
            ILineLabelPlacementPriorities pLineLabelPlacementPriorities = new LineLabelPlacementPrioritiesClass();

            pLineLabelPlacementPriorities.AboveStart = 5;
            pLineLabelPlacementPriorities.BelowAfter = 4;
            //定义 IBasicOverposterLayerProperties 接口实现 LineLabelPosition 和 LineLabelPlacementPriorities对象的控制
            IBasicOverposterLayerProperties pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass();

            pBasicOverposterLayerProperties.LineLabelPlacementPriorities = pLineLabelPlacementPriorities;
            pBasicOverposterLayerProperties.LineLabelPosition            = pLineLabelPosition;
            pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
            //创建标注对象
            ILabelEngineLayerProperties pLabelEngineLayerProperties = new LabelEngineLayerPropertiesClass();

            //设置标注符号
            pLabelEngineLayerProperties.Symbol = pTextSymbol;
            pLabelEngineLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProperties;
            //声明标注的Expression是否为Simple
            pLabelEngineLayerProperties.IsExpressionSimple = true;
            //设置标注字段
            pLabelEngineLayerProperties.Expression = "[DIQU]";
            //定义IAnnotateLayerTransformationProperties 接口用来控制feature layer的display of dynamic labels
            IAnnotateLayerTransformationProperties pAnnotateLayerTransformationProperties = pLabelEngineLayerProperties as IAnnotateLayerTransformationProperties;

            //设置标注参考比例尺
            pAnnotateLayerTransformationProperties.ReferenceScale = 500000;
            //定义IAnnotateLayerProperties接口,决定FeatureLayer动态标注信息
            IAnnotateLayerProperties pAnnotateLayerProperties = pLabelEngineLayerProperties as IAnnotateLayerProperties;

            //设置显示标注最大比例尺
            pAnnotateLayerProperties.AnnotationMaximumScale = 500000;
            //设置显示标注的最小比例
            pAnnotateLayerProperties.AnnotationMinimumScale = 25000000;
            //决定要标注的要素
            pAnnotateLayerProperties.WhereClause = "DIQU<>'宿州市'";
            //将创建好的标注对象添加到标注集对象中
            pAnnotateLayerPropertiesCollection.Add(pAnnotateLayerProperties);
            //声明标注是否显示
            pGeoFeatureLayer.DisplayAnnotation = true;
            //刷新视图
            this.axMapControl.Refresh();
        }
Ejemplo n.º 30
0
 public SymbolIdentifierWrap(IAnnotateLayerProperties iannotateLayerProperties_1,
                             ISymbolIdentifier2 isymbolIdentifier2_1)
 {
     this.iannotateLayerProperties_0 = iannotateLayerProperties_1;
     this.isymbolIdentifier2_0       = isymbolIdentifier2_1;
 }