Well, that is the way I continued investigation yesterday. The answer I had found was that not every SVGLocatable.getBBox returns valid value. For most of elements it returned null. However some of the elements had reasonable values.
           if (e instanceof SVGLocatable){
               SVGRect r = getSVGRect((SVGLocatable) e);
               if (r!= null) {
                   System.out.print("+");
System.out.println(e.getClass().getName()); } else {
                   System.out.print("-");
                   System.out.println(e.getClass().getName());
               }
           }
Sample output (excerpt)
+org.apache.batik.dom.svg.SVGOMGElement
+org.apache.batik.dom.svg.SVGOMRectElement
+org.apache.batik.dom.svg.SVGOMGElement
+org.apache.batik.dom.svg.SVGOMPathElement
-org.apache.batik.dom.svg.SVGOMPathElement
-org.apache.batik.dom.svg.SVGOMRectElement
-org.apache.batik.dom.svg.SVGOMGElement

What is the reason that the element has no boundingBox?

Pepping, Florian wrote:
Hi Nazer,

mhhh, that's strange. As Thomas said, that's the way it should normally
work and my code looks very similiar to yours and it works.
Perhaps you can do one more thing. Test, if the node you are looking for
is an instance of SVGLocatable [if (node instanceof SVGLocatable) {...}]
Only if this is true, you can get the BoundingBox of this element.

If this also doesn't work, make a very simple example and test it there
first. Perhaps you can get closer to the problem then.

Florian


-----Original Message-----
From: Nazar Stasiv (Lohika, Inc) [mailto:[EMAIL PROTECTED] Sent: Monday, August 14, 2006 5:47 PM
To: [email protected]
Subject: Re: SVGOMGElement and coordinates?

Florian,

I get null here for return value

    public static SVGRect getSVGRect(SVGLocatable e){
        return e.getBBox(); //<-- returns null.
    }

And initialization I do with the code below

    public static SVGDocument parseSvg(String uri)  {
        UserAgent userAgent = new UserAgentAdapter();
        DocumentLoader loader = new DocumentLoader(userAgent);
        SVGDocument doc;
        try {
            doc = (SVGDocument) loader.loadDocument(uri);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        BridgeContext ctx = new BridgeContext(userAgent, loader);
        ctx.setDynamicState(BridgeContext.DYNAMIC);
        GVTBuilder builder = new GVTBuilder();
        GraphicsNode rootGN = builder.build(ctx, doc);
        loader.dispose();
        return doc;
    }
Everything goes fine (no exceptions in parseSvg(String)) untill getSVGRect is called. Please help.

Pepping, Florian wrote:
Hi Nazer,

I think I had the same problem some time ago. Before you can use
getBBox() you have to build the GVT-Tree in order to get this
information.
You can do this in the following way:
                SVGDocument svgDoc =
(SVGDocument)loader.loadDocument(file.toURL().toString());
                loader.dispose();
                  BridgeContext ctx = new BridgeContext(userAgent,
loader);
                ctx.setDynamicState(BridgeContext.DYNAMIC);
                GVTBuilder     builder = new GVTBuilder();
                 builder.build(ctx, svgDoc);

                  // use getBBox() afterwards

After this, SVGLocatable.getBBox() shouldn't return null any longer.

Florian

-----Original Message-----
From: Nazar Stasiv (Lohika, Inc) [mailto:[EMAIL PROTECTED] Sent: Monday, August 14, 2006 3:16 PM
To: [email protected]
Subject: Re: SVGOMGElement and coordinates?


SVGLocatable.getBBox(elem) returns null No javadoc comments are there
to
unveil the reason of such behaviour

Is there the other way to get coordinates of SVGOMGElement ?


[EMAIL PROTECTED] wrote:
Hi Nazer,

"Nazar Stasiv (Lohika, Inc)" <[EMAIL PROTECTED]> wrote on 08/14/2006

07:29:19 AM:

I use batik to operate SVG at runtime.
The question is how can I get SVGOMGElement coordinates when walking
DOM
tree of the SVG document?
   You should look at the SVG DOM.  In particular the 'getBBox'
method.
There are also methods get 'getIntersectionList' that could be
useful.
The reason I'm asking such a thing it that requirements are to
display
info popup near named elements of SVG. If I had coordinates of such
an
element I could use DOM to add new element to the tree with computed
coordinates for correct positioning of the info popup.
This is typically done with mouse over/out event handlers. This allows you to receive a DOM event when the mouse enters/exits a
particular
element or group in the SVG document.  If you need the sensitive area
to
be larger than the rendered area you can add a hidden element
(visibility="hidden" pointer-events="fill") that can cover the
expanded
area and tie your event handler to that.


---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to