ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMGeneralPlacementProperties Class
Members Example

In This Topic
    CIMGeneralPlacementProperties Class
    In This Topic
    Represents general placement properties. This is base class for general placement properties for each label engine.
    Object Model
    CIMGeneralPlacementProperties ClassCIMColor 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.
        }
    }
    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;
    Change the active map's labeling engine from Standard to Maplex or vice versa
    //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
    var cimGeneralPlacement = cimMap.GeneralPlacementProperties;
    
    if (cimGeneralPlacement is CIMMaplexGeneralPlacementProperties)
    {
      //Current labeling engine is Maplex labeling engine
      //Create a new standard label engine properties
      var cimStandardPlacementProperties = new CIMStandardGeneralPlacementProperties();
      //Set the CIMMap's GeneralPlacementProperties to the new label engine
      cimMap.GeneralPlacementProperties = cimStandardPlacementProperties;
    }
    else
    {
      //Current labeling engine is Standard labeling engine
      //Create a new Maplex label engine properties
      var cimMaplexGeneralPlacementProperties = new CIMMaplexGeneralPlacementProperties();
      //Set the CIMMap's GeneralPlacementProperties to the new label engine
      cimMap.GeneralPlacementProperties = cimMaplexGeneralPlacementProperties;
    }
    //Set the map's definition
    MapView.Active.Map.SetDefinition(cimMap);
    Inheritance Hierarchy

    System.Object
       ArcGIS.Core.CIM.CIMObject
          ArcGIS.Core.CIM.CIMGeneralPlacementProperties
             ArcGIS.Core.CIM.CIMMaplexGeneralPlacementProperties
             ArcGIS.Core.CIM.CIMStandardGeneralPlacementProperties

    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also