Ejemplo n.º 1
0
 /// <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
     }));
 }
Ejemplo n.º 2
0
 /// <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
     }));
 }
Ejemplo n.º 3
0
        /// <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
            }));
        }
Ejemplo n.º 4
0
        /// <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
            }));
        }
Ejemplo n.º 5
0
 /// <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;
     }));
 }
Ejemplo n.º 6
0
        /// <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
            }));
        }
Ejemplo n.º 7
0
        /// <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
            }));
        }
Ejemplo n.º 8
0
 /// <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
     }));
 }