Proportional scaling

Wilhelm Sanke sanke at hrz.uni-kassel.de
Tue Sep 21 20:52:05 EDT 2004


On Mon, 20 Sep 2004, Simon Lord wrote:

> I have an object on my card which can be scaled at runtime, the next 
> step is to get this object to scale proportionally using it's current 
> H x W as the aspect ratio when the shiftKey is down.
>
> So if the object is currently shaped like a rectangle, when I hold the 
> shiftKey down and continue dragging the object will maintain the same 
> aspect ratio at the time I held the shiftKey down.
>
> Unfortunately I'm at a lose at to where to even start the math on this.
>
>
> Sincerely,
> Simon



Hello Simon,

The following may not match exactly your expectations, but is maybe a 
starting point.

I have a "zoom" script on card "slideshow" of my stack "Slideshow 
Light", 82 KB (formerly to be found in Rev's User Contributions, now on 
my website <http://www.sanke.org>, English version, page "Sample Stacks").

 From the short description:
"Slideshow allowing JPG-, GIF-, PNG- and BMP-images. Preview and 
re-ordering possible. Different display sizes can be set. Zoom function; 
adjusting of display duration during show."

This zoom function does not change the images continuously, but sets the 
new size - with the correct aspect ratio - after the dragging of the 
scrollbar thumb has finished. I also had a continuously changing version 
of such a zoom, but for some reason did not implement it in this 
slideshow stack.

  Examples from the scripts

to put the aspect ratio into Var "Proportion":

   "set the numberformat to 0.00
   put the formattedheight of image 1 into FHoehe
   put the formattedwidth of image 1 into FBreite
   put FBreite / FHoehe into Proportion"
 

script of the zoom scrollbar (assumes there are two extra scrollbars - 
that become visible when needed - to navigate inside the enlarged image):

"global Proportion, Stelle
 local Neuhoehe, Neubreite
 on scrollbardrag x
   put x into Neuhoehe
   put Neuhoehe * Proportion into NeuBreite
   put trunc(Neubreite) into Neubreite
   put NeuBreite&&"X"&&Neuhoehe into fld "Rechteck"
 end scrollbardrag

 on mouseup
   set the cursor to watch
   lock screen
   set the height of image 1 to Neuhoehe
   set the width of image 1 to NeuBreite
   set the loc of  image 1 to 512,384
   if NeuBreite > 1024 then
     put (Neubreite - 1024) div 2 into BreitDiff
     set the Startvalue of scrollbar "horizontal" to -Breitdiff
     set the Endvalue of scrollbar "horizontal" to Breitdiff
     show scrollbar "Horizontal"
   else
     hide scrollbar "horizontal"
   end if
   if Neuhoehe > 768 then
     put (Neuhoehe - 768) div 2 into HoehDiff
     set the Startvalue of scrollbar "vertical" to -Hoehdiff
     set the Endvalue of scrollbar "vertical" to Hoehdiff
     show scrollbar "vertical"
   else
     hide scrollbar "vertical"
   end if
   set the thumbpos of scrollbar "vertical" to 0
   set the thumbpos of scrollbar "horizontal" to 0
   put the 512,384 into Stelle
   set the cursor to hand
 end mouseup"

Maybe this helps, if not - discard it.

Regards,

Wilhelm Sanke
http://www.sanke.org



More information about the metacard mailing list