Hello, I will try it to explain exactly, what I need List P1 10,10 P2 10,90 P3 400,10 P4 400,90 or more points Depend from the zero point Case 1 (900mm,900mm) -------------------------------------- |....................................| |...........P4....................P2.| |....................................| |....................................| |....................................| |....................................| |....................................| |...........P3....................P1.| --------------------------------------(0,0) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Case 2 (900mm,900mm) -------------------------------------- |....................................| |.P2..................P4.............| |....................................| |....................................| |....................................| |....................................| |.P1..................P3.............| |....................................| -------------------------------------- 0,0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Case 3 0,0 -------------------------------------- |....................................| |........P3..................... P1.| |....................................| |....................................| |....................................| |....................................| |........P4.......................P2.| |....................................| -------------------------------------- 900mm,900mm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Case 4 0,0 -------------------------------------- |....................................| |.P1................. P3.............| |....................................| |....................................| |....................................| |....................................| |.P2..................P4.............| |....................................| --------------------------------------(900mm,900mm) How can I make that? With matrix tranformation mirror? Best Regards Thomas The code at moment is
You need only a panelthis.panel_draw = new System.Windows.Forms.Panel();
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace Grafik { public partial class Form1 : Form { public List<CODES> ListCodes; public class CODES { private double x; private double y; private int boardNumber; public double X { get { return x; } set { x = value; } } public double Y { get { return y; } set { y = value; } } public int BoardNumber { get { return boardNumber; } set { boardNumber = value; } } public void Init() { X = 0; Y = 0; boardNumber = 0; } } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ListCodes = new List<CODES>(); CODES obj; int boardnumber = 0; for (int j = 0; j < 4; j++) { for (int i = 0; i < 5; i++) { boardnumber++; obj = new CODES(); obj.Init(); obj.X = obj.X + (j * 150); obj.Y = obj.Y + (i * 70); obj.BoardNumber = boardnumber; ListCodes.Add(obj); } } } float ScaleX, ScaleY; private void MapMillimetersToPixels(Graphics gfx, Rectangle rectPixels, Rectangle rectMm) { Matrix matrix = new Matrix(); ScaleX = (float)rectPixels.Width / Math.Abs(rectMm.Width); ScaleY = (float)rectPixels.Height / Math.Abs(rectMm.Height); matrix.Scale(ScaleX, ScaleY); matrix.Translate(rectPixels.Left - ScaleX * rectMm.Left, rectPixels.Top - ScaleY * rectMm.Top); gfx.Transform = matrix; } private int MillimetersToPixels_X(double value) { return Convert.ToInt32(ScaleX * value); } private int MillimetersToPixels_Y(double value) { return Convert.ToInt32(ScaleY * value); } public void DrawPanel(List<CODES> listCodes, PaintEventArgs e) { Graphics gfx; // the Graphics instance; for example, taken from PaintEventArgs gfx = e.Graphics; PointF ptCur; string strPoint; ptCur = new PointF(); foreach ( CODES code in listCodes ) { ptCur.X = MillimetersToPixels_Y(code.X); ptCur.Y = MillimetersToPixels_Y(code.Y); ptCur.X = (float)code.X; ptCur.Y = (float)code.Y; // These two lines of code draw the cross gfx.DrawLine( Pens.Black, ptCur.X - 5, ptCur.Y, ptCur.X + 5,ptCur.Y ); gfx.DrawLine( Pens.Black, ptCur.X, ptCur.Y - 5, ptCur.X,ptCur.Y + 5 ); // This block of code draws the label for the point using ( Brush brush = new SolidBrush( ForeColor ) ) { strPoint = "P" + code.BoardNumber + "(" + code.X +"," +code.Y + ")"; gfx.DrawString( strPoint, Font, brush, ptCur.X + 10,ptCur.Y ); } } // calculation is finished -- now tranformation from mm to pixel gfx.DrawRectangle(Pens.Red, 5, 5, 480, 380); Rectangle rectMM; //= new Rectangle(0, 0, 900, 500); Rectangle rectPixel = new Rectangle(); bool fZeroLeft, fZeroTop; fZeroLeft = false; fZeroTop = false; int mmWidth, mmHeight; mmWidth = 900; mmHeight = 500; rectMM = new Rectangle( new Point(fZeroLeft ? 0 : -mmWidth, fZeroTop ? 0 : -mmHeight), new Size(fZeroLeft ? mmWidth : -mmWidth, fZeroTop ? mmHeight : -mmHeight)); rectPixel = panel_draw.DisplayRectangle; MapMillimetersToPixels( gfx, rectPixel, rectMM ); } private void panel_draw_Paint(object sender, PaintEventArgs e) { DrawPanel(ListCodes, e); } } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ What is not working at moment? #### --> means --> is the windows panel --> panel_draw #### the relation between the dimension from the mm to the pixel #### is not ok. (900mm,900mm) ############################################### --------------------------------------~~~~~~~~# |....................................|~~~~~~~~# |...........P4....................P2.|~~~~~~~~# |....................................|~~~~~~~~# |....................................|~~~~~~~~# |....................................|~~~~~~~~# |....................................|~~~~~~~~# |....................................|~~~~~~~~# |...........P3....................P1.|~~~~~~~~# --------------------------------------(0,0)~~~# ###############################################
I think we can solve this over matrix transformation, like this. (1,0,0,1,4,5 ) -- moving (1,0,0,1,0,0 ) -- normal matrix (-1,0,0,1,0,0 ) -- Mirror Y-Axis (0,-1,0,1,0,0 ) -- Mirror X-Axis I would like to paint only the points, as a function of the zero point. Matrix: (x,y,z,scalefactor,MovingX,MovingY) z is every time 0 in my example (-1,0,0,1,0,0 ) -- Mirror Y-Axis (0,-1,0,1,0,0 ) -- Mirror X-Axis I need here maybe a matrix multiplication. It is missing to me at the conversion. Perhaps you help me still or someone else.