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 panel
this.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.