Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

How to apply RotateTransform to this control?

Posted on 2010-11-16
6
Medium Priority
?
536 Views
Last Modified: 2013-12-17
The following control is very simple to draw when XY co-ordinates are in Top Left of the screen. But what if I want the control to rotate left or right. Please do understand that I would like to have the region set to the drawn portions, to clip any unwanted portions of the area.

Thank you Control to roate & set region
0
Comment
Question by:YetAnotherCoder
6 Comments
 
LVL 41

Expert Comment

by:Kyle Abrahams
ID: 34154627
Is this for silverlight?

RotateTransform rt = new RotateTransform();

//rotate 90 clockwise
rt.Angle = 90;
//normal rotation is top left corner.  Setting to 0.5,0.5 rotates about the center.
rt.CenterX = 0.5;
rt.CenterY = 0.5;

myBmp.RenderTransform = rt;

Open in new window

0
 

Author Comment

by:YetAnotherCoder
ID: 34155625
Hi ged325,

I am sorry for not making it clear. It is not for silverlight. It is a Windows User Control.
0
 
LVL 41

Expert Comment

by:Kyle Abrahams
ID: 34155956
Unfortunately looks like you'll need WPF, which the above should apply for.  It doesn't look like it's possible in a normal windows application.

http://social.msdn.microsoft.com/Forums/en-SG/winforms/thread/38a6ecba-1b54-41c7-a3df-20670798c3df
0
Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

 
LVL 32

Expert Comment

by:Erick37
ID: 34156588
Give this a shot.

using System.Drawing.Drawing2D;
private void Form1_Paint(object sender, PaintEventArgs e)
		{
			Graphics g = e.Graphics;

			Pen pen = new Pen(Color.Black);

			g.RotateTransform(45.0f);  // rotate 45'
			g.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height  / 2, MatrixOrder.Append);           // translate

			g.DrawRectangle(pen,new Rectangle(-100, -40, 200, 80));
			g.DrawEllipse(pen, -100, -40, 200, 80);
		}

Open in new window

0
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 2000 total points
ID: 34159121
Add all the contents to a GraphicsPath, including an outer minimum bounding rectangle, and then use the Transform method to physically rotate all the points.  You can use a rotated GraphicsPath with just the outer minimum bounding rectangle to pass to the Region() constructor to clip the UserControl to the rotated image.

Again, this is the same stuff I've rehashed for you over and over again...  =\

Study this puppy again:
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_26541848.html#33921826
0
 

Author Comment

by:YetAnotherCoder
ID: 34161248
Hi Eric,

Thanks for the reply. But what I have to do is this:

Quite similar to what you said but I have to set the region to the drawn area so that not drawn area will get clipped. So I have to do the following:

In addition to code of yours, I have to do this

Matrix M = new Matrix();
            // Translate the Origin to Center of the control in the matrix
            M.Translate(ClientRectangle.Width / 2, ClientRectangle.Height / 2);
            // If needs to be rotated then apply rotation as well for the above matrix
            if (SprayDirection == Spray_Direction.Left)
                M.RotateAt(90f, Center);
            else if (SprayDirection == Spray_Direction.Right)
                M.RotateAt(-90f, Center);
            // Re-compute all the graphics path points to the newly created matrix order
            gp.Transform(M);
            // Apply to the region
            Region rgn = new Region(gp);


0

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

High user turnover can cause old/redundant user data to consume valuable space. UserResourceCleanup was developed to address this by automatically deleting user folders when the user account is deleted.
Hello there! As a developer I have modified and refactored the unit tests which was written by fellow developers in the past. On the course, I have gone through various misconceptions and technical challenges when it comes to implementation. I would…
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…
Suggested Courses

972 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question