# RevRotatePoly - Workaround found!

David Kwinter david at kwinter.ca
Thu Apr 17 15:28:01 CDT 2003

```Ok, I've adapted a script from Alejandor Tejada's "Polygon Graphic
Transformations" into a function which has the functionality of
RevRotatePoly.

function rotateGraphic gName,rAngle

put "graphic "&quote&gName&quote into lvselectedgraphic
if existence(lvselectedgraphic) is false then exit rotateGraphic

if the checkLocation of lvselectedgraphic is empty or checkLocation <> the
loc of lvselectedgraphic
then  set the exactPoints of lvselectedgraphic to empty
put "1,1 cosangle"&return&"1,2 sinangle"&return&"1,3 0"&return&"2,1
sinangle"&return&"2,2 cosangle"&return&"2,3 0"&return&"3,1 0"&return&"3,2
0"&return&"3,3 1" into fldsource
put "1,1 1"&return&"1,2 0"&return&"1,3 movX"&return&"2,1 0"&return&"2,2
1"&return&"2,3 movY"&return&"3,1 0"&return&"3,2 0"&return&"3,3 1" into
fldmove0
put "Graphic" into origin

put (the left of lvselectedgraphic + the width of
lvselectedgraphic/2),(the top of lvselectedgraphic + the height of
lvselectedgraphic/2) into mzbx

put -(item 1 of mzbx),-(item 2 of mzbx) into mzbx2

put fldmove0 into fldmove1
put fldmove0 into fldmove2

put cos(rAngle * pi / 180) into word 2 of line 1 of fldsource
put - sin(rAngle * pi / 180) into word 2 of line 2 of fldsource
put sin(rAngle * pi / 180) into word 2 of line 4 of fldsource
put cos(rAngle * pi / 180) into word 2 of line 5 of fldsource

put item 1 of mzbx into word 2 of line 3 of fldmove1
put item 2 of mzbx into word 2 of line 6 of fldmove1
put item 1 of mzbx2 into word 2 of line 3 of fldmove2
put item 2 of mzbx2 into word 2 of line 6 of fldmove2

put fldmove1 into qwe
--   put qwe
--   exit mouseup

split qwe by return and space -- qwe is converted in an array
put fldsource into qwa
--  put qwa
--  exit mouseup

split qwa by return and space
put matrixMultiply(qwe,qwa) into qws
put fldmove2 into qwe
--  put qwe
--  exit mouseup

split qwe by return and space
put matrixMultiply(qws,qwe) into qwa
combine qwa using comma
-- put qwa
put "1,1" & space & item 1 of qwa & return into fldsource
put "1,2" & space & item 2 of qwa & return after fldsource
put "1,3" & space & item 3 of qwa & return after fldsource
put "2,1" & space & item 4 of qwa & return after fldsource
put "2,2" & space & item 5 of qwa & return after fldsource
put "2,3" & space & item 6 of qwa & return after fldsource
put "3,1" & space & item 7 of qwa & return after fldsource
put "3,2" & space & item 8 of qwa & return after fldsource
put "3,3" & space & item 9 of qwa after fldsource

put "1,1 0"&return&"1,2 0"&return&"1,3 1"&return&"2,1 0"&return&"2,2
0"&return&"2,3 1"&return&"3,1 0"&return&"3,2 0"&return&"3,3 1" into flddata
if the exactPoints of lvselectedgraphic is empty then put the points of
lvselectedgraphic into fldpointsofgraphic else put the exactPoints of
lvselectedgraphic into fldpointsofgraphic
put fldsource into qwe
split qwe by return and space -- qwe is converted in an array

repeat the number of lines of fldpointsofgraphic
put item 1 of line 1 of fldpointsofgraphic into word 2 of line 3 of
flddata
put item 2 of line 1 of fldpointsofgraphic into word 2 of line 6 of
flddata
delete line 1 of fldpointsofgraphic
put flddata into qwa
split qwa by return and space
put matrixMultiply(qwe,qwa) into qws
combine qws using comma
-- put qws
put item 3 of qws,item 6 of qws & return after fldexactpointsofgraphic
put round(item 3 of qws) & comma& round(item 6 of qws) & return after
fldnewpointsofgraphic
end repeat

set the points of lvselectedgraphic to fldnewpointsofgraphic
set the exactPoints of lvselectedgraphic to fldexactpointsofgraphic
set the checkLocation of lvselectedgraphic to the loc of lvselectedgraphic
choose browse tool
end rotateGraphic

```

More information about the use-livecode mailing list