ArcGIS Pro 3.2 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMMaplexLabelPlacementProperties Class
Members Example Version

CIMMaplexLabelPlacementProperties Class
Represents Maplex label placement properties.
Object Model
CIMMaplexLabelPlacementProperties ClassCIMExpressionInfo ClassCIMMaplexLabelPlacementProperties ClassCIMMaplexLabelPlacementProperties ClassCIMMaplexLabelStackingProperties ClassCIMMaplexOffsetAlongLineProperties ClassCIMMaplexExternalZonePriorities ClassCIMMaplexExternalZonePriorities ClassCIMMaplexInternalZonePriorities ClassCIMMaplexRotationProperties ClassCIMMaplexStrategyPriorities Class
Syntax
Example
Creating an annotation feature class
public void CreateStandAloneAnnotationFeatureClass(Geodatabase geodatabase, SpatialReference spatialReference)
{
  // Creating a Cities annotation feature class
  // with following user defined fields
  // Name 
  // GlobalID

  // Annotation feature class name
  string annotationFeatureClassName = "CitiesAnnotation";

  // Create user defined attribute fields for annotation feature class 
  FieldDescription globalIDFieldDescription = FieldDescription.CreateGlobalIDField();
  FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 255);

  // Create a list of all field descriptions
  List<FieldDescription> fieldDescriptions = new List<FieldDescription> { globalIDFieldDescription, nameFieldDescription };

  // Create a ShapeDescription object
  ShapeDescription shapeDescription = new ShapeDescription(GeometryType.Polygon, spatialReference);

  // Create general placement properties for Maplex engine 
  CIMMaplexGeneralPlacementProperties generalPlacementProperties =
    new CIMMaplexGeneralPlacementProperties
    {
      AllowBorderOverlap = true,
      PlacementQuality = MaplexQualityType.High,
      DrawUnplacedLabels = true,
      InvertedLabelTolerance = 1.0,
      RotateLabelWithDisplay = true,
      UnplacedLabelColor = new CIMRGBColor
      {
        R = 0,
        G = 255,
        B = 0,
        Alpha = 0.5f // Green
      }
    };

  // Create general placement properties for Standard engine

  //CIMStandardGeneralPlacementProperties generalPlacementProperties =
  //  new CIMStandardGeneralPlacementProperties
  //  {
  //    DrawUnplacedLabels = true,
  //    InvertedLabelTolerance = 3.0,
  //    RotateLabelWithDisplay = true,
  //    UnplacedLabelColor = new CIMRGBColor
  //    {
  //      R = 255, G = 0, B = 0, Alpha = 0.5f // Red
  //    } 
  //   };


  // Create annotation  label classes
  // Green label
  CIMLabelClass greenLabelClass = new CIMLabelClass
  {
    Name = "Green",
    ExpressionTitle = "Expression-Green",
    ExpressionEngine = LabelExpressionEngine.Arcade,
    Expression = "$feature.OBJECTID",
    ID = 1,
    Priority = 0,
    Visibility = true,
    TextSymbol = new CIMSymbolReference
    {
      Symbol = new CIMTextSymbol()
      {
        Angle = 45,
        FontType = FontType.Type1,
        FontFamilyName = "Tahoma",
        FontEffects = FontEffects.Normal,
        HaloSize = 2.0,

        Symbol = new CIMPolygonSymbol
        {
          SymbolLayers = new CIMSymbolLayer[]
          {
            new CIMSolidFill
            {
              Color = CIMColor.CreateRGBColor(0, 255, 0)
            }
          },
          UseRealWorldSymbolSizes = true
        }
      },
      MaxScale = 0,
      MinScale = 0,
      SymbolName = "TextSymbol-Green"
    },
    StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties
    {
      AllowOverlappingLabels = true,
      LineOffset = 1.0
    },
    MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties
    {
      AlignLabelToLineDirection = true,
      AvoidPolygonHoles = true
    }
  };

  // Blue label
  CIMLabelClass blueLabelClass = new CIMLabelClass
  {
    Name = "Blue",
    ExpressionTitle = "Expression-Blue",
    ExpressionEngine = LabelExpressionEngine.Arcade,
    Expression = "$feature.OBJECTID",
    ID = 2,
    Priority = 0,
    Visibility = true,
    TextSymbol = new CIMSymbolReference
    {
      Symbol = new CIMTextSymbol()
      {
        Angle = 45,
        FontType = FontType.Type1,
        FontFamilyName = "Consolas",
        FontEffects = FontEffects.Normal,
        HaloSize = 2.0,

        Symbol = new CIMPolygonSymbol
        {
          SymbolLayers = new CIMSymbolLayer[]
          {
            new CIMSolidFill
            {
              Color = CIMColor.CreateRGBColor(0, 0, 255)
            }
          },
          UseRealWorldSymbolSizes = true
        }
      },
      MaxScale = 0,
      MinScale = 0,
      SymbolName = "TextSymbol-Blue"
    },
    StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties
    {
      AllowOverlappingLabels = true,
      LineOffset = 1.0
    },
    MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties
    {
      AlignLabelToLineDirection = true,
      AvoidPolygonHoles = true
    }
  };

  // Create a list of labels
  List<CIMLabelClass> labelClasses = new List<CIMLabelClass> { greenLabelClass, blueLabelClass };

  // Create an annotation feature class description object to describe the feature class to create
  AnnotationFeatureClassDescription annotationFeatureClassDescription =
    new AnnotationFeatureClassDescription(annotationFeatureClassName, fieldDescriptions, shapeDescription,
      generalPlacementProperties, labelClasses)
    {
      IsAutoCreate = true,
      IsSymbolIDRequired = false,
      IsUpdatedOnShapeChange = true
    };

  // Create a SchemaBuilder object
  SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);

  // Add the creation of the Cities annotation feature class to the list of DDL tasks
  schemaBuilder.Create(annotationFeatureClassDescription);

  // Execute the DDL
  bool success = schemaBuilder.Build();

  // Inspect error messages
  if (!success)
  {
    IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;
    //etc.
  }
}
Creating a feature-linked annotation feature class
public void CreateFeatureLinkedAnnotationFeatureClass(Geodatabase geodatabase, SpatialReference spatialReference)
{
  // Creating a feature-linked annotation feature class between water pipe and valve in water distribution network
  // with following user defined fields
  // PipeName 
  // GlobalID

  // Annotation feature class name
  string annotationFeatureClassName = "WaterPipeAnnotation";

  // Create user defined attribute fields for annotation feature class
  FieldDescription pipeGlobalID = FieldDescription.CreateGlobalIDField();
  FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 255);

  // Create a list of all field descriptions
  List<FieldDescription> fieldDescriptions = new List<FieldDescription> { pipeGlobalID, nameFieldDescription };

  // Create a ShapeDescription object
  ShapeDescription shapeDescription = new ShapeDescription(GeometryType.Polygon, spatialReference);

  // Create general placement properties for Maplex engine 
  CIMMaplexGeneralPlacementProperties generalPlacementProperties = new CIMMaplexGeneralPlacementProperties
  {
    AllowBorderOverlap = true,
    PlacementQuality = MaplexQualityType.High,
    DrawUnplacedLabels = true,
    InvertedLabelTolerance = 1.0,
    RotateLabelWithDisplay = true,
    UnplacedLabelColor = new CIMRGBColor
    {
      R = 255,
      G = 0,
      B = 0,
      Alpha = 0.5f
    }
  };

  // Create annotation  label classes
  // Green label
  CIMLabelClass greenLabelClass = new CIMLabelClass
  {
    Name = "Green",
    ExpressionTitle = "Expression-Green",
    ExpressionEngine = LabelExpressionEngine.Arcade,
    Expression = "$feature.OBJECTID",
    ID = 1,
    Priority = 0,
    Visibility = true,
    TextSymbol = new CIMSymbolReference
    {
      Symbol = new CIMTextSymbol()
      {
        Angle = 45,
        FontType = FontType.Type1,
        FontFamilyName = "Tahoma",
        FontEffects = FontEffects.Normal,
        HaloSize = 2.0,

        Symbol = new CIMPolygonSymbol
        {
          SymbolLayers = new CIMSymbolLayer[]
          {
            new CIMSolidFill
            {
              Color = CIMColor.CreateRGBColor(0, 255, 0)
            }
          },
          UseRealWorldSymbolSizes = true
        }
      },
      MaxScale = 0,
      MinScale = 0,
      SymbolName = "TextSymbol-Green"
    },
    StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties
    {
      AllowOverlappingLabels = true,
      LineOffset = 1.0
    },
    MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties
    {
      AlignLabelToLineDirection = true,
      AvoidPolygonHoles = true
    }
  };

  // Blue label
  CIMLabelClass blueLabelClass = new CIMLabelClass
  {
    Name = "Blue",
    ExpressionTitle = "Expression-Blue",
    ExpressionEngine = LabelExpressionEngine.Arcade,
    Expression = "$feature.OBJECTID",
    ID = 2,
    Priority = 0,
    Visibility = true,
    TextSymbol = new CIMSymbolReference
    {
      Symbol = new CIMTextSymbol()
      {
        Angle = 45,
        FontType = FontType.Type1,
        FontFamilyName = "Consolas",
        FontEffects = FontEffects.Normal,
        HaloSize = 2.0,

        Symbol = new CIMPolygonSymbol
        {
          SymbolLayers = new CIMSymbolLayer[]
          {
            new CIMSolidFill
            {
              Color = CIMColor.CreateRGBColor(0, 0, 255)
            }
          },
          UseRealWorldSymbolSizes = true
        }
      },
      MaxScale = 0,
      MinScale = 0,
      SymbolName = "TextSymbol-Blue"
    },
    StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties
    {
      AllowOverlappingLabels = true,
      LineOffset = 1.0
    },
    MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties
    {
      AlignLabelToLineDirection = true,
      AvoidPolygonHoles = true
    }
  };

  // Create a list of labels
  List<CIMLabelClass> labelClasses = new List<CIMLabelClass> { greenLabelClass, blueLabelClass };


  // Create linked feature description
  // Linked feature class name
  string linkedFeatureClassName = "WaterPipe";

  // Create fields for water pipe
  FieldDescription waterPipeGlobalID = FieldDescription.CreateGlobalIDField();
  FieldDescription pipeName = FieldDescription.CreateStringField("PipeName", 255);

  // Create a list of water pipe field descriptions
  List<FieldDescription> pipeFieldDescriptions = new List<FieldDescription> { waterPipeGlobalID, pipeName };

  // Create a linked feature class description
  FeatureClassDescription linkedFeatureClassDescription = new FeatureClassDescription(linkedFeatureClassName, pipeFieldDescriptions,
    new ShapeDescription(GeometryType.Polyline, spatialReference));

  // Create a SchemaBuilder object
  SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);

  // Add the creation of the linked feature class to the list of DDL tasks
  FeatureClassToken linkedFeatureClassToken = schemaBuilder.Create(linkedFeatureClassDescription);

  // Create an annotation feature class description object to describe the feature class to create
  AnnotationFeatureClassDescription annotationFeatureClassDescription =
    new AnnotationFeatureClassDescription(annotationFeatureClassName, fieldDescriptions, shapeDescription,
      generalPlacementProperties, labelClasses, new FeatureClassDescription(linkedFeatureClassToken))
    {
      IsAutoCreate = true,
      IsSymbolIDRequired = false,
      IsUpdatedOnShapeChange = true
    };

  // Add the creation of the annotation feature class to the list of DDL tasks
  schemaBuilder.Create(annotationFeatureClassDescription);

  // Execute the DDL
  bool success = schemaBuilder.Build();

  // Inspect error messages
  if (!success)
  {
    IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;
    //etc.
  }
}
Inheritance Hierarchy

System.Object
   ArcGIS.Core.CIM.CIMObject
      ArcGIS.Core.CIM.CIMLabelPlacementProperties
         ArcGIS.Core.CIM.CIMMaplexLabelPlacementProperties

Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also