code: function getScreenBBox (targetel) {
  
          while (targetel.getScreenCTM == null && targetel.parentNode == null) {
              targetel = targetel.parentNode;
          }
  
          var bbox = {},
              matrix = targetel.getScreenCTM(),
              tbbox = targetel.getBBox(),
              width = tbbox.width,
              height = tbbox.height,
              x = tbbox.x,
              y = tbbox.y;
  
          point.x = x;
          point.y = y;
          bbox.nw = point.matrixTransform(matrix);
          point.x += width;
          bbox.ne = point.matrixTransform(matrix);
          point.y += height;
          bbox.se = point.matrixTransform(matrix);
          point.x -= width;
          bbox.sw = point.matrixTransform(matrix);
          point.y -= height / 2;
          bbox.w = point.matrixTransform(matrix);
          point.x += width;
          bbox.e = point.matrixTransform(matrix);
          point.x -= width / 2;
          point.y -= height / 2;
          bbox.n = point.matrixTransform(matrix);
          point.y += height;
          bbox.s = point.matrixTransform(matrix);
  
          return bbox;
      }
docs: Private - gets the screen coordinates of a shape  Given a shape on the screen, will return an SVGPoint for the locations n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest), sw(southwest).  +-+-+ |   | +   + |   | +-+-+  Returns an Object {n, s, e, w, nw, sw, ne, se}