2010-01-13 3 views
0

Windows Forms 응용 프로그램의 그래픽 컨텍스트에서 플로팅 할 그래픽 개체가 여러 개 있습니다. 경로가 렌더링되는 ui 요소와 약간의 상호 작용이 있습니다.이 상호 작용을 통해 사용자는 이동 지점을 확대/축소하고 원점을 설정할 수 있습니다. 내가 가진 질문은 다음과 같이 그래픽 객체에 일련의 변형 작업을 설정할 수 있습니까?GDI +에서 여러 순차 변환/스케일 변환

[1] (변환 배율의 원점에 경로를 이동하는)을 번역 TRANSFROM 적용 [2] 스케일 [3] 적용 변환 신청하기 번역 (올바른 위치로 다시 경로를 이동하는) 변환

개별 변환 작업 유형 (변환, 배율 등) 만 주문할 수 있으므로 두 변환 변환이 올바른 지점 (배율 연산의 양쪽 측면)에 적용되지 않습니다. 이것을 할 수있는 방법이 있습니까? 또는 스케일 변환의 원점을 설정할 수 있습니까?

중첩 된 graphicscontainers로 주변을 어지럽 혔지만 도움이되지 않았습니다.

감사합니다,

최대

답변

2

alt text http://lh6.ggpht.com/_1TPOP7DzY1E/S02rsQo3HgI/AAAAAAAAC60/l0rayOPKuoo/s800/Capture5.png

코드 :

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Bitmap bmp = new Bitmap(300, 300); 
    Graphics g = Graphics.FromImage(bmp); 
    System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix(); 

    g.DrawString("this is a string", SystemFonts.DefaultFont, 
     Brushes.Black, new Point(50, 50)); 

    matrix.Rotate(30); // or use RotateAt(...) specifying your rotation point 
    g.Transform = matrix; 
    g.DrawString("this is a 30 rotated string", SystemFonts.DefaultFont, 
     Brushes.Black, new Point(50, 50)); 

    matrix.Reset(); 
    matrix.Translate(50, 50); 
    g.Transform = matrix; 
    g.DrawString("this is a 50; 50 translated string", SystemFonts.DefaultFont, 
     Brushes.Black, new Point(50, 50)); 
    pictureBox1.Image = bmp; 
} 

당신이 GraphicPath 또는 그래픽 객체를 변환하는 매트릭스를 사용할 수 있습니다.