Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2022-01

SVG Object

7 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Steve Gatenby

Not sure if this is the right place to ask about this one -

I am using the BCSVGViewer from bgra controls - for SVG viewing obviously :)

Would anybody know if there is a method to retrieve the object (within the svg) at specified x,y ?

or is it possible to use embedded links within the svg ?

I am looking to find which object has been clicked on within the svg to create a 'clickable' map

Any suggestions on a better place to post this also appreciated

Regards SteveG

Reply by email

Marc Weustink
to Steve Gatenby

I'm afraid there is no easy solution for that. SVGs are rendered from the first element to the last, where ever element (atleast in theory) can be a part of a given pixel. SVG elements do have a x,y,width,height but they may also be part of one or more transformations. To give you an idea, the (browser)app I'm currently working on displays several object, where every object has an origin(x,y) of 0,0 and they are finally placed by translations.
The easiest way (if you are in a browser context) is to add an onclick handler to your elements of interest.

Marc

Steve Gatenby wrote 17 lines
Not sure if this is the right place to ask about this one - I am using the BCSVGViewer from bgra controls - for SVG viewing obviously :) Would anybody know if there is a method to retrieve the object (within the svg) at specified x,y ? or is it possible to use embedded links within the svg ? I am looking to find which object has been clicked on within the svg to create a 'clickable' map Any suggestions on a better place to post this also appreciated Regards SteveG

Reply by email

Steve Gatenby
to Marc Weustink

Thanks Marc - seems I will need to stick with what I have then.

Currently I am pulling all object info from the SVG into an array and assigning quadrant positions.

Then do best guess by relative quadrant of mouse click position - works fine, but feels sloppy :)

Marc Weustink wrote 33 lines
I'm afraid there is no easy solution for that. SVGs are rendered from the first element to the last, where ever element (atleast in theory) can be a part of a given pixel. SVG elements do have a x,y,width,height but they may also be part of one or more transformations. To give you an idea, the (browser)app I'm currently working on displays several object, where every object has an origin(x,y) of 0,0 and they are finally placed by translations. The easiest way (if you are in a browser context) is to add an onclick handler to your elements of interest. Marc On 16-1-2022 23:34, Steve Gatenby via lazarus wrote: > Not sure if this is the right place to ask about this one - > > I am using the BCSVGViewer from bgra controls - for SVG viewing > obviously :) > > Would anybody know if there is a method to retrieve the object > (within the svg) at specified x,y ? > > or is it possible to use embedded links within the svg ? > > I am looking to find which object has been clicked on within the svg > to create a 'clickable' map > > Any suggestions on a better place to post this also appreciated > > Regards SteveG >

Reply by email

Mehmet Erol Sanliturk
to Steve Gatenby

On Tue, Jan 18, 2022 at 2:37 AM Steve Gatenby via lazarus <

Show quoted text 11 lines
wrote: Thanks Marc - seems I will need to stick with what I have then. Currently I am pulling all object info from the SVG into an array and assigning quadrant positions. Then do best guess by relative quadrant of mouse click position - works fine, but feels sloppy :)

If it is feasible for you , you may do the following :

In an array of a record , define approximate "bounding boxes" of your SVG graphic ( You may generate a "bounding box" array conforming to the given SVG ) .

In the "bounding box" array record , you may define a pointer showing the SVG object .
When a mouse click is obtained , you may search "bounding box" array and if it is related with an element of the SVG , from it you reach to the SVG element and
do whatever you want to do with it .

https://en.wikipedia.org/wiki/Minimum_bounding_box Minimum bounding box

( Please see attached pages . )

This idea may be considered as an alternative view which I can not say that it is very suitable for you . Only you may decide its usefulness .

Mehmet Erol Sanliturk

Show quoted text 41 lines
On 17/1/22 8:55 pm, Marc Weustink via lazarus wrote: > I'm afraid there is no easy solution for that. SVGs are rendered from > the first element to the last, where ever element (atleast in theory) > can be a part of a given pixel. SVG elements do have a > x,y,width,height but they may also be part of one or more > transformations. > To give you an idea, the (browser)app I'm currently working on > displays several object, where every object has an origin(x,y) of 0,0 > and they are finally placed by translations. > The easiest way (if you are in a browser context) is to add an onclick > handler to your elements of interest. > > Marc > > > > On 16-1-2022 23:34, Steve Gatenby via lazarus wrote: >> Not sure if this is the right place to ask about this one - >> >> I am using the BCSVGViewer from bgra controls - for SVG viewing >> obviously :) >> >> Would anybody know if there is a method to retrieve the object >> (within the svg) at specified x,y ? >> >> or is it possible to use embedded links within the svg ? >> >> I am looking to find which object has been clicked on within the svg >> to create a 'clickable' map >> >> Any suggestions on a better place to post this also appreciated >> >> Regards SteveG >> -- _______________________________________________ lazarus mailing list https://lists.lazarus-ide.org/listinfo/lazarus

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20220118/073c0804/attachment-0001.htm>

Reply by email

Steve Gatenby
to Mehmet Erol Sanliturk

Thank you Mehmet -

Tried to follow the math within the svg (inkscape) on my first attempt(s)

got completely lost (which leads to questioning ones intelligence) on the transforms, scales and differing units :)

So now fully fudging it by dividing the Svg source Height and Width by a grid format and call each one a quadrant location (x,y).

Then do the same with the OnClick position of the viewer (so relative quadrants / sizes), and find closest matching (for me) object. All depends on granularity of grid for accuracy.

Works, but is very dependent on complexity of the svg (not a problem for my use case so far)

Mehmet Erol Sanliturk wrote 97 lines
On Tue, Jan 18, 2022 at 2:37 AM Steve Gatenby via lazarus < <mailto:>> wrote: Thanks Marc - seems I will need to stick with what I have then. Currently I am pulling all object info from the SVG into an array and assigning quadrant positions. Then do best guess by relative quadrant of mouse click position - works fine, but feels sloppy :) If it is feasible for you , you may do the following : In an array of a record , define approximate "bounding boxes" of your SVG graphic ( You may generate? a "bounding box" array conforming to the given SVG ) . In? the "bounding box" array record , you may define a pointer showing the SVG object . When a mouse click is obtained , you may search? "bounding box" array and if it is related with an element of the SVG , from it you reach to the SVG element and do whatever you want to do with it . https://en.wikipedia.org/wiki/Minimum_bounding_box <https://en.wikipedia.org/wiki/Minimum_bounding_box> Minimum bounding box ( Please see attached pages . ) This idea may be considered as an alternative view which I can not say that it is very suitable for you . Only you may decide its usefulness . Mehmet Erol Sanliturk On 17/1/22 8:55 pm, Marc Weustink via lazarus wrote: > I'm afraid there is no easy solution for that. SVGs are rendered from > the first element to the last, where ever element (atleast in theory) > can be a part of a given pixel. SVG elements do have a > x,y,width,height but they may also be part of one or more > transformations. > To give you an idea, the (browser)app I'm currently working on > displays several object, where every object has an origin(x,y) of 0,0 > and they are finally placed by translations. > The easiest way (if you are in a browser context) is to add an onclick > handler to your elements of interest. > > Marc > > > > On 16-1-2022 23:34, Steve Gatenby via lazarus wrote: >> Not sure if this is the right place to ask about this one - >> >> I am using the BCSVGViewer from bgra controls - for SVG viewing >> obviously :) >> >> Would anybody know if there is a method to retrieve the object >> (within the svg) at specified x,y ? >> >> or is it possible to use embedded links within the svg ? >> >> I am looking to find which object has been clicked on within the svg >> to create a 'clickable' map >> >> Any suggestions on a better place to post this also appreciated >> >> Regards SteveG >> -- _______________________________________________ lazarus mailing list <mailto:> https://lists.lazarus-ide.org/listinfo/lazarus <https://lists.lazarus-ide.org/listinfo/lazarus>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20220118/08df1829/attachment.htm>

Reply by email

Mehmet Erol Sanliturk
to Steve Gatenby

On Tue, Jan 18, 2022 at 7:22 AM Steve Gatenby via lazarus <

Show quoted text 21 lines
wrote: Thank you Mehmet - Tried to follow the math within the svg (inkscape) on my first attempt(s) got completely lost (which leads to questioning ones intelligence) on the transforms, scales and differing units :) So now fully fudging it by dividing the Svg source Height and Width by a grid format and call each one a quadrant location (x,y). Then do the same with the OnClick position of the viewer (so relative quadrants / sizes), and find closest matching (for me) object. All depends on granularity of grid for accuracy. Works, but is very dependent on complexity of the svg (not a problem for my use case so far)

My primary profession was "Elementary School Teacher" . In our profession , determiner factor is not intelligence ( because everyone virtually has sufficient amount of it )
but "work with respect to scientific principles , continuous efforts , knowledge of the subject" . Please do not blame yourself with respect to intelligence .

Later on I went to the Middle East Technical University ( Ankara , Turkey ) to be a
( Mathematician , Computer Expert , a Good Manager of Money ( I have never been able
to earn sufficient money to manage other than my monthly salaries )) , and then an
instructor in another University ( Hacettepe ) . Always my emphasized point to my
students and nearly every other one around me was the principle : "Not intelligence , but sufficient study and work" .

My opinion is that you also need sufficient study and work , not intelligence because
it is easily understandable that you have plenty of it .

You may see the following page and its associated subpages leading you to "Computer Graphics" books if you think you need to review or learn subjects about
it .

https://en.wikipedia.org/wiki/Category:Computer_graphics Category:Computer graphics

And also useful ( more ) pages ...

https://en.wikipedia.org/wiki/Category:Communication_design Category:Communication design

https://en.wikipedia.org/wiki/Category:Information_visualization Category:Information visualization

https://en.wikipedia.org/wiki/Category:Visualization_(graphic) Category:Visualization (graphic)

.
.
.

This means that your problem is not so easy to handle as seen from a distant point .

With my best wishes for all ,

Mehmet Erol Sanliturk

Show quoted text 97 lines
On 18/1/22 9:53 am, Mehmet Erol Sanliturk wrote: On Tue, Jan 18, 2022 at 2:37 AM Steve Gatenby via lazarus < > wrote: > Thanks Marc - seems I will need to stick with what I have then. > > Currently I am pulling all object info from the SVG into an array and > assigning quadrant positions. > > Then do best guess by relative quadrant of mouse click position - works > fine, but feels sloppy :) > > If it is feasible for you , you may do the following : In an array of a record , define approximate "bounding boxes" of your SVG graphic ( You may generate a "bounding box" array conforming to the given SVG ) . In the "bounding box" array record , you may define a pointer showing the SVG object . When a mouse click is obtained , you may search "bounding box" array and if it is related with an element of the SVG , from it you reach to the SVG element and do whatever you want to do with it . https://en.wikipedia.org/wiki/Minimum_bounding_box Minimum bounding box ( Please see attached pages . ) This idea may be considered as an alternative view which I can not say that it is very suitable for you . Only you may decide its usefulness . Mehmet Erol Sanliturk > > On 17/1/22 8:55 pm, Marc Weustink via lazarus wrote: > > I'm afraid there is no easy solution for that. SVGs are rendered from > > the first element to the last, where ever element (atleast in theory) > > can be a part of a given pixel. SVG elements do have a > > x,y,width,height but they may also be part of one or more > > transformations. > > To give you an idea, the (browser)app I'm currently working on > > displays several object, where every object has an origin(x,y) of 0,0 > > and they are finally placed by translations. > > The easiest way (if you are in a browser context) is to add an onclick > > handler to your elements of interest. > > > > Marc > > > > > > > > On 16-1-2022 23:34, Steve Gatenby via lazarus wrote: > >> Not sure if this is the right place to ask about this one - > >> > >> I am using the BCSVGViewer from bgra controls - for SVG viewing > >> obviously :) > >> > >> Would anybody know if there is a method to retrieve the object > >> (within the svg) at specified x,y ? > >> > >> or is it possible to use embedded links within the svg ? > >> > >> I am looking to find which object has been clicked on within the svg > >> to create a 'clickable' map > >> > >> Any suggestions on a better place to post this also appreciated > >> > >> Regards SteveG > >> > -- > _______________________________________________ > lazarus mailing list > > https://lists.lazarus-ide.org/listinfo/lazarus > -- _______________________________________________ lazarus mailing list https://lists.lazarus-ide.org/listinfo/lazarus

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20220118/37e31c33/attachment-0001.htm>

Reply by email

Steve Gatenby
to Mehmet Erol Sanliturk

Thanks Mehmet - I see some study coming my way :)

Mehmet Erol Sanliturk wrote 208 lines
On Tue, Jan 18, 2022 at 7:22 AM Steve Gatenby via lazarus < <mailto:>> wrote: Thank you Mehmet - Tried to follow the math within the svg (inkscape) on my first attempt(s) got completely lost (which leads to questioning ones intelligence) on the transforms, scales and differing units :) So now fully fudging it by dividing the Svg source Height and Width by a grid format and call each one a quadrant location (x,y). Then do the same with the OnClick position of the viewer (so relative quadrants / sizes), and find closest matching (for me) object. All depends on granularity of grid for accuracy. Works, but is very dependent on complexity of the svg (not a problem for my use case so far) My primary profession was "Elementary School Teacher" . In our profession , determiner factor is not intelligence ( because everyone virtually has sufficient amount of it ) but? "work with respect to scientific principles ,? continuous efforts , knowledge of the subject" .? Please do not blame yourself with respect to intelligence . Later on I went to the Middle East Technical University ( Ankara , Turkey ) to be a ( Mathematician , Computer Expert , a Good Manager of Money ( I have never been able to earn sufficient money to manage other than my monthly salaries )) , and then an instructor in another University ( Hacettepe ) . Always my emphasized point to my students and nearly every other one around me was the principle : "Not intelligence , but sufficient study and work" . My opinion is that you also need sufficient study and work , not intelligence because it is easily understandable that you have plenty of it . You may see the following page and its associated subpages leading you to "Computer Graphics" books if you think you need to review or learn subjects about it . https://en.wikipedia.org/wiki/Category:Computer_graphics <https://en.wikipedia.org/wiki/Category:Computer_graphics> Category:Computer graphics And also useful? ( more ) pages ... https://en.wikipedia.org/wiki/Category:Communication_design <https://en.wikipedia.org/wiki/Category:Communication_design> Category:Communication design https://en.wikipedia.org/wiki/Category:Information_visualization <https://en.wikipedia.org/wiki/Category:Information_visualization> Category:Information visualization https://en.wikipedia.org/wiki/Category:Visualization_(graphic) <https://en.wikipedia.org/wiki/Category:Visualization_(graphic)> Category:Visualization (graphic) ????? . ????? . ????? . This means that your problem is not so easy to handle as seen from a distant point . With my best wishes for all , Mehmet Erol Sanliturk On 18/1/22 9:53 am, Mehmet Erol Sanliturk wrote: > > > On Tue, Jan 18, 2022 at 2:37 AM Steve Gatenby via lazarus > < > <mailto:>> wrote: > > Thanks Marc - seems I will need to stick with what I have then. > > Currently I am pulling all object info from the SVG into an > array and > assigning quadrant positions. > > Then do best guess by relative quadrant of mouse click > position - works > fine, but feels sloppy :) > > > > If it is feasible for you , you may do the following : > > > In an array of a record , define approximate "bounding boxes" of your > SVG graphic ( You may generate? a "bounding box" array conforming > to the given SVG ) . > > In the "bounding box" array record , you may define a pointer > showing the SVG object . > When a mouse click is obtained , you may search "bounding box" > array and > if it is related with an element of the SVG , from it you reach > to the SVG element and > do whatever you want to do with it . > > > https://en.wikipedia.org/wiki/Minimum_bounding_box > <https://en.wikipedia.org/wiki/Minimum_bounding_box> > Minimum bounding box > > ( Please see attached pages . ) > > > This idea may be considered as an alternative view which I can > not say that > it is very suitable for you . Only you may decide its usefulness . > > > > Mehmet Erol Sanliturk > > > > > > On 17/1/22 8:55 pm, Marc Weustink via lazarus wrote: > > I'm afraid there is no easy solution for that. SVGs are > rendered from > > the first element to the last, where ever element (atleast > in theory) > > can be a part of a given pixel. SVG elements do have a > > x,y,width,height but they may also be part of one or more > > transformations. > > To give you an idea, the (browser)app I'm currently working on > > displays several object, where every object has an > origin(x,y) of 0,0 > > and they are finally placed by translations. > > The easiest way (if you are in a browser context) is to add > an onclick > > handler to your elements of interest. > > > > Marc > > > > > > > > On 16-1-2022 23:34, Steve Gatenby via lazarus wrote: > >> Not sure if this is the right place to ask about this one - > >> > >> I am using the BCSVGViewer from bgra controls - for SVG > viewing > >> obviously :) > >> > >> Would anybody know if there is a method to retrieve the > object > >> (within the svg) at specified x,y ? > >> > >> or is it possible to use embedded links within the svg ? > >> > >> I am looking to find which object has been clicked on > within the svg > >> to create a 'clickable' map > >> > >> Any suggestions on a better place to post this also > appreciated > >> > >> Regards SteveG > >> > -- > _______________________________________________ > lazarus mailing list > > <mailto:> > https://lists.lazarus-ide.org/listinfo/lazarus > <https://lists.lazarus-ide.org/listinfo/lazarus> > -- _______________________________________________ lazarus mailing list <mailto:> https://lists.lazarus-ide.org/listinfo/lazarus <https://lists.lazarus-ide.org/listinfo/lazarus>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20220119/5c779e30/attachment-0001.htm>

Reply by email