[Pharo-dev] Coordinates problem with Athens and Morphic while coding Hyperion

Igor Stasenko siguctua at gmail.com
Thu Nov 28 23:36:27 EST 2013


On 28 November 2013 22:49, kilon alios <kilon.alios at gmail.com> wrote:

> well I could ask you to give me access to those files , that would be a
> good start  ;)
>
> I am so new to this google drive thing
>
> hehe.. me too.. apperently it doesn't wants to just attach files,
and need multiple more clicks to enable weird sharing, like sending a copy
is not
good enough :)


>
> On Thu, Nov 28, 2013 at 10:08 PM, Igor Stasenko <siguctua at gmail.com>wrote:
>
>>
>>  BezierMorph.st.gz<https://docs.google.com/file/d/0B7dd-52sqS20SW9JMUxZREh1ZkJEc1UwZkNiYy1jbnZnV2Y0/edit?usp=drive_web>
>>
>>  Morphic-BezierCurve.st<https://docs.google.com/file/d/0B7dd-52sqS20LW5XV2NwaFpPeEJudFFGZ3ZsZFBxZC0zaVBr/edit?usp=drive_web>
>>
>> On 28 November 2013 16:54, kilon alios <kilon.alios at gmail.com> wrote:
>>
>>> absolutely, more code mean deeper understanding how to be more dangerous
>>> as a coder
>>>
>>
>> here it is.. it took me some effort to find it, buried under piles of
>> other things.
>> i don't know which one is latest/working, and don't ask me how it works
>> .. it was long ago i was young and sky was blue :)
>>
>>
>> On Thu, Nov 28, 2013 at 4:16 PM, Igor Stasenko <siguctua at gmail.com>wrote:
>>
>>>
>>>
>>>
>>> On 28 November 2013 13:52, kilon alios <kilon.alios at gmail.com> wrote:
>>>
>>>> thats all I got I am afraid right now. A simple editing of a straight
>>>> line, but I am learning athens, roassal, morphic so it takes time. Its my
>>>> first with everything and my very first project with pharo. I am not aiming
>>>> for something super sophisticated, bezier lines, gradients, bitmaps etc
>>>> simple stuff but I am having so much fun with this project I wont give up
>>>> until I have it finished. :)
>>>>
>>>>
>>> btw, if you want, i got somewhere code for Bezier curve editing (in
>>> morphic)..
>>> it is not fully working, but at least something you can look at:
>>>  - if i remember you can add control points and move them around.
>>>
>>>
>>>
>>>>
>>>> On Thu, Nov 28, 2013 at 2:30 PM, Alexandre Bergel <
>>>> alexandre.bergel at me.com> wrote:
>>>>
>>>>> Do you have  more screenshots of Hyperion?
>>>>>
>>>>> Alexandre
>>>>> --
>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>> Alexandre Bergel  http://www.bergel.eu
>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>>>
>>>>>
>>>>>
>>>>> On Nov 28, 2013, at 7:49 AM, kilon alios <kilon.alios at gmail.com>
>>>>> wrote:
>>>>>
>>>>> > Ok I have verified and indeed its not an Athens problem. My bad. The
>>>>> position of the morph is reported at 5 at 30 and the not the correct 0 at 0.So it looks like Morphic for some strange reason it offsets it.
>>>>> >
>>>>> > I knew about translateBy but I did not know about restoreAfter. so
>>>>> thank you.
>>>>> >
>>>>> > I prefer my version of the code because it makes clearer what I am
>>>>> trying to do. However ideally because I am drawing a box inside another box
>>>>> the best way would be to follow your approach and scale the second box
>>>>> using one shape instead of two I am currently doing. But thats the price I
>>>>> am paying from not knowing exactly how to do this.
>>>>> >
>>>>> > Also trying to painstakingly find the correct transform and scale
>>>>> values requires A LOT of testing . This is why I find a vector editor for
>>>>> Athens and Pharo absolutely essential. No coding can beat designing via
>>>>> mouse.
>>>>> >
>>>>> > On the other hand I could use Inkscape and import the svg to Athens
>>>>> , which what I am about to research. Designing all GUI elements by code is
>>>>> a very bad idea, but no less a learning experience.
>>>>> >
>>>>> > I will most probably move to Roassal too.
>>>>> >
>>>>> > As always thanks for the help.
>>>>> >
>>>>> >
>>>>> > On Thu, Nov 28, 2013 at 12:29 PM, Igor Stasenko <siguctua at gmail.com>
>>>>> wrote:
>>>>> > well, by default the athens canvas coordinate system matches morphic
>>>>> one..
>>>>> > but you know, it always hard to be sure, especially if you perform
>>>>> any local coordinate transformations before that morph has any chance to
>>>>> draw itself..
>>>>> >
>>>>> > You can figure this out easily: draw something at 0 at 0 and see where
>>>>> it is.
>>>>> > then draw something at morph's x at y position and see it too.
>>>>> >
>>>>> > btw, you know you don't have to create same paths over and over.
>>>>> > you can easily put static parts out of regularly (and costly)
>>>>> evaluated code:
>>>>> >
>>>>> > shape := canvas cacheAt: self "morph" ifAbsentPut: [
>>>>> >                 aCanvas createPath: [:path |
>>>>> >               path relative.
>>>>> > " no move-to here ***  path moveTo: ((self position x )+5)@(self
>>>>> position y);"
>>>>> >               lineTo: 20 at 0;
>>>>> >               cwArcTo: 5 at 5 angle: 45;
>>>>> >               lineTo: 0 at 20;
>>>>> >               cwArcTo: (-5)@5 angle: 45;
>>>>> >               lineTo: (-20)@0;
>>>>> >               cwArcTo: (-5)@(-5) angle: 45;
>>>>> >               lineTo: 0@(-20);
>>>>> >               cwArcTo: 5@(-5) angle: 45.
>>>>> >                 ].
>>>>> > ].
>>>>> >
>>>>> > "and here we're using coordinate transform to translate origin point
>>>>> to
>>>>> > given position, so it will be the starting point (0 at 0) of our shape"
>>>>> >
>>>>> > canvas pathTransform restoreAfter: [
>>>>> >    canvas pathTransform translateBy:((self position x )+5)@(self
>>>>> position y).
>>>>> >    canvas drawShape: shape.
>>>>> > ]
>>>>> >
>>>>> > by analogy you can cache all static pieces, just do something:
>>>>> >
>>>>> > shapes := canvas cacheAt: self ifAbsentPut: [ self
>>>>> constructStaticShapesOn: aCanvas ]
>>>>> >
>>>>> > where #constructStaticShapesOn: must answer an array of them.
>>>>> >
>>>>> >
>>>>> > On 28 November 2013 11:12, kilon alios <kilon.alios at gmail.com>
>>>>> wrote:
>>>>> > wow you guys are fast at replying :)
>>>>> >
>>>>> > I did
>>>>> >
>>>>> >
>>>>> >       self changeProportionalLayout.
>>>>> >       editButton := HypEditButton new .
>>>>> >       editButton position: 0 at 0.
>>>>> >       self addMorph: editButton fullFrame: #(0 0 0 0 0 0 100 100).
>>>>> >
>>>>> > I am afraid Igor I still see no change with your code.
>>>>> >
>>>>> > I like to note here, that when I first created the editButton as
>>>>> morph , it indeed placed it in correct place. A 0 at 0 placed it in top
>>>>> left corner as expected. But I did overide its DrawOn:  with an empty
>>>>> method and used my own method to render it with Athens. So it looks like
>>>>> the problem is Athens related and not Morphic related or maybe a
>>>>> disagreement between Morphic and Athens.
>>>>> >
>>>>> > just for the record here is the code I use to render the
>>>>> HypEditButton morph
>>>>> >
>>>>> > render:aCanvas
>>>>> >       |shape1 shape2 shape3 editButtonColor |
>>>>> > shape1 := aCanvas createPath: [:path |
>>>>> >               path relative .
>>>>> >
>>>>> >               path moveTo: ((self position x )+5)@(self position y);
>>>>> >               lineTo: 20 at 0;
>>>>> >               cwArcTo: 5 at 5 angle: 45;
>>>>> >               lineTo: 0 at 20;
>>>>> >               cwArcTo: (-5)@5 angle: 45;
>>>>> >               lineTo: (-20)@0;
>>>>> >               cwArcTo: (-5)@(-5) angle: 45;
>>>>> >               lineTo: 0@(-20);
>>>>> >               cwArcTo: 5@(-5) angle: 45.
>>>>> >                 ].
>>>>> >
>>>>> >       shape2 := aCanvas createPath: [:path |
>>>>> >               path relative .
>>>>> >
>>>>> >               path moveTo: ((self position x +7))@((self position y
>>>>> +3));
>>>>> >               lineTo: 18 at 0;
>>>>> >               cwArcTo: 2 at 2 angle: 45;
>>>>> >               lineTo: 0 at 20;
>>>>> >               cwArcTo: (-2)@2 angle: 45;
>>>>> >          lineTo: (-20)@0;
>>>>> >               cwArcTo: (-2)@(-2) angle: 45;
>>>>> >               lineTo: 0@(-20);
>>>>> >               cwArcTo: 4@(-2) angle: 45.
>>>>> >                 ].
>>>>> >       shape3 := aCanvas createPath: [:path |
>>>>> >               path relative .
>>>>> >
>>>>> >               path moveTo: ((self position x +15))@((self position y
>>>>> +10));
>>>>> >
>>>>> >               cwArcTo: 5 at 5 angle: 90;
>>>>> >               cwArcTo: (-5)@5 angle: 90;
>>>>> >               cwArcTo: (-5)@(-5) angle: 90;
>>>>> >               cwArcTo: 5@(-5) angle: 90.
>>>>> >
>>>>> >
>>>>> >                 ].
>>>>> >
>>>>> > ( editMode = true) ifTrue: [ editButtonColor := Color green]
>>>>> ifFalse: [ editButtonColor := Color red ].
>>>>> > (aCanvas setStrokePaint: editButtonColor) width: 1.
>>>>> >
>>>>> > aCanvas drawShape: shape1 .
>>>>> > aCanvas drawShape: shape2.
>>>>> > aCanvas setPaint: (editButtonColor alpha: 0.3 ).
>>>>> > aCanvas drawShape: shape3.
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > On Thu, Nov 28, 2013 at 12:03 PM, Igor Stasenko <siguctua at gmail.com>
>>>>> wrote:
>>>>> >
>>>>> >
>>>>> >
>>>>> > On 28 November 2013 10:59, kilon alios <kilon.alios at gmail.com>
>>>>> wrote:
>>>>> > just tried it, I see no change
>>>>> >
>>>>> > try:
>>>>> >  self changeProportionalLayout
>>>>> >
>>>>> > editButton := HypEditButton new .
>>>>> >       self addMorph: editButton fullFrame: #(0 0 0 0 0 0 100 100).
>>>>> >
>>>>> >
>>>>> > On Thu, Nov 28, 2013 at 11:54 AM, Benjamin <
>>>>> Benjamin.VanRyseghem.Pharo at gmail.com> wrote:
>>>>> > Can you try to do something like
>>>>> >
>>>>> > self changeProportionalLayout
>>>>> > before adding the morph ?
>>>>> >
>>>>> > Ben
>>>>> >
>>>>> > On 28 Nov 2013, at 10:51, kilon alios <kilon.alios at gmail.com> wrote:
>>>>> >
>>>>> >> So I have found some strange problems with my vector editor ,
>>>>> Hyperion.
>>>>> >>
>>>>> >> Hyperion is a Morph openInWindow. Code can be found in the class
>>>>> side of Hyperion>>open.
>>>>> >>
>>>>> >>  The coordinate system when detecting events (mouseOver, mouseUp
>>>>> and mouseDown events of the Hyperion instance) looks like it takes to
>>>>> account also beyond the morph as coordinates as a result events happening
>>>>> at the top right edge of the morph where Hyperion is rendered is 6 at 30(
>>>>> which is the size of the window's title bar plus its borders). Thats ok, I
>>>>> have taken these offsets to account when computing the position of the
>>>>> mouse. I guess it uses the global coordinated and not the local coordinates
>>>>> of the morph.
>>>>> >>
>>>>> >> I am adding a button to control the edit mode of a line, when in
>>>>> edit mode handles for line's control points are shown and those handles can
>>>>> be dragged around to control the shape of the line , when off edit mode,
>>>>> the line will be able to be drag around (not implemented yet).
>>>>> >>
>>>>> >> My problem is that when I add that button as morph to the existing
>>>>> morph of Hyperion in 0 at 0 , it actually appears in 0 at 30 in local
>>>>> coordinated of the Hyperion moprh which in global coordinates it 6 at 60( 0 at 0+ 6 at 30+ 0 at 30= 6 at 60).
>>>>> Why is that ?
>>>>> >>
>>>>> >> I have no clue why I am getting an offset of 0 at 30 in local
>>>>> coordinates of the Hyperion morph.
>>>>> >>
>>>>> >> here is the picture showing a) how it looks like b) the code that
>>>>> set the position c) transcript showing mouse coordinates when clicked in
>>>>> the top left corner of Hyperion morph
>>>>> >>  Hyperion coordinates problem.JPG
>>>>> >>
>>>>> >> if anyone wants to try the code himself the repo is here
>>>>> >>
>>>>> >> http://www.smalltalkhub.com/#!/~kilon/Hyperion
>>>>> >>
>>>>> >> To sum up, to place that button on top left, I will have to
>>>>> position it 0@(-30) which for me makes no sense at all.
>>>>> >>
>>>>> >> Please note that everything is rendered with Athens.
>>>>> >>
>>>>> >> Maybe I have messed up the code myself somewhere but I have looked
>>>>> it again and again I cant find a problem with my code.
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > Best regards,
>>>>> > Igor Stasenko.
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > Best regards,
>>>>> > Igor Stasenko.
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Best regards,
>>> Igor Stasenko.
>>>
>>
>>
>>
>>
>> --
>> Best regards,
>> Igor Stasenko.
>>
>
>


-- 
Best regards,
Igor Stasenko.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20131129/ba724b73/attachment-0002.html>


More information about the Pharo-dev mailing list