/**
   * Constructs a circle according to the specified parameters.
   *
   * @param ctx the bridge context to use
   * @param e the element that describes a rect element
   * @param shapeNode the shape node to initialize
   */
  protected void buildShape(BridgeContext ctx, Element e, ShapeNode shapeNode) {
    try {
      SVGOMCircleElement ce = (SVGOMCircleElement) e;

      // 'cx' attribute - default is 0
      AbstractSVGAnimatedLength _cx = (AbstractSVGAnimatedLength) ce.getCx();
      float cx = _cx.getCheckedValue();

      // 'cy' attribute - default is 0
      AbstractSVGAnimatedLength _cy = (AbstractSVGAnimatedLength) ce.getCy();
      float cy = _cy.getCheckedValue();

      // 'r' attribute - required
      AbstractSVGAnimatedLength _r = (AbstractSVGAnimatedLength) ce.getR();
      float r = _r.getCheckedValue();

      float x = cx - r;
      float y = cy - r;
      float w = r * 2;
      shapeNode.setShape(new Ellipse2D.Float(x, y, w, w));
    } catch (LiveAttributeException ex) {
      throw new BridgeException(ctx, ex);
    }
  }