Re: Yet another NSAffineTransform problem
Re: Yet another NSAffineTransform problem
- Subject: Re: Yet another NSAffineTransform problem
- From: "I. Savant" <email@hidden>
- Date: Fri, 13 Jan 2006 08:49:22 -0500
John:
Thanks for the help. To draw the label on the left side of the
image (in the right position), this code worked:
[at rotateByDegrees:90.0f];
[at translateXBy:(NSMidY(imgRect) - ([aLabel size].width / 2)) yBy:
(-5 - [aLabel size].height)];
Transforms are exceedingly difficult for me to visualize. :-)
About the 180 degree rotation ... that was a remnant of various
experiments. 90 degrees is what I wanted, yes.
Thanks again.
--
I.S.
On Jan 11, 2006, at 8:32 PM, John Pannell wrote:
Hi there-
I see a couple small issues (rotation should be by 90 instead of
180, and a missing paren toward the end of the second to last
line), but I think the big issue is the geometry. The rotation is
going to move anything you are drawing out of view, and you need to
move it back in. Here's an attempt that I got to work for me...
[[NSGraphicsContext currentContext] saveGraphicsState];
NSAffineTransform * at = [NSAffineTransform transform];
[at rotateByDegrees:90.0f];
// note: origin was at lower right; need to move string back into view
[at translateXBy:([aLabel size].width/2) yBy:([aLabel size].height/
2 - imgRect.size.width)];
[at concat];
[aLabel drawAtPoint:NSMakePoint(imgRect.size.width/2.0,
imgRect.size.height/2.0)];
[[NSGraphicsContext currentContext] restoreGraphicsState];
With an affine transform, you are moving the entire coordinate
axes, so your string is actually/visually going to be drawn in the
second quadrant with the subsequent draw commands, not in the
visible area of the image (which is in the first quadrant). So you
need to move everything back over to the right (which is now the y
direction in your rotated coordinate system, if that isn't
confusing enough :-). Thus the translate of Y by subtracting the
width of the image.
So now the origin of this new coordinate system is the lower right
corner of the image, with the x-axis positive in the up direction,
and the y-axis positive to the left. Now draw the label in the
middle of the image.
As I said, I did get this to draw correctly so I could see it.
More tweaking will be needed to get it exactly centered...
Hope this made sense!
John
On Jan 11, 2006, at 2:43 PM, I. Savant wrote:
// Draw Away label
[[NSGraphicsContext currentContext] saveGraphicsState];
NSAffineTransform * at = [NSAffineTransform transform];
[at rotateByDegrees:180.0f];
[at translateXBy:[aLabel size].width/2 yBy:[aLabel size].height/2];
[at concat];
[aLabel drawAtPoint:NSMakePoint(NSMidX(imgRect), NSMidY(imgRect)];
[[NSGraphicsContext currentContext] restoreGraphicsState];
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden