ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Data.DDL Namespace / AnnotationFeatureClassDescription Class / IsUpdatedOnShapeChange Property
Example

In This Topic
    IsUpdatedOnShapeChange Property
    In This Topic
    Indicates whether or not the annotation will be updated when the feature's shape changes.
    Syntax
    Public Property IsUpdatedOnShapeChange As Boolean
    public bool IsUpdatedOnShapeChange {get; set;}
    Example
    Creating an annotation feature class
    {
      // Must be called within QueuedTask.Run
      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
    {
      // Must be called within QueuedTask.Run
      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.
        }
      }
    }
    Creating an annotation feature class inside feature dataset
    {
      // Must be called within QueuedTask.Run
      void CreateAnnotationFeatureClassUsingExistingAnnotationFeatureClassInDataset(
        Geodatabase geodatabase)
      {
        // Create a Cities annotation feature class inside Places feature dataset using existing annotation feature class 
    
        // Feature dataset name
        string featureDatasetName = "Places";
    
        // Annotation feature class name
        string annotationFeatureClassName = "CitiesAnnotation";
    
        // Create a SchemaBuilder object
        SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);
    
        // Open existing annotation feature class name
        using (AnnotationFeatureClass existingAnnotationFeatureClass = geodatabase.OpenDataset<AnnotationFeatureClass>("ExistingAnnotationFeatureClass"))
        {
          // Create Feature dataset description
          FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription(featureDatasetName, existingAnnotationFeatureClass.GetDefinition().GetSpatialReference());
    
          // Add the creation of the Places dataset to DDL task
          FeatureDatasetToken featureDatasetToken = schemaBuilder.Create(featureDatasetDescription);
    
          // Create an annotation feature class description using existing annotation feature class
          AnnotationFeatureClassDescription annotationFeatureClassDescription = new AnnotationFeatureClassDescription(annotationFeatureClassName,
              existingAnnotationFeatureClass.GetDefinition())
          {
            IsAutoCreate = true,
            IsSymbolIDRequired = false,
            IsUpdatedOnShapeChange = true
          };
    
          // Add the creation of the Cities annotation feature class inside Places feature dataset
          schemaBuilder.Create(new FeatureDatasetDescription(featureDatasetToken),
            annotationFeatureClassDescription);
    
          // Execute the DDL
          bool success = schemaBuilder.Build();
    
          // Inspect error messages
          if (!success)
          {
            IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;
            //etc.
          }
        }
      }
    }
    Requirements

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

    ArcGIS Pro version: 3.0 or higher.
    See Also