# Proposals/getBBoxOf

This is a proposal for ISSUE-2283.

It is common to want to get the bounding box of an element in a different element's coordinate space. This can be computed in script, but it is tedious. For example with the following document:

<g id="A" transform="..."> <g transform="..."> <path id="P" d="..."/> </g> </g>

Say you want to click on the <path> and create a <rect> as a child of g#A that shows the bounding box of the <path>. You need to:

- do bbox = P.getBBox()
- Construct SVGPoint objects for each of the four corners of bbox
- do m = P.getTransformToElement(A)
- Transform each of the four SVGPoints with m
- Compute the bounding box of these four points (a bunch of Math.min() and Math.max() calls)
- Create the <rect> and set its x/y/width/height based on this computed bbox

A few approaches to simplify this have been discussed, and the one we seemed to settle on was to introduce a new method that can return the bounding box of another element in the current element's coordinate space.

**Proposal:** Extend the SVGLocatable interface with a getBBoxOf method:

interface SVGLocatable { ... SVGRect getBBoxOf(SVGLocatable element); };

which does the following:

- Let
*this*be the SVGLocatable element on which the method was called. - Let
*r1*be the result of calling*element*.getBBox(). - Let
*p1*,*p2*,*p3*and*p4*be the four points of*r1*(in any order). - Let
*p5*,*p6*,*p7*and*p8*be the four points*p1*,*p2*,*p3*and*p4*transformed from the coordinate space of*this*to the coordinate space of*element*. - Let
*r2*be a new SVGRect object that is the tight bounding box in the coordinate space of*element*that contains*p5*,*p6*,*p7*and*p8*. - Return
*r2*.