ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMLabelClass Class / MaplexLabelPlacementProperties Property
Example

In This Topic
    MaplexLabelPlacementProperties Property
    In This Topic
    Gets or sets the Maplex placement properties which are used when the map uses the Maplex label engine.
    Syntax
    Public Property MaplexLabelPlacementProperties As CIMMaplexLabelPlacementProperties
    public CIMMaplexLabelPlacementProperties MaplexLabelPlacementProperties {get; set;}
    Example
    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
      }
    }
    Modify label Rotation - Point geometry
    {
      // Note: call within QueuedTask.Run()
      {
        //Check if the label engine is Maplex or standard.
        CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties;
        if (labelEngine is CIMStandardGeneralPlacementProperties)
          return;
    
        //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
      }
    }
    Spread labels across Polygon geometry
    {
      // Note: call within QueuedTask.Run()
      {
        //Check if the label engine is Maplex or standard.
        CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties;
        if (labelEngine is CIMStandardGeneralPlacementProperties)
          return;
    
        //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
      }
    }
    Modify label's Leader Line Anchor point properties - Polygon geometry
    {
      // Note: call within QueuedTask.Run()
      {
        //Check if the label engine is Maplex or standard.
        CIMGeneralPlacementProperties labelEngine = MapView.Active.Map.GetDefinition().GeneralPlacementProperties;
        if (labelEngine is CIMStandardGeneralPlacementProperties)
          return;
    
        //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 call-out the leader line anchor point can be modified
        theLabelClass.MaplexLabelPlacementProperties.PolygonAnchorPointType = MaplexAnchorPointType.Perimeter;
        lyrDefn.LabelClasses = [.. listLabelClasses]; //Set the labelClasses back
        featureLayer.SetDefinition(lyrDefn); //set the layer's definition
      }
    }
    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also