You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Abraham Rodriguez Mota <ab...@gmail.com> on 2008/07/07 20:09:43 UTC

adding and id attribute when using SVGGraphics

Hello everybody,

I have been trying to find the way to add an "id" attribute to a rectangle
using SVGGraphics2D. I got the code shown below. But I haven't found the way
to do it. It looks as it is an old issue but i couldn't find a concrete
answer.

thanks for your help.

public void paint(SVGGraphics2D g2d) {
        EventTarget target;
        g2d.setPaint(Color.red);
        g2d.fill(new Rectangle(10, 10, 100, 100));
        Element root=svgDocument.getDocumentElement();
        g2d.getRoot(root);

}

Re: adding and id attribute when using SVGGraphics

Posted by Abraham Rodriguez Mota <ab...@gmail.com>.
Hi Thomas,

I agree with your explanation. But I was thinking to keep the SVGGraphics2D
object alive and use it every time a user clicks on the element. However, it
looks that that will mean that every time the figure is re-draw or modified,
the events and id should be added again too. So it looks that is not the
best option to achieve my goals.

Maybe it could be worth to try to save the svg representation as a
DocumentFragment that can be easily traverse and modified, before it is
added to the document.

Anyway, Thanks a lot for your help.

All the best

On Tue, Jul 8, 2008 at 10:37 AM, <th...@kodak.com> wrote:

>
> Hi Abraham,
>
> "Abraham Rodriguez Mota" <ab...@gmail.com> wrote on 07/08/2008
> 04:59:20 AM:
>
> > I think that your code works making the assumption that the added
> > element is always the last children in the document, but I need to
> > added elements in different locations through the SVG tree.
>
>
>    It assumes that the element just drawn is the last child of
> the element passed to getRoot, when getRoot is called immediately
> after the element is drawn, which should always be the case.
>
> > I also thought that using a Document Fragment and doing what you
> > propouse could resolve the problem but I that is to complex for
> > something that commun, isn't it?.
>
>    The problem is that the Graphics2D is ment to take a hunk of
> Java2D drawing and essentially persist it to SVG.  It isn't
> designed to annotate and structure the generated SVG.  It's tricky
> enough to transcode almost all of the Graphics2D commands allowing
> the user to try and muck with the content as it's generated would
> be a real pain.
>
> > On 7/8/08, thomas.deweese@kodak.com <th...@kodak.com> wrote:
> >
> > Hi Abraham,
> >
> > "Abraham Rodriguez Mota" <ab...@gmail.com> wrote on
> > 07/07/2008 02:09:43 PM:
> >
> > > I have been trying to find the way to add an "id" attribute to a
> > > rectangle using SVGGraphics2D. I got the code shown below. But I
> > > haven't found the way to do it. It looks as it is an old issue but i
> > > couldn't find a concrete answer.
> >
> >   Yah, there isn't a really good answer, but the following
> > will work.
> >
> > > public void paint(SVGGraphics2D g2d) {
> > >         EventTarget target;
> > >         g2d.setPaint(Color.red);
> > >         g2d.fill(new Rectangle(10, 10, 100, 100));
> > >         Element root=svgDocument.getDocumentElement();
> > >         g2d.getRoot(root);
> >
> >         Element curr = root;
> >         Element lc = curr;
> >         while (lc != null) {
> >            curr = lc;
> >            lc = (Element)curr.getLastChild();
> >         }
> >         curr.setAttributeNS(null, "id", "some_id_you_want");
> >
> > > }
>

Re: adding and id attribute when using SVGGraphics

Posted by th...@kodak.com.
Hi Abraham,

"Abraham Rodriguez Mota" <ab...@gmail.com> wrote on 07/08/2008 
04:59:20 AM:

> I think that your code works making the assumption that the added 
> element is always the last children in the document, but I need to 
> added elements in different locations through the SVG tree.

   It assumes that the element just drawn is the last child of 
the element passed to getRoot, when getRoot is called immediately 
after the element is drawn, which should always be the case.

> I also thought that using a Document Fragment and doing what you 
> propouse could resolve the problem but I that is to complex for 
> something that commun, isn't it?. 

   The problem is that the Graphics2D is ment to take a hunk of
Java2D drawing and essentially persist it to SVG.  It isn't
designed to annotate and structure the generated SVG.  It's tricky
enough to transcode almost all of the Graphics2D commands allowing
the user to try and muck with the content as it's generated would
be a real pain.

> On 7/8/08, thomas.deweese@kodak.com <th...@kodak.com> wrote: 
> 
> Hi Abraham, 
> 
> "Abraham Rodriguez Mota" <ab...@gmail.com> wrote on 
> 07/07/2008 02:09:43 PM:
> 
> > I have been trying to find the way to add an "id" attribute to a 
> > rectangle using SVGGraphics2D. I got the code shown below. But I 
> > haven't found the way to do it. It looks as it is an old issue but i
> > couldn't find a concrete answer.
> 
>   Yah, there isn't a really good answer, but the following 
> will work. 
> 
> > public void paint(SVGGraphics2D g2d) {
> >         EventTarget target;
> >         g2d.setPaint(Color.red);
> >         g2d.fill(new Rectangle(10, 10, 100, 100)); 
> >         Element root=svgDocument.getDocumentElement();
> >         g2d.getRoot(root);
> 
>         Element curr = root; 
>         Element lc = curr; 
>         while (lc != null) { 
>            curr = lc; 
>            lc = (Element)curr.getLastChild(); 
>         } 
>         curr.setAttributeNS(null, "id", "some_id_you_want"); 
> 
> > } 

Re: adding and id attribute when using SVGGraphics

Posted by Abraham Rodriguez Mota <ab...@gmail.com>.
Hi Thomas,

I think that your code works making the assumption that the added element is
always the last children in the document, but I need to added elements in
different locations through the SVG tree. I also thought that using a
Document Fragment and doing what you propouse could resolve the problem but
I that is to complex for something that commun, isn't it?.


thanks

Abraham

On 7/8/08, thomas.deweese@kodak.com <th...@kodak.com> wrote:
>
>
> Hi Abraham,
>
> "Abraham Rodriguez Mota" <ab...@gmail.com> wrote on 07/07/2008
> 02:09:43 PM:
>
> > I have been trying to find the way to add an "id" attribute to a
> > rectangle using SVGGraphics2D. I got the code shown below. But I
> > haven't found the way to do it. It looks as it is an old issue but i
> > couldn't find a concrete answer.
>
>   Yah, there isn't a really good answer, but the following
> will work.
>
> > public void paint(SVGGraphics2D g2d) {
> >         EventTarget target;
> >         g2d.setPaint(Color.red);
> >         g2d.fill(new Rectangle(10, 10, 100, 100));
> >         Element root=svgDocument.getDocumentElement();
> >         g2d.getRoot(root);
>
>         Element curr = root;
>         Element lc = curr;
>         while (lc != null) {
>            curr = lc;
>            lc = (Element)curr.getLastChild();
>         }
>         curr.setAttributeNS(null, "id", "some_id_you_want");
>
> > }

Re: adding and id attribute when using SVGGraphics

Posted by th...@kodak.com.
Hi Abraham,

"Abraham Rodriguez Mota" <ab...@gmail.com> wrote on 07/07/2008 
02:09:43 PM:

> I have been trying to find the way to add an "id" attribute to a 
> rectangle using SVGGraphics2D. I got the code shown below. But I 
> haven't found the way to do it. It looks as it is an old issue but i
> couldn't find a concrete answer.

  Yah, there isn't a really good answer, but the following
will work.

> public void paint(SVGGraphics2D g2d) {
>         EventTarget target;
>         g2d.setPaint(Color.red);
>         g2d.fill(new Rectangle(10, 10, 100, 100)); 
>         Element root=svgDocument.getDocumentElement();
>         g2d.getRoot(root);

        Element curr = root;
        Element lc = curr;
        while (lc != null) {
           curr = lc;
           lc = (Element)curr.getLastChild();
        }
        curr.setAttributeNS(null, "id", "some_id_you_want");

> }