private IFeatureClass method_2(IFeatureWorkspaceAnno ifeatureWorkspaceAnno_0, IFeatureDataset ifeatureDataset_0, IFeatureClass ifeatureClass_0, double double_1, esriUnits esriUnits_0, IAnnotateLayerPropertiesCollection iannotateLayerPropertiesCollection_0, ISymbolCollection isymbolCollection_0, string string_0) { IObjectClassDescription description = new AnnotationFeatureClassDescriptionClass(); IFields requiredFields = description.RequiredFields; int index = requiredFields.FindField((description as IFeatureClassDescription).ShapeFieldName); if (index != -1) { IField field = requiredFields.get_Field(index); IGeometryDef geometryDef = field.GeometryDef; ISpatialReference spatialReference = geometryDef.SpatialReference; SpatialReferenctOperator.ChangeCoordinateSystem(ifeatureWorkspaceAnno_0 as IGeodatabaseRelease, spatialReference, false); (geometryDef as IGeometryDefEdit).SpatialReference_2 = spatialReference; (field as IFieldEdit).GeometryDef_2 = geometryDef; } IFeatureClassDescription description2 = description as IFeatureClassDescription; IGraphicsLayerScale referenceScale = new GraphicsLayerScaleClass { ReferenceScale = double_1, Units = esriUnits_0 }; UID instanceCLSID = description.InstanceCLSID; UID classExtensionCLSID = description.ClassExtensionCLSID; return(ifeatureWorkspaceAnno_0.CreateAnnotationClass(string_0, requiredFields, instanceCLSID, classExtensionCLSID, description2.ShapeFieldName, "", ifeatureDataset_0, ifeatureClass_0, iannotateLayerPropertiesCollection_0, referenceScale, isymbolCollection_0, true)); }
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(); }
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(); }
public void labeling(IGeoFeatureLayer _iGeoFLayer, string _labelFuc, double _maxScale, double _minScale, bool _showMapTips, bool _displayAnnotation, IActiveView _aView) { RgbColor _labelColor = new RgbColor(); _labelColor.RGB = Microsoft.VisualBasic.Information.RGB(0, 0, 0); IAnnotateLayerPropertiesCollection propertiesColl = _iGeoFLayer.AnnotationProperties; IAnnotateLayerProperties labelEngineProperties = new LabelEngineLayerProperties() as IAnnotateLayerProperties; IElementCollection placedElements = new ElementCollection(); IElementCollection unplacedElements = new ElementCollection(); propertiesColl.QueryItem(0, out labelEngineProperties, out placedElements, out unplacedElements); ILabelEngineLayerProperties lpLabelEngine = labelEngineProperties as ILabelEngineLayerProperties; lpLabelEngine.Expression = _labelFuc; lpLabelEngine.Symbol.Color = _labelColor; labelEngineProperties.AnnotationMaximumScale = _maxScale; // closer labelEngineProperties.AnnotationMinimumScale = _minScale; // further IFeatureLayer thisFeatureLayer = _iGeoFLayer as IFeatureLayer; IDisplayString displayString = thisFeatureLayer as IDisplayString; IDisplayExpressionProperties properties = displayString.ExpressionProperties; properties.Expression = _labelFuc; //example: "[OWNER_NAME] & vbnewline & \"$\" & [TAX_VALUE]"; _iGeoFLayer.DisplayAnnotation = _displayAnnotation; // refresh map window _aView.Refresh(); }
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 { } }
/// <summary> /// 显示指定图层指定字段的标注 /// </summary> /// <param name="geoLayer">要设置注标注的图层(IFeatureLayer as IGeoFeatureLayer)</param> /// <param name="fieldName">显示标注的字段</param> /// <param name="fontName">标注的字体</param> /// <param name="size">标注的大小</param> public static void ShowLabel(this IGeoFeatureLayer geoLayer, string fieldName, string fontName = "宋体", int size = 12) { //标注属性集 IAnnotateLayerPropertiesCollection annotateLyrProColl = geoLayer.AnnotationProperties; annotateLyrProColl.Clear(); //普通标准属性(另一个是Maplex标准属性) ILabelEngineLayerProperties labelEngine = new LabelEngineLayerPropertiesClass(); labelEngine.Expression = $"[{fieldName}]"; //字体 IFontDisp fontDisp = new StdFont() { Name = fontName, Bold = false } as IFontDisp; //标注符号 ITextSymbol textSymbol = new TextSymbolClass(); textSymbol.Color = ColorCreate.GetIColor(0, 0, 0); textSymbol.Font = fontDisp; textSymbol.Size = size; labelEngine.Symbol = textSymbol; //设置同名标注:默认为移除同名标注,应设为每个要素放置一个标注 IBasicOverposterLayerProperties basicOverpLyrPro = labelEngine.BasicOverposterLayerProperties as IBasicOverposterLayerProperties; basicOverpLyrPro.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;//每个要素放置一个标注 annotateLyrProColl.Add(labelEngine as IAnnotateLayerProperties); geoLayer.DisplayAnnotation = true; }
public 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); } } } } } }
/// <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; }
/// <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(); }
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(); }
private void _AddLabel(IFeatureLayer featureLayer, string fieldName) { IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer; IAnnotateLayerPropertiesCollection annoPropsCollection = geoFeatureLayer.AnnotationProperties; IAnnotateLayerProperties annoProps; IElementCollection placedElements, unplacedElements; annoPropsCollection.QueryItem(0, out annoProps, out placedElements, out unplacedElements); ((ILabelEngineLayerProperties)annoProps).Expression = string.Format("[{0}]", fieldName); geoFeatureLayer.DisplayAnnotation = true; }
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(); } }
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); }
private void ConvertLabelsToAnnotationSingleLayerMapAnno(IMap pMap, int layerIndex) { //label features by OBJECTID FEILD IGeoFeatureLayer pGeoFeatLayer; pGeoFeatLayer = pMap.Layer[layerIndex] as IGeoFeatureLayer; IAnnotateLayerPropertiesCollection pAnnotationLayerProColl = pGeoFeatLayer.AnnotationProperties; pGeoFeatLayer.DisplayAnnotation = true; IAnnotateLayerProperties pAnnoLayPro; IElementCollection pElecol1; IElementCollection pElecol2; pAnnotationLayerProColl.QueryItem(0, out pAnnoLayPro, out pElecol1, out pElecol2); ILabelEngineLayerProperties pLabelEngineLayerPro; pLabelEngineLayerPro = pAnnoLayPro as ILabelEngineLayerProperties; pLabelEngineLayerPro.Expression = "[OBJECTID]"; pAnnoLayPro.DisplayAnnotation = true; //convert to annotation IConvertLabelsToAnnotation pConvertLabelsToAnnotation = new ConvertLabelsToAnnotationClass(); ITrackCancel pTrackCancel = new CancelTrackerClass(); //Change global level options for the conversion by sending in different parameters to the next line. pConvertLabelsToAnnotation.Initialize(pMap, esriAnnotationStorageType.esriMapAnnotation, esriLabelWhichFeatures.esriVisibleFeatures, true, pTrackCancel, null); ILayer pLayer = pMap.get_Layer(layerIndex); IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; if (pGeoFeatureLayer != null) { IFeatureClass pFeatureClass = pGeoFeatureLayer.FeatureClass; //Add the layer information to the converter object. Specify the parameters of the output annotation feature class here as well. pConvertLabelsToAnnotation.AddFeatureLayer(pGeoFeatureLayer, pGeoFeatureLayer.Name + "_Anno", null, null, false, false, false, false, false, ""); //Do the conversion. pConvertLabelsToAnnotation.ConvertLabels(); //Turn off labeling for the layer converted. pGeoFeatureLayer.DisplayAnnotation = false; //Refresh the map to update the display. IActiveView pActiveView = pMap as IActiveView; pActiveView.Refresh(); } }
/// <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; } } }
private void SetLabelExpressionOnFeatureLayer(IFeatureLayer FeatLayer, out bool LabelExcluded) { string s = ""; LabelExcluded = false; if (FeatLayer is IGeoFeatureLayer) { IGeoFeatureLayer pGeoFeatLyr = (IGeoFeatureLayer)FeatLayer; IAnnotateLayerPropertiesCollection pAnnoLyrPropsColl = pGeoFeatLyr.AnnotationProperties; IAnnotateLayerProperties pAnnoLyrProps; IElementCollection obj1; IElementCollection obj2; pAnnoLyrPropsColl.QueryItem(0, out pAnnoLyrProps, out obj1, out obj2); ILabelEngineLayerProperties LblEngProp = (ILabelEngineLayerProperties)pAnnoLyrProps; s = LblEngProp.Expression.ToLower(); if (FeatLayer.FeatureClass.LengthField.Name.ToLower().Contains("st_length")) { //exclude the label on function generated field shape_length if (s.Contains("shape_length")) { LblEngProp.IsExpressionSimple = true; LblEngProp.Expression = ""; LabelExcluded = true; return; } } LblEngProp.Expression = s.Replace("shape_length", FeatLayer.FeatureClass.LengthField.Name); IFeatureClass pFC = FeatLayer.FeatureClass; int iFld1 = pFC.Fields.FindField("shapestderrore"); if (iFld1 > -1) { string s1 = pFC.Fields.get_Field(iFld1).Name; s = LblEngProp.Expression; LblEngProp.Expression = s.Replace("shapestderrore", s1); } int iFld2 = pFC.Fields.FindField("shapestderrorn"); if (iFld2 > -1) { s = LblEngProp.Expression; string s2 = pFC.Fields.get_Field(iFld2).Name; LblEngProp.Expression = s.Replace("shapestderrorn", s2); } } }
/// <summary> /// 根据参考注记层新建注记层 /// </summary> /// <param name="targetName">创建注记图层的名称</param> /// <param name="pTargetWrksps">目标工作空间</param> /// <param name="pTargetDs">所属目标数据集</param> /// <param name="pRefAnnoFtCls">参考图层</param> /// <returns></returns> private static IFeatureClass CreateAnnotationClass(string targetName, IFeatureWorkspace pTargetWrksps, IFeatureDataset pTargetDs, IFeatureClass pRefAnnoFtCls, out string msg) { msg = ""; try { IFeatureWorkspaceAnno pAnnoWrksps = pTargetWrksps as IFeatureWorkspaceAnno; if (pAnnoWrksps == null || pRefAnnoFtCls == null) { return(null); } if (pRefAnnoFtCls.Extension is IAnnotationClassExtension pAnnoExten) { IClone pClone = pAnnoExten.AnnoProperties as IClone; IAnnotateLayerPropertiesCollection pAnnoProCol = (IAnnotateLayerPropertiesCollection)pClone.Clone(); esriUnits eUnits = pAnnoExten.ReferenceScaleUnits; double dbScale = pAnnoExten.ReferenceScale; IGraphicsLayerScale pGraScale = new GraphicsLayerScaleClass { ReferenceScale = dbScale, Units = eUnits }; pClone = pAnnoExten.SymbolCollection as IClone; ISymbolCollection pSymbolCol = (ISymbolCollection)pClone.Clone(); pClone = pRefAnnoFtCls.Fields as IClone; IFields pFields = (IFields)pClone.Clone(); IObjectClassDescription pOCDesc = new AnnotationFeatureClassDescriptionClass(); IDataset pDs = (IDataset)pRefAnnoFtCls; return(pAnnoWrksps.CreateAnnotationClass(targetName, pFields, pOCDesc.InstanceCLSID, pOCDesc.ClassExtensionCLSID, pRefAnnoFtCls.ShapeFieldName, null, pTargetDs, null, pAnnoProCol, pGraScale, pSymbolCol, false)); } return(null); } catch (Exception ex) { msg = ex.Message; return(null); } }
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; }
private void ExportSLD(bool labelStatus) { if (labelStatus == true) { annotateLPC = geoFeatureLayer.AnnotationProperties; annotateLPC.QueryItem(0, out annotateLP, out elementCol, out elementCol2); leProps = (ILabelEngineLayerProperties)annotateLP; labelField = leProps.Expression.Replace(@"[", "").Replace(@"]", ""); textSymbol = leProps.Symbol; labelFont = textSymbol.Font; labelFontFamily = labelFont.Name; labelSize = textSymbol.Size.ToString().Replace(",", "."); simpleSldXmlWithLabel = String.Format(SLDExporterResource.SimpleSLDwithLabel, textBoxGSsldName.Text, fillColorHEX, outlineColorHEX, outlineWidth, labelField, labelFontFamily, labelSize); } else { simpleSldXmlWithoutLabel = String.Format(SLDExporterResource.SimpleSLDwithoutLabel, textBoxGSsldName.Text, fillColorHEX, outlineColorHEX, outlineWidth); } }
//更换数据库时,重新初始化地图控件 private void initAxMapCtrl(IWorkspace indataWS) { axMapControlR.ClearLayers(); IFeatureWorkspace pFW = indataWS as IFeatureWorkspace; IFeatureClass pFC = null; if ((indataWS as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, "METADATA_MAP")) { pFC = pFW.OpenFeatureClass("METADATA_MAP"); IFeatureLayer pFL = new FeatureLayerClass(); pFL.FeatureClass = pFC; pFL.Name = pFC.AliasName; IGeoFeatureLayer pGFL = pFL as IGeoFeatureLayer; DefineUniqueValueRenderer(pGFL, "数据生产时间"); //IAnnotationExpressionEngine pAEE = new AnnotationVBScriptEngineClass(); //pAEE.SetExpression(); ILabelEngineLayerProperties pLELP = new LabelEngineLayerPropertiesClass(); pLELP.Expression = "\"数据生产单位:\" & [数据生产单位] & chr(13) & \"数据生产时间:\" & [数据生产时间] & chr(13)";//"[producedate]"; IAnnotateLayerPropertiesCollection pALPC = pGFL.AnnotationProperties; pALPC.Clear(); pALPC.Add(pLELP as IAnnotateLayerProperties); pGFL.DisplayAnnotation = true; axMapControlR.Map.AddLayer(pFL); } if ((indataWS as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, "XZQH_XIAN")) { pFC = pFW.OpenFeatureClass("XZQH_XIAN"); IFeatureLayer pFL = new FeatureLayerClass(); pFL.FeatureClass = pFC; pFL.Name = pFC.AliasName; ILayerEffects pLE = pFL as ILayerEffects; if (pLE.SupportsTransparency) { pLE.Transparency = 60;//设置图层透明 } axMapControlR.AddLayer(pFL); } }
//注记复制 private void CopyAnnoPropertyToFC(IFeatureClass pSourceFeatureClass, IFeatureClass pToFeatureClass) { IAnnoClass pSourceAnnoClass = (IAnnoClass)pSourceFeatureClass.Extension; IAnnoClass pTargerAnnoClass = (IAnnoClass)pToFeatureClass.Extension; IAnnotateLayerPropertiesCollection pSourceAnnoProperCollection = pSourceAnnoClass.AnnoProperties; IClone pAnnoCollection = (IClone)pSourceAnnoProperCollection; ISymbolCollection pSourceSymbolCollection = pSourceAnnoClass.SymbolCollection; IClone pAnnoSymbol = (IClone)pSourceSymbolCollection; IAnnoClassAdmin2 pAnnoClassAdmin = (IAnnoClassAdmin2)pTargerAnnoClass; pAnnoClassAdmin.ReferenceScale = pSourceAnnoClass.ReferenceScale; pAnnoClassAdmin.ReferenceScaleUnits = pSourceAnnoClass.ReferenceScaleUnits; pAnnoClassAdmin.AnnoProperties = (IAnnotateLayerPropertiesCollection)pAnnoCollection; pAnnoClassAdmin.SymbolCollection = (ISymbolCollection)pAnnoSymbol; pAnnoClassAdmin.UpdateProperties(); pAnnoClassAdmin.UpdateOnShapeChange = true; }
/// <summary> /// ÉèÖÃÊôÐÔ±ê×¢ /// </summary> /// <param name="pGeoFeatureLayer">ͼ²ã</param> /// <param name="vLabelField">ÊôÐÔ×Ö¶Î</param> /// <param name="vMapFrameScale">ͼ²ã±ÈÀý³ß</param> /// <param name="vMapRefrenceScale">²Î¿¼±ÈÀý³ß</param> private void SetLableToGeoFeatureLayer(IGeoFeatureLayer pGeoFeatureLayer, string vLabelField, int vMapFrameScale, double vMapRefrenceScale) { IAnnotateLayerPropertiesCollection pAnnoLayerProperCol = pGeoFeatureLayer.AnnotationProperties; IAnnotateLayerProperties pAnnoLayerProper; IElementCollection placedElements; IElementCollection unplacedElements; //µÃµ½µ±Ç°²ãµÄµ±Ç°±ê×¢ÊôÐÔ pAnnoLayerProperCol.QueryItem(0, out pAnnoLayerProper, out placedElements, out unplacedElements); ILabelEngineLayerProperties pLabelEngineLayerProper = (ILabelEngineLayerProperties)pAnnoLayerProper; IBasicOverposterLayerProperties4 pBasicOverposterLayerProper = (IBasicOverposterLayerProperties4)pLabelEngineLayerProper.BasicOverposterLayerProperties; //±ê×¢µÄ×ÖÌå ITextSymbol pTextSymbol = pLabelEngineLayerProper.Symbol; IRgbColor pRGBColor = new RgbColorClass(); pRGBColor.Red = 0; pRGBColor.Blue = 255; pRGBColor.Green = 0; pTextSymbol.Color = pRGBColor; stdole.StdFont pStdFont = new stdole.StdFontClass(); IFontDisp pFont = (IFontDisp)pStdFont; pFont.Name = "ËÎÌå"; if (vMapRefrenceScale != 0) { double size = (vMapFrameScale / 3) * vMapFrameScale / vMapRefrenceScale; pFont.Size = (decimal)size; } pTextSymbol.Font = pFont; //±ê×¢ÄÚÈÝ pLabelEngineLayerProper.Expression = "[" + vLabelField + "]"; pBasicOverposterLayerProper.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart; //±ê×¢µÄ·½ÏòÐÅÏ¢ pBasicOverposterLayerProper.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal; //±ê×¢µÄÓ뼸ºÎͼÐεĴóС¹Øϵ pBasicOverposterLayerProper.PlaceOnlyInsidePolygon = false; //¿ªÆô±ê×¢ pGeoFeatureLayer.DisplayAnnotation = true; }
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); }
private void btnSetLabel_Click(object sender, EventArgs e) { IList <string> fdLst = new List <string>(); IFeatureClass pFC = null; IGeoFeatureLayer pGFL = null; for (int i = 0; i < axMapControlR.LayerCount; i++) { if (axMapControlR.get_Layer(i).Name == "元数据地图") { pFC = (axMapControlR.get_Layer(i) as IFeatureLayer).FeatureClass; pGFL = axMapControlR.get_Layer(i) as IGeoFeatureLayer; } } if (pFC == null) { return; } for (int i = 0; i < pFC.Fields.FieldCount; i++) { IField pField = pFC.Fields.get_Field(i); fdLst.Add(pField.Name); } frmMetaMapSetLabel fmMMSL = new frmMetaMapSetLabel(fdLst); if (fmMMSL.ShowDialog(this) == DialogResult.OK && axMapControlR.LayerCount > 0) { ILabelEngineLayerProperties pLELP = new LabelEngineLayerPropertiesClass(); pLELP.Expression = fmMMSL.LabelExpression; IAnnotateLayerPropertiesCollection pALPC = pGFL.AnnotationProperties; pALPC.Clear(); pALPC.Add(pLELP as IAnnotateLayerProperties); pGFL.DisplayAnnotation = true; axMapControlR.Refresh(); } }
public static IFeatureClass CreateAnnoFeatureClass(IFeatureWorkspaceAnno ifeatureWorkspaceAnno_0, IFeatureDataset ifeatureDataset_0, IFeatureClass ifeatureClass_0, double double_0, esriUnits esriUnits_0, IAnnotateLayerPropertiesCollection iannotateLayerPropertiesCollection_0, ISymbolCollection isymbolCollection_0, string string_0) { IObjectClassDescription annotationFeatureClassDescriptionClass = new AnnotationFeatureClassDescription(); IFields requiredFields = annotationFeatureClassDescriptionClass.RequiredFields; int num = requiredFields.FindField( (annotationFeatureClassDescriptionClass as IFeatureClassDescription).ShapeFieldName); if (num != -1) { IField field = requiredFields.Field[num]; IGeometryDef geometryDef = field.GeometryDef; ISpatialReference spatialReference = geometryDef.SpatialReference; LayerOp.ChangeCoordinateSystem(ifeatureWorkspaceAnno_0 as IGeodatabaseRelease, spatialReference, false); (geometryDef as IGeometryDefEdit).SpatialReference_2 = spatialReference; (field as IFieldEdit).GeometryDef_2 = geometryDef; } IFeatureClassDescription featureClassDescription = annotationFeatureClassDescriptionClass as IFeatureClassDescription; IGraphicsLayerScale graphicsLayerScaleClass = new GraphicsLayerScale() { ReferenceScale = double_0, Units = esriUnits_0 }; UID instanceCLSID = annotationFeatureClassDescriptionClass.InstanceCLSID; UID classExtensionCLSID = annotationFeatureClassDescriptionClass.ClassExtensionCLSID; IFeatureClass featureClass = ifeatureWorkspaceAnno_0.CreateAnnotationClass(string_0, requiredFields, instanceCLSID, classExtensionCLSID, featureClassDescription.ShapeFieldName, "", ifeatureDataset_0, ifeatureClass_0, iannotateLayerPropertiesCollection_0, graphicsLayerScaleClass, isymbolCollection_0, true); return(featureClass); }
public GeoFeatureLayerWrap(IGeoFeatureLayer igeoFeatureLayer_1) { this.igeoFeatureLayer_0 = igeoFeatureLayer_1; this.iannotateLayerPropertiesCollection_0 = this.igeoFeatureLayer_0.AnnotationProperties; }
/// <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; }
private void btn_OK_Click(object sender, EventArgs e) { IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer; //清除原有注记 pGeoFeatureLayer.DisplayAnnotation = false; m_MapControl.Refresh(esriViewDrawPhase.esriViewBackground, null, null); //得到图层的标注属性集合对象 IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatureLayer.AnnotationProperties; //清空这个集合内的对象 pAnnoProps.Clear(); IAnnotateLayerProperties pAnnoLayerProps; ILineLabelPlacementPriorities pPlacement; ILineLabelPosition pPosition; IBasicOverposterLayerProperties pBasic; ILabelEngineLayerProperties pLabelEngine; //设置文本属性 stdole.IFontDisp pFont; pFont = new stdole.StdFontClass() as stdole.IFontDisp; pFont.Name = lbl_PreviewFont.Font.Name; pFont.Italic = lbl_PreviewFont.Font.Italic; pFont.Underline = lbl_PreviewFont.Font.Underline; pFont.Bold = lbl_PreviewFont.Font.Bold; pFont.Size = (decimal)lbl_PreviewFont.Font.Size; pFont.Strikethrough = lbl_PreviewFont.Font.Strikeout; IRgbColor pRGB = new RgbColorClass(); pRGB.Red = (int)lbl_PreviewFont.ForeColor.R; pRGB.Green = (int)lbl_PreviewFont.ForeColor.G; pRGB.Blue = (int)lbl_PreviewFont.ForeColor.B; ITextSymbol pTextSymbol = new TextSymbolClass(); pTextSymbol.Size = lbl_PreviewFont.Font.Size; pTextSymbol.Font = pFont; pTextSymbol.Color = pRGB; //设置注记文本的位置 pPosition = new LineLabelPositionClass(); pPosition.Parallel = false; pPosition.Perpendicular = true; pPlacement = new LineLabelPlacementPrioritiesClass(); pBasic = new BasicOverposterLayerPropertiesClass(); pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; pBasic.LineLabelPosition = pPosition; //新建一个图层注记引擎对象,并设置它的属性 pLabelEngine = new LabelEngineLayerPropertiesClass(); pLabelEngine.Symbol = pTextSymbol; pLabelEngine.BasicOverposterLayerProperties = pBasic; //设置注记字段 pLabelEngine.Expression = "[" + cbx_Field.SelectedItem.ToString() + "]"; pAnnoLayerProps = (IAnnotateLayerProperties)pLabelEngine; pAnnoProps.Add(pAnnoLayerProps); pGeoFeatureLayer.DisplayAnnotation = true; m_MapControl.Refresh(esriViewDrawPhase.esriViewBackground, null, null); }
public static void ConvertLabels2StandardAnno(IMap imap_0, ILayer ilayer_0, string string_0, double double_0, IWorkspace iworkspace_0, bool bool_0, bool bool_1, esriLabelWhichFeatures esriLabelWhichFeatures_0) { int i; IAnnotateLayerProperties bool0; IElementCollection elementCollection; IElementCollection elementCollection1; ILabelEngineLayerProperties2 d; ISymbolIdentifier2 symbolIdentifier2; IAnnotationLayer annotationLayer; if (iworkspace_0.Type != esriWorkspaceType.esriFileSystemWorkspace && ilayer_0 is IGeoFeatureLayer) { IGeoFeatureLayer ilayer0 = ilayer_0 as IGeoFeatureLayer; IFeatureClass featureClass = ilayer0.FeatureClass; IAnnotationLayerFactory fDOGraphicsLayerFactoryClass = new FDOGraphicsLayerFactory() as IAnnotationLayerFactory; ISymbolCollection2 symbolCollectionClass = new SymbolCollection() as ISymbolCollection2; IAnnotateLayerPropertiesCollection annotateLayerPropertiesCollectionClass = new AnnotateLayerPropertiesCollection(); IAnnotateLayerPropertiesCollection annotationProperties = ilayer0.AnnotationProperties; for (i = 0; i < annotationProperties.Count; i++) { annotationProperties.QueryItem(i, out bool0, out elementCollection, out elementCollection1); if (bool0 != null) { annotateLayerPropertiesCollectionClass.Add(bool0); d = bool0 as ILabelEngineLayerProperties2; IClone symbol = d.Symbol as IClone; symbolCollectionClass.AddSymbol(symbol.Clone() as ISymbol, string.Concat(bool0.Class, " ", i.ToString()), out symbolIdentifier2); d.SymbolID = symbolIdentifier2.ID; } } bool0 = null; d = null; IGraphicsLayerScale graphicsLayerScaleClass = new GraphicsLayerScale() { ReferenceScale = double_0, Units = imap_0.MapUnits }; IFeatureClassDescription annotationFeatureClassDescriptionClass = new AnnotationFeatureClassDescription() as IFeatureClassDescription; IFields requiredFields = (annotationFeatureClassDescriptionClass as IObjectClassDescription).RequiredFields; IField field = requiredFields.Field[requiredFields.FindField(annotationFeatureClassDescriptionClass.ShapeFieldName) ]; (field.GeometryDef as IGeometryDefEdit).SpatialReference_2 = (featureClass as IGeoDataset).SpatialReference; IOverposterProperties overposterProperties = (imap_0 as IMapOverposter).OverposterProperties; if (!bool_1) { LayerOp.CreateAnnoFeatureClass(iworkspace_0 as IFeatureWorkspaceAnno, featureClass.FeatureDataset, null, graphicsLayerScaleClass.ReferenceScale, graphicsLayerScaleClass.Units, annotateLayerPropertiesCollectionClass, symbolCollectionClass as ISymbolCollection, string_0); annotationLayer = fDOGraphicsLayerFactoryClass.OpenAnnotationLayer( iworkspace_0 as IFeatureWorkspace, featureClass.FeatureDataset, string_0); } else { LayerOp.CreateAnnoFeatureClass(iworkspace_0 as IFeatureWorkspaceAnno, featureClass.FeatureDataset, featureClass, graphicsLayerScaleClass.ReferenceScale, graphicsLayerScaleClass.Units, annotateLayerPropertiesCollectionClass, symbolCollectionClass as ISymbolCollection, string_0); annotationLayer = fDOGraphicsLayerFactoryClass.OpenAnnotationLayer( iworkspace_0 as IFeatureWorkspace, featureClass.FeatureDataset, string_0); } IActiveView imap0 = imap_0 as IActiveView; (annotationLayer as IGraphicsLayer).Activate(imap0.ScreenDisplay); for (i = 0; i < annotateLayerPropertiesCollectionClass.Count; i++) { annotateLayerPropertiesCollectionClass.QueryItem(i, out bool0, out elementCollection, out elementCollection1); if (bool0 != null) { bool0.FeatureLayer = ilayer0; bool0.GraphicsContainer = annotationLayer as IGraphicsContainer; bool0.AddUnplacedToGraphicsContainer = bool_0; bool0.CreateUnplacedElements = true; bool0.DisplayAnnotation = true; bool0.FeatureLinked = bool_1; bool0.LabelWhichFeatures = esriLabelWhichFeatures_0; bool0.UseOutput = true; d = bool0 as ILabelEngineLayerProperties2; d.SymbolID = i; d.AnnotationClassID = i; (d.OverposterLayerProperties as IOverposterLayerProperties2).TagUnplaced = true; } } annotateLayerPropertiesCollectionClass.Sort(); IAnnotateMapProperties annotateMapPropertiesClass = new AnnotateMapProperties() { AnnotateLayerPropertiesCollection = annotateLayerPropertiesCollectionClass }; ITrackCancel cancelTrackerClass = new CancelTracker(); (imap_0.AnnotationEngine as IAnnotateMap2).Label(overposterProperties, annotateMapPropertiesClass, imap_0, cancelTrackerClass); for (i = 0; i < annotateLayerPropertiesCollectionClass.Count; i++) { annotateLayerPropertiesCollectionClass.QueryItem(i, out bool0, out elementCollection, out elementCollection1); if (bool0 != null) { bool0.FeatureLayer = null; } } imap_0.AddLayer(annotationLayer as ILayer); ilayer0.DisplayAnnotation = false; imap0.Refresh(); } }
public static void ConvertLabels2Anno(IMap imap_0, IGeoFeatureLayer igeoFeatureLayer_0, string string_0, double double_0) { int i; IAnnotateLayerProperties igeoFeatureLayer0; IElementCollection elementCollection; IElementCollection elementCollection1; IElementCollection elementCollection2; IElement element; int num; IActiveView imap0 = imap_0 as IActiveView; int j = 0; int count = 0; IAnnotateLayerPropertiesCollection annotateLayerPropertiesCollectionClass = new AnnotateLayerPropertiesCollection(); IAnnotateLayerPropertiesCollection annotationProperties = igeoFeatureLayer_0.AnnotationProperties; for (i = 0; i < annotationProperties.Count; i++) { annotationProperties.QueryItem(i, out igeoFeatureLayer0, out elementCollection, out elementCollection1); if (igeoFeatureLayer0 != null) { annotateLayerPropertiesCollectionClass.Add( (igeoFeatureLayer0 as IClone).Clone() as IAnnotateLayerProperties); } } igeoFeatureLayer0 = null; IOverposterProperties overposterProperties = (imap_0 as IMapOverposter).OverposterProperties; IGraphicsLayer double0 = (imap_0.BasicGraphicsLayer as ICompositeGraphicsLayer).AddLayer(string_0, igeoFeatureLayer_0); (double0 as IGraphicsLayerScale).ReferenceScale = double_0; double0.Activate(imap0.ScreenDisplay); for (i = 0; i < annotateLayerPropertiesCollectionClass.Count; i++) { annotateLayerPropertiesCollectionClass.QueryItem(i, out igeoFeatureLayer0, out elementCollection, out elementCollection1); if (igeoFeatureLayer0 != null) { igeoFeatureLayer0.FeatureLayer = igeoFeatureLayer_0; igeoFeatureLayer0.GraphicsContainer = double0 as IGraphicsContainer; igeoFeatureLayer0.AddUnplacedToGraphicsContainer = false; igeoFeatureLayer0.CreateUnplacedElements = true; igeoFeatureLayer0.DisplayAnnotation = true; igeoFeatureLayer0.FeatureLinked = false; igeoFeatureLayer0.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures; igeoFeatureLayer0.UseOutput = true; ((igeoFeatureLayer0 as ILabelEngineLayerProperties2).OverposterLayerProperties as IOverposterLayerProperties2).TagUnplaced = true; } } annotateLayerPropertiesCollectionClass.Sort(); IAnnotateMapProperties annotateMapPropertiesClass = new AnnotateMapProperties() { AnnotateLayerPropertiesCollection = annotateLayerPropertiesCollectionClass }; ITrackCancel cancelTrackerClass = new CancelTracker(); (imap_0.AnnotationEngine as IAnnotateMap2).Label(overposterProperties, annotateMapPropertiesClass, imap_0, cancelTrackerClass); for (i = 0; i < annotateLayerPropertiesCollectionClass.Count; i++) { annotateLayerPropertiesCollectionClass.QueryItem(i, out igeoFeatureLayer0, out elementCollection, out elementCollection2); if (igeoFeatureLayer0 != null) { count = count + elementCollection2.Count; if (elementCollection2.Count > 0) { IOverflowGraphicsContainer overflowGraphicsContainer = double0 as IOverflowGraphicsContainer; for (j = 0; j < elementCollection2.Count; j++) { elementCollection2.QueryItem(j, out element, out num); overflowGraphicsContainer.AddOverflowElement(element); } } igeoFeatureLayer0.FeatureLayer = null; } } igeoFeatureLayer_0.DisplayAnnotation = false; imap0.ContentsChanged(); imap0.Refresh(); }