ArcGIS Pro 3.3 API Reference Guide
ArcGIS.Core.Geometry Namespace / GeometryEngine Class / Rotate Method
The geometry to rotate. If the geometry is an Envelope, then it will be converted to a polygon.
The origin around which the geometry will be rotated.
The rotation angle in radians.
Example

In This Topic
    Rotate Method (GeometryEngine)
    In This Topic
    Rotates the geometry about the specified origin point.
    Syntax
    Public Function Rotate( _
       ByVal geometry As Geometry, _
       ByVal origin As MapPoint, _
       ByVal rotationAngle As Double _
    ) As Geometry

    Parameters

    geometry
    The geometry to rotate. If the geometry is an Envelope, then it will be converted to a polygon.
    origin
    The origin around which the geometry will be rotated.
    rotationAngle
    The rotation angle in radians.

    Return Value

    The rotated geometry. If the input geometry is an Envelope, then a polygon is returned. If the input geometry is empty, then an empty geometry is returned.
    Exceptions
    ExceptionDescription
    Either geometry or origin or both are null.
    The method is not implemented for GeometryBag.
    Incompatible spatial references between the input geometries.
    Example
    Rotate a MapPoint
    MapPoint pt = MapPointBuilderEx.CreateMapPoint(1.0, 3.0);
    MapPoint rotatePt = MapPointBuilderEx.CreateMapPoint(3.0, 3.0);
    
    Geometry result = GeometryEngine.Instance.Rotate(pt, rotatePt, Math.PI / 2);
    // result point is (3, 1)
    Rotate a Polyline
    // rotate a polyline
    
    MapPoint fixedPt = MapPointBuilderEx.CreateMapPoint(3.0, 3.0);
    
    List<MapPoint> pts = new List<MapPoint>();
    pts.Add(MapPointBuilderEx.CreateMapPoint(1.0, 1.0));
    pts.Add(MapPointBuilderEx.CreateMapPoint(1.0, 5.0));
    pts.Add(MapPointBuilderEx.CreateMapPoint(5, 5));
    pts.Add(MapPointBuilderEx.CreateMapPoint(5.0, 1.0));
    Polyline polyline = PolylineBuilderEx.CreatePolyline(pts);
    
    Polyline rotated = GeometryEngine.Instance.Rotate(polyline, fixedPt, Math.PI / 4) as Polyline;  // rotate 45 deg
    Rotate or Move the Annotation
          await QueuedTask.Run(() =>
          {
              //Don't use 'Shape'....Shape is the bounding box of the annotation text. This is NOT what you want...
              //
              //var insp = new Inspector();
              //insp.Load(annoLayer, oid);
              //var shape = insp["SHAPE"] as Polygon;
              //...wrong shape...
    
              //Instead, we must get the TextGraphic from the anno feature.
              //The TextGraphic shape will be the anno baseline...
              //At 2.1 the only way to retrieve this textLine is to obtain the TextGraphic from the AnnotationFeature
              QueryFilter qf = new QueryFilter()
              {
                  WhereClause = "OBJECTID = 1"
              };
    
      //annoLayer is ~your~ Annotation layer
    
      using (var rowCursor = annoLayer.Search(qf))
      {
        if (rowCursor.MoveNext())
        {
          using (var annoFeature = rowCursor.Current as 
                      ArcGIS.Core.Data.Mapping.AnnotationFeature)
          {
            var graphic = annoFeature.GetGraphic();
            var textGraphic = graphic as CIMTextGraphic;
            var textLine = textGraphic.Shape as Polyline;
            // rotate the shape 90 degrees
            var origin = GeometryEngine.Instance.Centroid(textLine);
            Geometry rotatedPolyline = GeometryEngine.Instance.Rotate(textLine, origin, System.Math.PI / 2);
            //Move the line 5 "units" in the x and y direction
            //GeometryEngine.Instance.Move(textLine, 5, 5);
    
            EditOperation op = new EditOperation();
            op.Name = "Change annotation angle";
            op.Modify(annoLayer, oid, rotatedPolyline);
            op.Execute();
          }
        }
      }
    });
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also