[squeak-dev] Rotating Morphs; how to rotate about a point other than the centre of bounds?
Bob Arning
arning315 at comcast.net
Fri Apr 7 19:09:42 UTC 2017
photoshop is for sissies. use squeak ;-)
| secondHand flex pos elapsed rads start fancy bottomHalf smaller |
fancy _ Form extent: 500 at 100 depth: 32.
fancy fillColor: Color white.
fancy getCanvas
fillOval: (5 at 5 extent: 90 at 90) color: Color black;
fillOval: (0 at 15 extent: 70 at 70) color: Color white;
fillRectangle: (400 at 20 extent: 60 at 60) color: Color black;
fillOval: (300@(-348) extent: 400 at 400) color: Color white;
fillRectangle: (90 at 48 extent: 400 at 4) color: Color black.
bottomHalf _ fancy copy: (0 at 0 extent: fancy width @ (fancy height
// 2)).
bottomHalf flipVertically.
bottomHalf displayOn: fancy at: 0@(fancy height//2).
fancy replaceColor: Color white withColor: Color transparent.
pos _ 500 at 200.
smaller _ fancy magnify: fancy boundingBox by: 0.25 smoothing: 2.
secondHand _ smaller asMorph.
flex _ TransformationMorph new.
flex addMorph: secondHand.
secondHand position: smaller boundingBox center negated.
flex position: pos.
flex openInWorld explore.
start _ Time millisecondClockValue.
[elapsed _ Time millisecondClockValue - start. elapsed < 60000]
whileTrue: [
rads _ Float twoPi * (elapsed \\ 60000) / 60000.
flex angle: rads negated.
World displayWorldSafely.
(Delay forMilliseconds: 100) wait
]
On 4/7/17 2:18 PM, tim Rowledge wrote:
> I think I’m starting to make sense of these damned transformation morphs, though it’s a bit confusing in some areas.
>
>> On 06-04-2017, at 7:43 PM, Bob Arning <arning315 at comcast.net> wrote:
>> | secondHand flex pos elapsed start rads |
>>
>> pos _ 100 at 100.
>> secondHand _ (StringMorph contents: 'seconds') color: Color magenta.
>> flex _ TransformationMorph new.
>> flex addMorph: secondHand.
>> secondHand position: 0 at 0.
>> flex position: pos.
>> flex offset: secondHand position.
>> flex openInWorld explore.
>> start _ Time millisecondClockValue.
>> [elapsed _ Time millisecondClockValue - start. elapsed < 60000] whileTrue: [
>> rads _ Float twoPi * (elapsed \\ 60000) / 60000.
>> flex angle: rads negated.
>> World displayWorldSafely.
> This is much more like it. No strange intermediate morphs masquerading as our friend. It’s as if it all makes sense. Briefly, at least, whilst the drugs keep their hold.
>
> If we change to
> | secondHand flex pos |
>
> pos := 500 at 200.
> secondHand := (RectangleMorph new extent: 10 at 100) color: Color red.
> flex := TransformationMorph new.
> flex addMorph: secondHand.
> secondHand position: -5@ -100. “<— set the bottom centre to be at the parent’s 0 at 0"
> flex position: pos.
> "flex offset: 0 at 0. <— don’t seem to need this"
> flex openInWorld explore.
> start := Time millisecondClockValue.
> [elapsed := Time millisecondClockValue - start. elapsed < 60000] whileTrue: [
> rads := Float twoPi * (elapsed \\ 60000) / 60000.
> flex angle: rads negated.
> World displayWorldSafely.
> (Delay forMilliseconds: 100) wait
> ]
> … then we get a nice chubby needle rotating about the middle of its bottom edge, which is a typical want if we have a simple morph-drawn needle. There does seem to be some odd behaviour when one changes the offset and rotates things; the bounds can end up moving in not-yet obvious ways and then things get confusing.
>
> Fiddling with the `secondHand position: ` seems to work ok as a way to choose any point as the pivot, which is what we’d need for an image of an ornate needle we want to use. Like this one - http://www.cjhclocks.com/images/uploads/large/barometer_silver-face_404.jpg
>
> Of course, one of the next tricks is to find someone with the ‘shoop skills to take an image like that and separate out the needle and dial face as separate images.
>
> tim
> --
> tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim
> Strange OpCodes: RDL: Rotate Disk Left
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170407/0c66f3b3/attachment.html>
More information about the Squeak-dev
mailing list
|