Смекни!
smekni.com

Разработка элемента управления для отображения векторных карт (стр. 5 из 6)

5.3.3 Увеличение области

Перемещение изображение осуществляется отмечание соответствующей функции

затем первым щелчком мыши мы обозначаем начальную точку прямоугольника выделения затем не отпуская кнопки перемещаем мышь в нужное положение и отпускаем. Выделенная область увеличится и впишется в окно область элемента. Как показано на Рис. 5.3.3

Рис 5.3.3 Прямоугольник увеличения

5.3.4 Вписывание изображения в область компонента

Для вписывания элемента в область компонента необходимо нажать кнопку обозначенную символом

5.3.5 Реальные размеры изображения

Для отображения элемента в реальных размерах нажать кнопку обозначенную символом

5.3.6 Выделение области на карте

Выделение области осуществляется отмечанием соответствующей функции обозначенной символом

После чего поместите указатель на необходимую область и нажмите левую кнопку мыши. Область выделится. См Рис.

5.4 Раскрашивание

Для примера раскрашивания областей было создано тир типа раскрашивания. Автоматическое, Ручное и Диапазонное то есть ни какие 2е граничащие области не будут окрашены в одинаковый цвет

5.4.1 Автоматическое

Автоматическое раскрашивание означает что все области будут раскрашены и ни какие 2е граничащие области не будут окрашены в одинаковый цвет. Это показано на Рис. 5.2.1

5.4.2 Ручное

При ручном раскрашивании выделите необходимую область. В области формы показанной на Рис. 5.4.2 отобразится текущий цвет области и её номер. Для изменения цвета выделенной области щёлкните мышью на раскрашенный прямоугольник. Появится окно выбора цвета. Выберете нужный вам цвет. На Рис. 5.4.2.1 показан конечный результат.

Рис. 5.4.2 Цвет области


Рис. 5.4.2.1 Ручное раскрашивание

5.4.3 Диапазонное

Для диапазонного раскрашивания нажмите кнопку “Таблиц”. Появится окно показное на Рис. 5.4.3.1 Заполните для каждой области число и заполните диапазоны и цвета для них. Затем нажмите кнопку “Раскрасить”. Результат представлен на Рис 5.4.3.3

Рис. 5.4.3.1 Рис. 5.4.3.2

Рис 5.4.3.3


Заключение

В рамках данного проекта, был разработан компонент который позволяет отображать векторные изображения формата Encapsulated PostScript созданные программой CorelDraw. Реализованы основные и широко используемые инструменты для работы с изображениями такие как масштабирование, автомасштабирование, расположение объекта в видимой области, перемещение объекта. Так же были реализованы возможности выделения областей расположенных на компоненте и различные алгоритмы раскраски которые были выделены в отдельные части проекта. С помощью них мощно представить различную информацию выведенную в виде раскрашенных групп областей. При создания компонентов были использованы одна из новейших технологий.Net разработанная компанией Microsoft, сам компонент разработан с моей точки зрения наиболее перспективном языке С# Полученные в результате работы компоненты пригодны для дальнейшего усовершенствования.

Получен опыт в создания компонентов важен и обязательно пригодится в дальнейшем.


Список литературы

1. Троелсен. Э. С# и платформа.NET. Библиотека программиста. — СПб.: Питер, 2004. —796 с.: ил.

2. Создание компонентов: progs.biz

3. Microsoft Corporation М59 Разработка Windows-приложенийна Microsoft Visual Basic.NET и Microsoft Visual C# -NET. Учебный курс MCAD/MCSD/Пер. с англ. — М.: Издательско-торговый дом «Русская Редакция», 2003. — 512 стр.: ил.

4. Просиз Дж Программирование для Microsoft.NET /Пер. с англ. — М.: Издательско-торговый дом «Русская Редакция», 2003. — 704 стр.: ил.


Приложение А

Текст файла CntrIm.cs

using System;

using System.Collections;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Windows.Forms;

using System.IO;

namespace CmpView

{

/// <summary>

/// Summary description for UserControl1.

/// </summary>

public class CntrIm: System.Windows.Forms.UserControl

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

private string Path;

private MyMap mapD;

private bool flag;

private bool flRec;

private int oldX;

private int oldY;

private int curX;

private int curY;

private double oldDx;

private double oldDy;

private Hashtable eventTable = new Hashtable();

public delegate void MapLoadEndDelegate();

public event MapLoadEndDelegate MapLoadEnd;

public CntrIm()

{

// This call is required by the Windows.Forms Form Designer.

InitializeComponent();

mapD = new MyMap();

flag=false;

flRec=false;

// TODO: Add any initialization after the InitComponent call

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose(bool disposing)

{

if(disposing)

{

if(components!= null)

components.Dispose();

}

base.Dispose(disposing);

}

protected override void OnPaintBackground(PaintEventArgs pevent)

{

Point [] tmP;

Pen mP= new Pen(Color.Black, 1);

for (int k=0;k<mapD.Length;k++)

{

tmP = new Point [mapD.AllPaths[k].Length];

for(int j=0;j<mapD.AllPaths[k].Length;j++)

{

tmP[j].X=Convert.ToInt32((mapD.AllPaths[k].PathPoints[j].X*mapD.KX-mapD.DX)*mapD.Scale);

tmP[j].Y=Convert.ToInt32((mapD.AllPaths[k].PathPoints[j].Y*mapD.KY-mapD.DY)*mapD.Scale);

}

SolidBrush dBr = new SolidBrush(mapD.AllPaths[k].ColorP);

pevent.Graphics.FillPolygon(dBr,tmP);

Pen tPen;

if(mapD.AllPen[k]==null)

{

tPen=new Pen(Color.Black,1);

}

else

{

tPen=mapD.AllPen[k];

}

pevent.Graphics.DrawLines(tPen,tmP);

}

for (int k=0;k<mapD.Length;k++)

{

Point Ctr=new Point();

Ctr.X= Convert.ToInt32((mapD.AllPaths[k].Centr.X-mapD.DX)*mapD.KX*mapD.Scale)-10;

Ctr.Y=Convert.ToInt32((mapD.AllPaths[k].Centr.Y-mapD.DY)*mapD.KY*mapD.Scale)-10;

Font dF = new Font("Arial", 16);

SolidBrush dB = new SolidBrush(Color.Black);

pevent.Graphics.DrawString(k.ToString(),dF,dB,Ctr);

}

Pen mPp= new Pen(Color.Blue, 1);

pevent.Graphics.DrawLine(mPp,0,0,20,0);

pevent.Graphics.DrawLine(mPp,0,0,0,20);

pevent.Graphics.DrawLine(mPp,0,this.Height,20,this.Height);

pevent.Graphics.DrawLine(mPp,0,this.Height,0,this.Height-20);

pevent.Graphics.DrawLine(mPp,this.Width,0,this.Width-20,0);

pevent.Graphics.DrawLine(mPp,this.Width,0,this.Width,20);

pevent.Graphics.DrawLine(mPp,this.Width,this.Height,this.Width-20,this.Height);

pevent.Graphics.DrawLine(mPp,this.Width,this.Height,this.Width,this.Height-20);

if (flRec==true&&flag==true)

{

Pen myP= new Pen(Color.Blue,1);

pevent.Graphics.DrawLine(myP,oldX,oldY,oldX,curY);

pevent.Graphics.DrawLine(myP,oldX,oldY,curX,oldY);

pevent.Graphics.DrawLine(myP,curX,oldY,curX,curY);

pevent.Graphics.DrawLine(myP,oldX,curY,curX,curY);

}

base.OnPaintBackground (pevent);

}

protected override void OnPaint(PaintEventArgs e)

{

Point [] tmP;

Pen mP= new Pen(Color.Black, 1);

for (int k=0;k<mapD.Length;k++)

{

tmP = new Point [mapD.AllPaths[k].Length];

for(int j=0;j<mapD.AllPaths[k].Length;j++)

{

tmP[j].X=Convert.ToInt32((mapD.AllPaths[k].PathPoints[j].X-mapD.DX)*mapD.KX*mapD.Scale);

tmP[j].Y=Convert.ToInt32((mapD.AllPaths[k].PathPoints[j].Y-mapD.DY)*mapD.KY*mapD.Scale);

//listBox1.Items.Add("x: "+tmP[j].X.ToString());

//listBox1.Items.Add("y: "+tmP[j].Y.ToString());

}

SolidBrush dBr = new SolidBrush(mapD.AllPaths[k].ColorP);

e.Graphics.FillPolygon(dBr,tmP);

Pen tPen;

if(mapD.AllPen[k]==null)

{

tPen=new Pen(Color.Black,1);

}

else

{

tPen=mapD.AllPen[k];

}

e.Graphics.DrawLines(tPen,tmP);

}

for (int k=0;k<mapD.Length;k++)

{

Point Ctr=new Point();

Ctr.X=Convert.ToInt32((mapD.AllPaths[k].Centr.X-mapD.DX)*mapD.KX*mapD.Scale)-10;

Ctr.Y=Convert.ToInt32((mapD.AllPaths[k].Centr.Y-mapD.DY)*mapD.KY*mapD.Scale)-10;

Font dF = new Font("Arial", 14);

SolidBrush dB = new SolidBrush(Color.Black);

e.Graphics.DrawString(k.ToString(),dF,dB,Ctr);

}

Pen mPp= new Pen(Color.Blue, 2);

e.Graphics.DrawLine(mPp,0,0,20,0);

e.Graphics.DrawLine(mPp,0,0,0,20);

e.Graphics.DrawLine(mPp,0,this.Height,20,this.Height);

e.Graphics.DrawLine(mPp,0,this.Height,0,this.Height-20);

e.Graphics.DrawLine(mPp,this.Width,0,this.Width-20,0);

e.Graphics.DrawLine(mPp,this.Width,0,this.Width,20);

e.Graphics.DrawLine(mPp,this.Width,this.Height,this.Width-20,this.Height);

e.Graphics.DrawLine(mPp,this.Width,this.Height,this.Width,this.Height-20);

if (flRec==true&&flag==true)

{

Pen myP= new Pen(Color.Blue,1);

e.Graphics.DrawLine(myP,oldX,oldY,oldX,curY);

e.Graphics.DrawLine(myP,oldX,oldY,curX,oldY);

e.Graphics.DrawLine(myP,curX,oldY,curX,curY);

e.Graphics.DrawLine(myP,oldX,curY,curX,curY);

}

base.OnPaint (e);

}

#region Component 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()

{

//

// CntrIm

//

this.BackColor = System.Drawing.SystemColors.Control;

this.Name = "CntrIm";

this.Size = new System.Drawing.Size(496, 384);

this.Load += new System.EventHandler(this.CntrIm_Load);

this.SizeChanged += new System.EventHandler(this.CntrIm_SizeChanged);

this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.CntrIm_MouseUp);

this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.CntrIm_MouseMove);

this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CntrIm_MouseDown);

}

#endregion

private void CntrIm_Load(object sender, System.EventArgs e)

{

}

public void FileOpen(string Pth)

{

mapD = new MyMap();

mapD.Scale=1;

mapD.SetAxes(1,-1);

//mapD.SetXYtoView();

this.Path = Pth;

StreamReader StrmR = new StreamReader(Path);

bool flag = false;

string str;

int dss=0;

PathD pthD=null;

while (((str = StrmR.ReadLine())!=null))

{

//this.richTextBox1.Text+=str;

dss++;

if(str=="/$fm 0 def")

{

pthD = new PathD();

flag=true;

str= StrmR.ReadLine();

dss++;

//this.richTextBox1.Text+=str+"&bsol;n";

}

if(flag)

{

int i=0;

string rtt="";

double [] xy=new double [2];

int nm=0;

while (i<str.Length&&str[i]!='C'&&str[i]!='m'&&str[i]!='L')

{

if(str[i]==' ')

{

try

{

xy[nm]=Convert.ToDouble(rtt);

}

catch(System.FormatException e)

{

}

nm++;

if(nm==2)

{

PointD tm = new PointD(xy[0],xy[1]);

pthD.AddPoint(tm);

nm=0;

}

rtt="";

}

else if (str[i]=='.')

{

rtt+=',';

}

else

rtt+=str[i];

i++;

}

}

if((str=="@c"||str=="S")&&flag==true)

{

mapD.AddPath(pthD);

flag=false;

//this.richTextBox1.Text+=str+"&bsol;n";

}

}

StrmR.Close();

mapD.SetScaleToView(this.Height,this.Width);

mapD.SetXYtoView();

/* AutoColor AClr = new AutoColor(mapD.AllPaths);

Color [] msc = AClr.GetMsClr;

for (int i=0;i<mapD.Length;i++)

{

this.SetClrPath(i,msc[i]);

}*/

if(MapLoadEnd!=null)

MapLoadEnd();

}

private void CntrIm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

flag = true;

oldX=e.X;

oldY=e.Y;

oldDx=mapD.DX;

oldDy=mapD.DY;

}

private void CntrIm_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

{

flag=false;

}

private void CntrIm_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

{

curX=e.X;

curY=e.Y;

if(flRec==true)

this.Refresh();

}

public void ScaleToPoint(int crX,int crY,double sclN)

{

double x,y;

double oldSc=mapD.Scale;

double oldKx=mapD.KX;

double oldKy=mapD.KY;

mapD.Scale=mapD.Scale*sclN;

x=oldDx-Convert.ToDouble(this.Width)/2/(mapD.Scale*mapD.KX)+Convert.ToDouble(crX)/(oldSc*oldKx);

y=oldDy-Convert.ToDouble(this.Height)/2/(mapD.Scale*mapD.KY)+Convert.ToDouble(crY)/(oldSc*oldKy);

mapD.SetXYAxes(x,y);

this.Refresh();

}

public void MovePoint(int oldx,int oldy, int crx,int cry)