4

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;
 annoFeature.Annotation.Geometry;

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

PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked Oct 27, 2012 at 4:09

2 Answers 2

5

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#:

PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
answered Oct 27, 2012 at 6:59
3
  • 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? Commented Oct 27, 2012 at 10:50
  • updated answer, might be possible but much more difficult 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 ;) Commented Oct 28, 2012 at 3:55
2

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.

answered Oct 27, 2012 at 9:57

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.