ArcGIS Pro 3.0 API Reference Guide
ArcGIS.Core.Data.DDL Namespace / SchemaBuilder Class / Create Method / Create(AnnotationFeatureClassDescription) Method
Indicates the ArcGIS.Core.Data.Mapping.AnnotationFeatureClass to be created.
Example

In This Topic
    Create(AnnotationFeatureClassDescription) Method
    In This Topic
    Enqueue the create operation on the object referred to by the AnnotationFeatureClassDescription.
    Syntax
    Exceptions
    ExceptionDescription

    Memory ArcGIS.Core.Data.Geodatabase does not support feature-linked annotation feature classes.

    -or-

    The total path length for the ArcGIS.Core.Data.Mapping.AnnotationFeatureClass to be created must be less than 252 characters.

    annotationFeatureClassDescription is null.
    Remarks
    Example
    Creating an annotation feature class
    // 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
    // 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.
    }
    
    Requirements

    Target Platforms: Windows 11, Windows 10, Windows 8.1

    See Also