How to draw a rotated ellipse at a specific angle (2) (Views: 300)
Problem/Question/Abstract: I created an object based off of TGraphicControl and I used the TCanvas.Ellipse method to create an ellipse. I would like to give the user the ability to rotate this ellipse. I would also like to give the user the ability after rotating the ellipse to still adjust the size and shape. Answer: You can use Win32GDI Routines. It works like this: procedure RotatedEllipse(aCanvas: TCanvas; X1, Y1, X2, Y2: Integer); var T, O: TXForm; {in unit Windows} begin { ... } SetGraphicsMode(aCanvas.Handle, GM_Advanced); GetWorldTransform(aCanvas.Handle, O); {Angle in degree} T.eM11 := 1 * Cos(w / 360 * Pi * 2); T.eM22 := 1 * Cos(w / 360 * Pi * 2); T.eM12 := 1 * Sin(w / 360 * Pi * 2); T.eM21 := 1 * -Sin(w / 360 * Pi * 2); T.eDX := Round((X1 + X2) / 2); T.eDY := Round((Y1 + Y2) / 2); ModifyWorldTransform(aCanvas.Handle, T, MWT_LEFTMULTIPLY); Canvas.Ellipse(X1, Y1, X2, Y2); SetWorldTransform(TheDraw.Handle, O); end; |