How can i get the rectangle boundary of an annotation object using ArcObjects?

Once we select an object on the map, there is a boundary as shown in the first picture.

Also is there an option to get the minimum rectangle that covers the text as shown in second picture?

enter image description here

I tried

    IAnnotationFeature annoFeature;

but this only gives me a polyline geometry which seems to be the baseline of text

2 Answers 2


For your first example, try IElement.QueryOutline:

QueryOutline returns a polygon representing the outline of the element. A valid polygon object must be passed in to the method along with the current display. The method then updates the polygon object. The results for point and line elements will be similar to the minimum bounding envelope returned by QueryBounds, while the results for polygon elements while be the actual outline of the element (not the bounding envelope).

As for your second example, it's much more difficult, but should be possible by first converting the annotation to a multi-part polygon and then getting the minimum area bounding rectangle of that polygon.

The following two links should have enough code to get you there, or very close, but they are in VBA, not C#:

  • nice! this got me the outline as per the picture 1 in question..any tips on getting the second one? Is this text always going to be at a ratio to the polygon we obtained through QueryOutline?
    – vinayan
    Commented Oct 27, 2012 at 10:50
  • updated answer, might be possible but much more difficult
    – blah238
    Commented Oct 28, 2012 at 0:24
  • I had seen that example..but i never thought of getting a minimum boundary from those :) .. for minimum boundary, i think ITopological.ConvexHull could be used..thanks for the answer..still would have loved a simpler method ;)
    – vinayan
    Commented Oct 28, 2012 at 3:55

The rectangle displayed in ArcMap is defined on the Feature itself and not on the Annotation. To get this rectangle you cast your IAnnotationFeature to IFeature and then get the geometry using IFeature.Shape or IFeature.ShapeCopy.

IAnnotationFeature annoFeature;
var feature = (IFeature) annoFeature;
IGeometry annoGeometry = feature.Shape;

If you want to manipulate an annotation element or its symbol in code the rectangle will update when IFeature.Store() is called.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.