FROM : Ron Fleckner
DATE : Tue Nov 06 06:47:04 2007
On 06/11/2007, at 4:33 PM, Gordon Apple wrote:
> Although I found references to rotating a Bezier path,
> searching for
> rotating coordinates at a point wasn't fruitful. In my case, I
> wanted to
> rotate a shape in place about its center, including shading and/or
> content.
> I believe the following is about as simple as you can get and can
> be used to
> rotate about any point.
>
> @implementation NSAffineTransform (RTPTransformAdditions)
>
> - (void)rotate:(float)angle atPoint:(NSPoint)point
> {
> [self rotateByDegrees:angle];
> NSAffineTransform* pointXfrm = [NSAffineTransform transform];
> [pointXfrm rotateByDegrees:-angle]; // Needed to get
> original
> point in rotated coordinates.
> NSPoint oldPoint = [pointXfrm transformPoint:point];
> float x = oldPoint.x - point.x;
> float y = oldPoint.y - point.y;
> [self translateXBy:x yBy:y]; // Done in the rotated
> coordinates.
> }
Hey, I think I know how to do this the easy way, thanks to Eric Buck:
> To rotate about some point, translate to that point, rotate, and then
> translate back. The approach is not Cocoa specific and is covered in
> any introductory graphics text book.
so, [theTransform translateToPoint:(thePointYouWantToRotateAround)];
[theTransform rotateByWhatever];
[theTransform translateToPoint:(-thePointYouWantToRotateAround)];
[theTransform concat];
I forget the NSTransformer method names, but I think the intent is
clear.
Ron
DATE : Tue Nov 06 06:47:04 2007
On 06/11/2007, at 4:33 PM, Gordon Apple wrote:
> Although I found references to rotating a Bezier path,
> searching for
> rotating coordinates at a point wasn't fruitful. In my case, I
> wanted to
> rotate a shape in place about its center, including shading and/or
> content.
> I believe the following is about as simple as you can get and can
> be used to
> rotate about any point.
>
> @implementation NSAffineTransform (RTPTransformAdditions)
>
> - (void)rotate:(float)angle atPoint:(NSPoint)point
> {
> [self rotateByDegrees:angle];
> NSAffineTransform* pointXfrm = [NSAffineTransform transform];
> [pointXfrm rotateByDegrees:-angle]; // Needed to get
> original
> point in rotated coordinates.
> NSPoint oldPoint = [pointXfrm transformPoint:point];
> float x = oldPoint.x - point.x;
> float y = oldPoint.y - point.y;
> [self translateXBy:x yBy:y]; // Done in the rotated
> coordinates.
> }
Hey, I think I know how to do this the easy way, thanks to Eric Buck:
> To rotate about some point, translate to that point, rotate, and then
> translate back. The approach is not Cocoa specific and is covered in
> any introductory graphics text book.
so, [theTransform translateToPoint:(thePointYouWantToRotateAround)];
[theTransform rotateByWhatever];
[theTransform translateToPoint:(-thePointYouWantToRotateAround)];
[theTransform concat];
I forget the NSTransformer method names, but I think the intent is
clear.
Ron
| Related mails | Author | Date |
|---|---|---|
| Gordon Apple | Nov 6, 06:33 | |
| Ron Fleckner | Nov 6, 06:47 |






Cocoa mail archive

