How to make a square topped, round rect bottomed graphic?

Bob Sneidar bobs at twft.com
Thu Dec 2 16:30:00 EST 2010


Okay who posted Fortran on a LiveCode Use List??

Bob


On Dec 2, 2010, at 1:13 PM, Mick Collins wrote:

> on doTest
>    -- before running this test, create a polygon graphic named "NW"
>    put 250 into theLeft
>    put 250 into theTop
>    repeat with i = 1 to 37
>       put 6*i - 5 into theWid
>       put pi * (i-1)/18 into angRot
>       repeat with j = 1 to 80
>          put 2*j into theHeight
>          -- this is how you use the function
>          set the points of grc "NW" to \
>                 pointsOfNorman(theLeft,theTop,theWid,theHeight,angRot)
>          
>          wait 0
>       end repeat
>    end repeat
>    
> end doTest
> 
> function pointsOfNorman L,T,wid,hite,rotAng
>    --creates the points for a NormanWindow graphic (polygon)
>    --"left", "top" (actually starting point), width, height, angle Of rotation 
>    --                     (measured clockwise from rightward)
>    --                     use 0*pi for semicircle down
>    --                     use 0.5*pi for semicircle left
>    --                     use 1*pi for semicircle up
>    --                     use 1.5*pi for semicircle right
>    --                     use 2*pi for semicircle down
>    --                     (interpolate for a rotation other than these)
>    
>    
>    -- first 3 points of rectangle
>    put L,T into daPoints
>    put round(L+wid*cos(rotAng)),round(T+wid*sin(rotAng)) into line 2 of daPoints
>    put round(L+wid*cos(rotAng)-hite*sin(rotAng)),round(T+wid*sin(rotAng)+hite*cos(rotAng)) into line 3 of daPoints
>    
>    -- center of semiCircle
>    put round(L+.5*wid*cos(rotAng)-hite*sin(rotAng)) into xCen
>    put round(T+.5*wid*sin(rotAng)+hite*cos(rotAng)) into yCen
>    
>    put max(8, wid div 3) into numOfAngs -- number of straight lines to make semiCircle
>    put wid / 2 into theRadius
>    
>    put 3 into lineNum 
>    put pi / numOfAngs into deltaAng
>    repeat with i = 1 to numOfAngs
>       -- calculates the coordinates for the i-th point of the semicircle
>       put deltaAng * i into theAng 
>       add rotAng to theAng
>       put xCen +theRadius*cos(theAng) into theX
>       put yCen +theRadius*sin(theAng) into theY
>       add 1 to lineNum
>       put round(theX),round(theY) into line lineNum of daPoints
>    end repeat
>    
>    -- and go back to the starting point
>    add 1 to lineNum
>    put L,T into line lineNum of daPoints
>    
>    return daPoints
> end pointsOfNorman





More information about the Use-livecode mailing list