rotate polygon in iOS
Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller
-
- Posts: 135
- Joined: Thu Sep 13, 2012 10:25 pm
rotate polygon in iOS
Hi all -
I've used the RevRotatePoly command and it works great on the Mac, but I see that it's not supported for iOS. What options do I have to rotate a polygon on the iOS platform?
Thanks so much for any advice.
Joel
I've used the RevRotatePoly command and it works great on the Mac, but I see that it's not supported for iOS. What options do I have to rotate a polygon on the iOS platform?
Thanks so much for any advice.
Joel
-
- Livecode Opensource Backer
- Posts: 328
- Joined: Mon Dec 05, 2011 5:34 pm
- Contact:
Re: rotate polygon in iOS
Hi,
For a Regular Polygon you should just need to do something like this:
simply use a variable in place of the 120 and you can have complete control.
Put the code above into a recursive callback routine (ie. a handler that calls itself after a short delay) and it could be animated.
For a points based polygon, you will need to get the points as a list and apply the sin/cos stuff to each point and then set the points of the graphic. More longwinded, but not too difficult.
Hope that helps,
Dave
For a Regular Polygon you should just need to do something like this:
Code: Select all
set the angle of grc "mypoly" to 120
Put the code above into a recursive callback routine (ie. a handler that calls itself after a short delay) and it could be animated.
For a points based polygon, you will need to get the points as a list and apply the sin/cos stuff to each point and then set the points of the graphic. More longwinded, but not too difficult.
Hope that helps,
Dave
Coding in the Sun - So much Fun.
Visit http://electronic-apps.info for released App information.
Visit http://electronic-apps.info for released App information.
-
- Posts: 135
- Joined: Thu Sep 13, 2012 10:25 pm
Re: rotate polygon in iOS
Thanks for the reply. I am indeed trying to rotate a point-based polygon. Based on your suggestion, I did some searching and found Jim Hurley's example which I modified as follows and put into the script of a scrollbar:
Dragging the scrollbar produces a beautifully smooth rotation of the polygon both clockwise and counterclockwise. That's great.
But...
My problem is that with the rounding above, the polygon gets horribly distorted. I read somewhere that there's a way to handle that. I didn't quite understand, but it seemed to be that the procedure would be to keep a clean copy of the polygon somewhere else for reference.
Can anyone please help me figure out what to do in order to rotate the point-based polygon and minimize the distortion?
Thanks so much.
Joel
Code: Select all
global gOldRotVal, gWhereAt
on MouseDown
put the loc of graphic "myPoly" into gWhereAt
end MouseDown
on scrollbarDrag newValue
put gOldRotVal-newValue into tDelta
put newValue into gOldRotVal
rotatePoly "myPoly", gWhereAt, tDelta
end scrollbarDrag
On rotatePoly theGraphic, thePivot, theAngle
put the points of graphic theGraphic into tPoints
put item 1 of thePivot into xPivot
put item 2 of thePivot into yPivot
put empty into newPointList
repeat for each line tLine in tPoints
put (item 1 of tLine)- xPivot & "," & (item 2 of tLine)- yPivot & return after tRelPoints
end repeat
put sin(theAngle* pi/180) into S
put cos(theAngle * pi/180) into C
repeat for each line tLine in tRelPoints
put round(C*(item 1 of tLine)+ S*(item 2 of tLine) + xPivot)& comma after rotPtlist
put round(-S*(item 1 of tLine) + C*(item 2 of tLine)+ yPivot)after rotPtlist
put return after rotPtList
end repeat
set the points of graphic theGraphic to rotPtlist
end rotatePoly
But...
My problem is that with the rounding above, the polygon gets horribly distorted. I read somewhere that there's a way to handle that. I didn't quite understand, but it seemed to be that the procedure would be to keep a clean copy of the polygon somewhere else for reference.
Can anyone please help me figure out what to do in order to rotate the point-based polygon and minimize the distortion?
Thanks so much.
Joel
Re: rotate polygon in iOS
Here is an example stack that does what you ask, there will still be some slight munging but it will be relative to the start position. Also, the script you posted works REALLY well I noticed very little deformation in my tests. Here is the stack with adjusted script.
https://dl.dropbox.com/u/11957935/polyrotate.livecode
And here is the script itself. Requires a slider (scrollbar) with values 0 to 359 (or whatever if you want multi rotation or partial rotation capability)
There is an init handler that saves the original points to a global as well as the start loc.
Rather than do relative changes angle to angle, just takes a value and rotates the original points to the desired position.
https://dl.dropbox.com/u/11957935/polyrotate.livecode
And here is the script itself. Requires a slider (scrollbar) with values 0 to 359 (or whatever if you want multi rotation or partial rotation capability)
There is an init handler that saves the original points to a global as well as the start loc.
Rather than do relative changes angle to angle, just takes a value and rotates the original points to the desired position.
Code: Select all
global gWhereAt, gStartPoints -- added gstartpoints gOldRotVal not needed anymore.
on preopenstack
## disable stuff until an init has been done. Could just init the polygon here.
set the enabled of scrollbar 1 to false
set the enabled of grc "myPoly" to false
end preopenstack
on initRot
-- the init handler. Called from a button or however you wish
put the loc of graphic "myPoly" into gWhereAt
put the points of grc "myPoly" into gStartPoints -- store the points
end initRot
on scrollbarDrag newValue
put newValue into tDelta -- no math here, take the value directly from the scroolbar.
rotatePoly "myPoly", gWhereAt, tDelta
end scrollbarDrag
On rotatePoly theGraphic, thePivot, theAngle
lock screen
--using only the original points for rotation, so don't grab
-- the current points
--put the points of graphic theGraphic into tPoints
-- use the original points for all calculations
put gStartPoints into tPoints
put item 1 of thePivot into xPivot
put item 2 of thePivot into yPivot
put empty into newPointList
repeat for each line tLine in tPoints
put (item 1 of tLine)- xPivot & "," & (item 2 of tLine)- yPivot & return after tRelPoints
end repeat
put sin(theAngle* pi/180) into S
put cos(theAngle * pi/180) into C
repeat for each line tLine in tRelPoints
put round(C*(item 1 of tLine)+ S*(item 2 of tLine) + xPivot)& comma after rotPtlist
put round(-S*(item 1 of tLine) + C*(item 2 of tLine)+ yPivot)after rotPtlist
put return after rotPtList
end repeat
set the points of graphic theGraphic to rotPtlist
unlock screen
end rotatePoly
-
- Posts: 135
- Joined: Thu Sep 13, 2012 10:25 pm
Re: rotate polygon in iOS
Oh my goodness! I'm so grateful for your help. That works perfectly.
Thank you so much.
Joel
Thank you so much.
Joel