using
System;
using
System.Drawing;
using
System.Drawing.Drawing2D;
using
System.Collections;
using
System.ComponentModel;
using
System.Windows.Forms;
using
System.Data;
namespace
ScaleDraw
{
///
<summary>
/// Summary
description for Form1.
///
</summary>
public class Form1 :
System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container
components = null;
public Form1()
{
//
// Required for
Windows Form Designer support
//
InitializeComponent();
this.AutoScrollMinSize=new
Size(640,480);
this.MaximumSize=new
Size(640,480);
// initial size
values.
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool
disposing )
{
if( disposing
)
{
if
(components != null)
{
components.Dispose();
}
}
base.Dispose(
disposing );
}
#region Windows Form Designer generated
code
/// <summary>
/// Required method for Designer support -
do not modify
/// the contents of this method with the
code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 =
new System.Windows.Forms.MainMenu();
this.menuItem1 =
new System.Windows.Forms.MenuItem();
this.menuItem2 =
new System.Windows.Forms.MenuItem();
this.menuItem3 =
new System.Windows.Forms.MenuItem();
this.menuItem4 =
new System.Windows.Forms.MenuItem();
this.menuItem5 =
new System.Windows.Forms.MenuItem();
this.menuItem6 =
new System.Windows.Forms.MenuItem();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new
System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem3});
//
// menuItem1
//
this.menuItem1.Index
= 0;
this.menuItem1.MenuItems.AddRange(new
System.Windows.Forms.MenuItem[] {
this.menuItem2});
this.menuItem1.Text
= "File";
//
// menuItem2
//
this.menuItem2.Index
= 0;
this.menuItem2.Text
= "Exit";
//
// menuItem3
//
this.menuItem3.Index
= 1;
this.menuItem3.MenuItems.AddRange(new
System.Windows.Forms.MenuItem[] {
this.menuItem4,
this.menuItem5,
this.menuItem6});
this.menuItem3.Text
= "PageUnit";
//
// menuItem4
//
this.menuItem4.Index
= 0;
this.menuItem4.Text
= "Pixel";
this.menuItem4.Popup
+= new System.EventHandler(this.menuItem4_Popup);
this.menuItem4.Click
+= new System.EventHandler(this.menuItem4_Click);
//
// menuItem5
//
this.menuItem5.Index
= 1;
this.menuItem5.Text
= "Millimeter";
this.menuItem5.Popup
+= new System.EventHandler(this.menuItem5_Popup);
this.menuItem5.Click
+= new System.EventHandler(this.menuItem5_Click);
//
// menuItem6
//
this.menuItem6.Index
= 2;
this.menuItem6.Text
= "Inch";
this.menuItem6.Popup
+= new System.EventHandler(this.menuItem6_Popup);
this.menuItem6.Click
+= new System.EventHandler(this.menuItem6_Click);
//
// Form1
//
this.AutoScaleBaseSize
= new System.Drawing.Size(5, 13);
this.AutoScroll =
true;
this.AutoScrollMinSize
= new System.Drawing.Size(150, 150);
this.BackColor =
System.Drawing.Color.White;
this.ClientSize =
new System.Drawing.Size(536, 249);
this.MaximumSize =
new System.Drawing.Size(1024, 768);
this.Menu =
this.mainMenu1;
this.Name =
"Form1";
this.Text =
"Form1";
this.SizeChanged +=
new EventHandler(this.Form1_SizeChanged);
this.Paint += new
PaintEventHandler(this.Form1_Paint);
this.MouseMove +=
new MouseEventHandler(this.Form1_MouseMove);
}
#endregion
/// <summary>
/// The main entry point for the
application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new
Form1());
}
PointF CanvasPoint;
private System.Windows.Forms.MainMenu
mainMenu1;
private System.Windows.Forms.MenuItem
menuItem1;
private System.Windows.Forms.MenuItem
menuItem2;
private System.Windows.Forms.MenuItem
menuItem3;
private System.Windows.Forms.MenuItem
menuItem4;
private System.Windows.Forms.MenuItem
menuItem5;
private System.Windows.Forms.MenuItem
menuItem6;
//This is used to hold points drawn by the
user
ArrayList
blobs = new ArrayList();
private void Form1_MouseMove(object sender,
MouseEventArgs e)
{
Graphics g =
CreateGraphics();
//calculate scaling
factor
PointF
ScalingFactor=new PointF(1,1);
switch(PageUnit)
{
case
GraphicsUnit.Millimeter:
ScalingFactor
= new PointF(1.0f / (g.DpiX/25.4f),1.0f / (g.DpiY/25.4f));
break;
case
GraphicsUnit.Inch:
ScalingFactor
= new PointF(1.0f / g.DpiX,1.0f / g.DpiY);
break;
}
//get world
position.
CanvasPoint = new
PointF(
(float)(e.X-this.AutoScrollPosition.X)*ScalingFactor.X,
(float)(e.Y-this.AutoScrollPosition.Y)*ScalingFactor.Y
);
// store blob if
mouse is pressed
if(Control.MouseButtons
== MouseButtons.Left)
{
blobs.Add(CanvasPoint);
Invalidate();
}
}
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
SolidBrush b=new
SolidBrush(Color.Black);
PointF
ScalingFactor=new PointF(1,1);
//calculate scaling
factor (duplicated because I'm lazy);
switch(PageUnit)
{
case
GraphicsUnit.Millimeter:
ScalingFactor
= new PointF(1.0f / (e.Graphics.DpiX/25.4f),1.0f /
(e.Graphics.DpiY/25.4f));
break;
case
GraphicsUnit.Inch:
ScalingFactor
= new PointF(1.0f / e.Graphics.DpiX,1.0f / e.Graphics.DpiY);
break;
}
// store the
graphics
GraphicsState gs =
e.Graphics.Save();
e.Graphics.PageUnit=this.PageUnit;
// adjust the
scroll position according to the page unit scale
Matrix m = new
Matrix();
m.Translate(this.AutoScrollPosition.X*ScalingFactor.X,this.AutoScrollPosition.Y*ScalingFactor.Y,
MatrixOrder.Append);
e.Graphics.Transform=m;
// draw all the
blobs in world coordinates (regardless of page scaling or units)
foreach(PointF pnt
in blobs)
{
e.Graphics.FillEllipse(b,pnt.X-2,pnt.Y-2,4,4);
}
b.Dispose();
// get the original
clean graphics back
e.Graphics.Restore(gs);
}
private void Form1_SizeChanged(object
sender, System.EventArgs e)
{
Invalidate();
}
GraphicsUnit
PageUnit=GraphicsUnit.Pixel;
private void menuItem4_Click(object sender,
System.EventArgs e)
{
// set page
unit
PageUnit =
GraphicsUnit.Pixel;
//adjust scroll
sizes
this.AutoScrollMinSize=new
Size(640,480);
Invalidate();
}
private void menuItem5_Click(object sender,
System.EventArgs e)
{
Graphics g =
CreateGraphics();
// set page
units
PageUnit =
GraphicsUnit.Millimeter;
// adjust scroll
sizes
this.AutoScrollMinSize=new
Size((int)(640*(g.DpiX/25.4)),(int)(480*(g.DpiY/25.4)));
Invalidate();
g.Dispose();
}
private void menuItem6_Click(object sender,
System.EventArgs e)
{
Graphics g =
CreateGraphics();
//set page
units
PageUnit =
GraphicsUnit.Inch;
// you know the
dril...
this.AutoScrollMinSize=new
Size((int)(640*g.DpiX),(int)(480*g.DpiY));
Invalidate();
g.Dispose();
}
private void menuItem4_Popup(object sender,
System.EventArgs e)
{
if(PageUnit ==
0)
this.menuItem4.Checked=true;
else
this.menuItem4.Checked=false;
}
private void menuItem5_Popup(object sender,
System.EventArgs e)
{
if(PageUnit ==
0)
this.menuItem5.Checked=true;
else
this.menuItem5.Checked=false;
}
private void menuItem6_Popup(object sender,
System.EventArgs e)
{
if(PageUnit ==
0)
this.menuItem6.Checked=true;
else
this.menuItem6.Checked=false;
}
}
}