/// <summary> /// Spread labels across Polygon geometry /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsSpreadLabelPolygon(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolygon) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { return; } #region Spread labels across Polygon geometry //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Spread Labels (words and characters to fill feature) // Spread words to fill feature theLabelClass.MaplexLabelPlacementProperties.SpreadWords = true; //Spread Characters to a fixed limit of 50% theLabelClass.MaplexLabelPlacementProperties.SpreadCharacters = true; theLabelClass.MaplexLabelPlacementProperties.MaximumCharacterSpacing = 50.0; lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }
/// <summary> /// Modify label's Leader Line Anchor point properties (Polygon geometry) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsLeaderLineAnchorPolygon(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolygon) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { return; } #region Modify label's Leader Line Anchor point properties (Polygon geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //If TextSymbol is a callout the leader line anachor point can be modified theLabelClass.MaplexLabelPlacementProperties.PolygonAnchorPointType = MaplexAnchorPointType.Perimeter; lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }
/// <summary> /// Modify Orientation of a label using the MaplexEngine (Line geometry) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsOrientationLineAsync(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolyline) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { return; } #region Modify Orientation of a label using the MaplexEngine (Line geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Modify label Orientation theLabelClass.MaplexLabelPlacementProperties.AlignLabelToLineDirection = true; lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }
/// <summary> /// Modify the Placement/Position of labels (Point geometry) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> /// <remarks> /// The label placement and positions are modified for a point, line or polygon feature class. /// The properties modified are based on the Standard or Maplex label engine used on the Map defintion. /// </remarks> private static Task ModifyLabelsPlacementPointAsync(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPoint) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { #region Modify the Placement/Position of labels (Point geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Modify label Placement //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) //Current labeling engine is Standard labeling engine { theLabelClass.StandardLabelPlacementProperties.PointPlacementMethod = StandardPointPlacementMethod.OnTopPoint; } else //Current labeling engine is Maplex labeling engine { theLabelClass.MaplexLabelPlacementProperties.PointPlacementMethod = MaplexPointPlacementMethod.CenteredOnPoint; } lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }
/// <summary> /// Get the active map's labeling engine - Maplex or Standard labeling engine. /// </summary> /// <returns></returns> private static Task <CIMGeneralPlacementProperties> GetMapLabelEngineAsync() { return(QueuedTask.Run <CIMGeneralPlacementProperties>(() => { #region Get the active map's labeling engine - Maplex or Standard labeling engine //Note: call within QueuedTask.Run() //Get the active map's definition - CIMMap. var cimMap = MapView.Active.Map.GetDefinition(); //Get the labeling engine from the map definition CIMGeneralPlacementProperties labelEngine = cimMap.GeneralPlacementProperties; #endregion return labelEngine; })); }
/// <summary> /// Modify the Placement/Position of labels (Line geometry) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsPlacementLineAsync(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolyline) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { #region Modify the Placement/Position of labels (Line geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Modify label Placement //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { //Current labeling engine is Standard labeling engine var lineLablePosition = new CIMStandardLineLabelPosition { Perpendicular = true, Parallel = false, ProduceCurvedLabels = false, Horizontal = false, OnTop = true }; theLabelClass.StandardLabelPlacementProperties.LineLabelPosition = lineLablePosition; } else //Current labeling engine is Maplex labeling engine { theLabelClass.MaplexLabelPlacementProperties.LinePlacementMethod = MaplexLinePlacementMethod.CenteredPerpendicularOnLine; theLabelClass.MaplexLabelPlacementProperties.LineFeatureType = MaplexLineFeatureType.General; } //theLabelClass.MaplexLabelPlacementProperties.LinePlacementMethod = MaplexLinePlacementMethod.CenteredPerpendicularOnLine; lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }
/// <summary> /// Modify the Placement/Position of labels (Polygon geometry) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsPlacementPolygonAsync(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPolygon) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { #region Modify the Placement/Position of labels (Polygon geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Modify label Placement //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { //Current labeling engine is Standard Labeling engine theLabelClass.StandardLabelPlacementProperties.PolygonPlacementMethod = StandardPolygonPlacementMethod.AlwaysHorizontal; theLabelClass.StandardLabelPlacementProperties.PlaceOnlyInsidePolygon = true; } else { //Current labeling engine is Maplex labeling engine theLabelClass.MaplexLabelPlacementProperties.PolygonFeatureType = MaplexPolygonFeatureType.LandParcel; theLabelClass.MaplexLabelPlacementProperties.AvoidPolygonHoles = true; theLabelClass.MaplexLabelPlacementProperties.PolygonPlacementMethod = MaplexPolygonPlacementMethod.HorizontalInPolygon; theLabelClass.MaplexLabelPlacementProperties.CanPlaceLabelOutsidePolygon = true; } lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition //set the label's visiblity featureLayer.SetLabelVisibility(true); #endregion })); }
/// <summary> /// Modify label Rotation (Point geomerty) /// </summary> /// <param name="featureLayer"></param> /// <returns></returns> private static Task ModifyLabelsRotationPointsAsync(FeatureLayer featureLayer) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPoint) { return(Task.FromResult(0)); } return(QueuedTask.Run(() => { //Check if the label engine is Maplex or standard. CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties; if (labelEngine is CIMStandardGeneralPlacementProperties) { return; } #region Modify label Rotation (Point geometry) //Note: call within QueuedTask.Run() //Get the layer's definition var lyrDefn = featureLayer.GetDefinition() as CIMFeatureLayer; //Get the label classes - we need the first one var listLabelClasses = lyrDefn.LabelClasses.ToList(); var theLabelClass = listLabelClasses.FirstOrDefault(); //Modify label Rotation CIMMaplexRotationProperties rotationProperties = new CIMMaplexRotationProperties { Enable = true, //Enable rotation RotationField = "ELEVATION", //Field that is used to define rotation angle AdditionalAngle = 15, //Additional rotation RotationType = MaplexLabelRotationType.Arithmetic, AlignmentType = MaplexRotationAlignmentType.Perpendicular, AlignLabelToAngle = true }; theLabelClass.MaplexLabelPlacementProperties.RotationProperties = rotationProperties; lyrDefn.LabelClasses = listLabelClasses.ToArray(); //Set the labelClasses back featureLayer.SetDefinition(lyrDefn); //set the layer's definition #endregion })); }