[Athens] Finding if a line passes through a specific pixel .
So here we are with my first challenge. I am making Hyperion, a vector graphics editor using Athens , so far I have a nice line with several segments, I have added nice handlers to allow me to move the points (start and end of each segment) of the line around with the mouse, but now I want each time I click on a segment itself to create a new point.This way I will create more points with the mouse and bring more detail to the shape of the line / path. In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ? At first I thought to return the Athens surface as a Form but the form will give me back the colors of each pixel on a specific place, but that does not guarantee that my line / path passes through those pixels.
Why do you think it's a job for Athens? Shouldn't it be in a geometry lib? -- Best regards, Dennis Schetinin 2013/11/15 kilon alios <kilon.alios@gmail.com>
So here we are with my first challenge. I am making Hyperion, a vector graphics editor using Athens , so far I have a nice line with several segments, I have added nice handlers to allow me to move the points (start and end of each segment) of the line around with the mouse, but now I want each time I click on a segment itself to create a new point.This way I will create more points with the mouse and bring more detail to the shape of the line / path.
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
At first I thought to return the Athens surface as a Form but the form will give me back the colors of each pixel on a specific place, but that does not guarantee that my line / path passes through those pixels.
Libraries have no job. They have no obligations. No things they should or must do. They have methods that define what they can do. So there is nothing stopping Athens from having such a feature. Hence my question. But I found the formula for this, looks like i will be learning linear algebra and geometry. Good thing I love math :D ΣÏÎ¹Ï 15 Îοε 2013 6:24 Ï.μ., ο ÏÏήÏÏÎ·Ï "Dennis Schetinin" <chaetal@gmail.com> ÎγÏαÏε:
Why do you think it's a job for Athens? Shouldn't it be in a geometry lib?
--
Best regards,
Dennis Schetinin
2013/11/15 kilon alios <kilon.alios@gmail.com>
So here we are with my first challenge. I am making Hyperion, a vector graphics editor using Athens , so far I have a nice line with several segments, I have added nice handlers to allow me to move the points (start and end of each segment) of the line around with the mouse, but now I want each time I click on a segment itself to create a new point.This way I will create more points with the mouse and bring more detail to the shape of the line / path.
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
At first I thought to return the Athens surface as a Form but the form will give me back the colors of each pixel on a specific place, but that does not guarantee that my line / path passes through those pixels.
Hello, You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path. http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html Hilaire Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it. On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes < hilaire.fernandes@gmail.com> wrote:
Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
there are bezier algo in the system Stef On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes <hilaire.fernandes@gmail.com> wrote: Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
would I sound too lazy to ask in which class ? On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes < hilaire.fernandes@gmail.com> wrote:
Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
On Nov 23, 2013, at 11:24 AM, kilon alios <kilon.alios@gmail.com> wrote:
would I sound too lazy to ask in which class ?
On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote: there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes <hilaire.fernandes@gmail.com> wrote: Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
aaaaaahhh come on ... I am not THAT lazy :D of course I have searched it before asking. Unless I am blind I see loads of bezier methods, none that detects whether a point belong to a curve. But now you mention it I think I remember squeak was able to do add points to a curve via click or something similar, because thats what I wan to do. So I will take a look at it , most probably there is a method in there that does this. I want the user to click on a curve or line and there a new control point will be placed that will allow the user to shape the line or curve to a finer detail. A standard feature for all vector editors , 3d editors, even image editors. I am sorry if I miss something obvious here, its not laziness , its most likely stupidity or just the fact I am very new with this. This is the first time I try to make a vector editor.Again thank you all for trying to help me, you have done already a lot. On Sat, Nov 23, 2013 at 3:38 PM, Stéphane Ducasse <stephane.ducasse@inria.fr
wrote:
On Nov 23, 2013, at 11:24 AM, kilon alios <kilon.alios@gmail.com> wrote:
would I sound too lazy to ask in which class ?
On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes < hilaire.fernandes@gmail.com> wrote:
Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
There is some bits which can help you in this regard. The part of it is path tesseleration, which turns any path with complex curves into polygon (which has only straight lines), from there on, i think you can easily calculate the distance between any point and that polygon. Look at AthensCurveFlattener class, and its uses. the entry point is (flattenPath: aPath transform: aTransformation). But be aware that this is not fully integrated yet and subject to change in future. On 23 November 2013 15:20, kilon alios <kilon.alios@gmail.com> wrote:
aaaaaahhh come on ... I am not THAT lazy :D
of course I have searched it before asking. Unless I am blind I see loads of bezier methods, none that detects whether a point belong to a curve. But now you mention it I think I remember squeak was able to do add points to a curve via click or something similar, because thats what I wan to do. So I will take a look at it , most probably there is a method in there that does this.
I want the user to click on a curve or line and there a new control point will be placed that will allow the user to shape the line or curve to a finer detail. A standard feature for all vector editors , 3d editors, even image editors.
I am sorry if I miss something obvious here, its not laziness , its most likely stupidity or just the fact I am very new with this. This is the first time I try to make a vector editor.Again thank you all for trying to help me, you have done already a lot.
On Sat, Nov 23, 2013 at 3:38 PM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
On Nov 23, 2013, at 11:24 AM, kilon alios <kilon.alios@gmail.com> wrote:
would I sound too lazy to ask in which class ?
On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes < hilaire.fernandes@gmail.com> wrote:
Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
-- Best regards, Igor Stasenko.
have a look at roassal because mathieu started to implement something and he realized it was already in the image. On Nov 23, 2013, at 3:20 PM, kilon alios <kilon.alios@gmail.com> wrote:
aaaaaahhh come on ... I am not THAT lazy :D
of course I have searched it before asking. Unless I am blind I see loads of bezier methods, none that detects whether a point belong to a curve. But now you mention it I think I remember squeak was able to do add points to a curve via click or something similar, because thats what I wan to do. So I will take a look at it , most probably there is a method in there that does this.
I want the user to click on a curve or line and there a new control point will be placed that will allow the user to shape the line or curve to a finer detail. A standard feature for all vector editors , 3d editors, even image editors.
I am sorry if I miss something obvious here, its not laziness , its most likely stupidity or just the fact I am very new with this. This is the first time I try to make a vector editor.Again thank you all for trying to help me, you have done already a lot.
On Sat, Nov 23, 2013 at 3:38 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
On Nov 23, 2013, at 11:24 AM, kilon alios <kilon.alios@gmail.com> wrote:
would I sound too lazy to ask in which class ?
On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote: there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes <hilaire.fernandes@gmail.com> wrote: Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
yes I am looking at Roassal and definetly it gives a good insight into Athens. Igor you are correct from what I see from the algorithms for finding if a point passes through a curve the work in kinda similar ground. I have to confess I have not looked into it yet, cause I am trying to solve some other problems but I will definitely need this. Right now I try to figure out how to implement my GUI , I want to support Spec so the gui elements ( lets say a button) is rendered by Athens but also called by Spec. Also I want to make something that will easy to port once Athens becomes the main render engine of Pharo and replaces Morphic rendering. But I am happy to say Hyperion is moving forward, a basic vector graphics editor is coming to Pharo ;) On Sun, Nov 24, 2013 at 11:19 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
have a look at roassal because mathieu started to implement something and he realized it was already in the image.
On Nov 23, 2013, at 3:20 PM, kilon alios <kilon.alios@gmail.com> wrote:
aaaaaahhh come on ... I am not THAT lazy :D
of course I have searched it before asking. Unless I am blind I see loads of bezier methods, none that detects whether a point belong to a curve. But now you mention it I think I remember squeak was able to do add points to a curve via click or something similar, because thats what I wan to do. So I will take a look at it , most probably there is a method in there that does this.
I want the user to click on a curve or line and there a new control point will be placed that will allow the user to shape the line or curve to a finer detail. A standard feature for all vector editors , 3d editors, even image editors.
I am sorry if I miss something obvious here, its not laziness , its most likely stupidity or just the fact I am very new with this. This is the first time I try to make a vector editor.Again thank you all for trying to help me, you have done already a lot.
On Sat, Nov 23, 2013 at 3:38 PM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
On Nov 23, 2013, at 11:24 AM, kilon alios <kilon.alios@gmail.com> wrote:
would I sound too lazy to ask in which class ?
On Sat, Nov 23, 2013 at 11:35 AM, Stéphane Ducasse < stephane.ducasse@inria.fr> wrote:
there are bezier algo in the system
Stef
On Nov 20, 2013, at 9:55 PM, kilon alios <kilon.alios@gmail.com> wrote:
yes I found the formula for straight lines and I was wondering what was the one for bezier curves, so your reply could not have come a better moment. Thanks I will study it and implement it.
On Wed, Nov 20, 2013 at 9:21 PM, Hilaire Fernandes < hilaire.fernandes@gmail.com> wrote:
Hello,
You may want to calculate the distance between the mouse position and your path (I guess a bezier curve). Then given this distance and a tolerance to zero you decide if the mouse position is more or less on your path. Calculating the distance you will also get for free the place where to add a point on your path.
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html
Hilaire
Le 14/11/2013 21:07, kilon alios a écrit :
In order to do that I will have to check that the line passes through a specific pixel. Or to be more correct that the place that mouse has clicked is where my path passes through. How I do that ? Can Athens do that ? Can athens tell me which pixels my path passes through ?
-- Dr. Geo http://drgeo.eu
participants (6)
-
btc@openinworld.com -
Dennis Schetinin -
Hilaire Fernandes -
Igor Stasenko -
kilon alios -
Stéphane Ducasse