# Getting Annotation Text Geometry as Polygon Using ArcObjects?

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?

I tried

    IAnnotationFeature annoFeature;
annoFeature.Annotation.Geometry;


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

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 Oct 27 '12 at 10:50
• updated answer, might be possible but much more difficult – blah238 Oct 28 '12 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 Oct 28 '12 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.