Рефераты
 

Разработка элемента управления для отображения векторных карт

p align="left">Метод private void comboBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) вызывается когда фокус ввода находится на элементе управления textBox1 и осуществляется нажатие кнопки. Если нажатая кнопка не цифра и не “,” которую можно вводить не более 1 раза то comboBox2 блокируется для ввода.

Метод private void button1_Click(object sender, System.EventArgs e) срабатывает когда происходит нажатие кнопки button1. Вызывается окно выбора цвета. И установка полученного цвета в соответствующую ячейку массива.

Метод private void button3_Click(object sender, System.EventArgs e) предназначен для добавления в массив диапазонов новый диапазон и также добавляется новый цвет для данного массива. При этом происходит сортировка для последующего определения принадлежности числа массиву.

Метод private void comboBox2_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) срабатывает когда отрисовыватеся каждая запись выпадающего списка comboBox. Тесть В начале мы выводим цвет соответствующий данному индексу а затем верхнюю границу.

{

if(e.Index!=-1)

{

if(e.Index<length)

{

e.Graphics.FillRectangle(new SolidBrush(msClr[e.Index]), new Rectangle(e.Bounds.X+1, e.Bounds.Y+1, 13, 13));

e.Graphics.DrawString(msDiap[e.Index].ToString(),new Font("Arial",10),new SolidBrush(Color.Black),e.Bounds.X+14, e.Bounds.Y);

}

else

{

e.Graphics.FillRectangle(new SolidBrush(this.DefCol), new Rectangle(e.Bounds.X+1, e.Bounds.Y+1, 13, 13));

e.Graphics.DrawString("Default",new Font("Arial",10),new SolidBrush(Color.Black),e.Bounds.X+14, e.Bounds.Y);

}

Метод private void button2_Click(object sender, System.EventArgs e) срабатывает когда происходит нажатие кнопки button2 при этом происходит удаление по выделенному в comboBox2 индексу диапазона.

Свойство public Color [] GetMsClr предназначено для получения массива цветов в которые будет производиться раскрашивание.

4. Анализ полученных результатов

При разработки элемента управления мы использовали файлы Encapsulated PostScript созданные программой CorelDraw. На Рис. 4.1 и 4.2 приведены примеры того что выводил CorelDraw и изображение созданное моим компонентом.

Рис. 4.1 изображение в CorelDraw

Рис 4.2 изображение в моём компоненте

Оценивая выведенные изображения могу отметить что изображения очень похожи и контуры областей отчётливо видны. Но заметна и некая угловатость в вычерчивании областей в моём компоненте. Это объясняется тем что в CorelDraw используются линии Безье для которые представлены в исходном фале в формате 3х последовательных точек. В моём же компоненте это заменено на вычерчивание линий. Может быть в дальнейшем если копонент пригодиться то и это будет реализовано.

5. Руководство пользователя

Описание работы будет производиться на специально созданной демонстрационной программе.

5.1 Общи вид

после запуска программа выглядит как показано на Рис. 5.1

Рис. 5.1 Общий вид

Созданный компонент находится в центре и обозначен синими прямыми углами.

5.2 Открытие файла

Рис 5.2 Открытие файла

Рис. 5.2.1 Отображение карты

5.3 Операции с изображением

5.3.1 Перемещение

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

5.3.2 Увеличение в точке

Увеличение изображение осуществляется отмечание соответствующей функции и установкой требуемого увеличения обозначенную символом наведение на карту указателя и нажатие кнопки мыши.

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+"\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+"\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)

{

double x,y;

x=oldDx-Convert.ToDouble(crx-oldx)/(mapD.Scale*mapD.KX);

y=oldDy-Convert.ToDouble(cry-oldy)/(mapD.Scale*mapD.KY);

mapD.SetXYAxes(x,y);

this.Refresh();

}

public void ScaleToRctangle(int oldx,int oldy,int crX,int crY)

{

double scl=0.0;

double x,y;

oldX=oldx;

oldY=oldy;

double oldKx=mapD.KX;

double oldKy=mapD.KY;

double oldSc=mapD.Scale;

int cX,cY;

if(Math.Abs(oldx-crX)>Math.Abs(oldy-crY))

{

scl=Convert.ToDouble(this.Width)/Math.Abs(oldx-crX);

}

else

{

scl=this.Height/Math.Abs(oldy-crY);

}

if(oldx<crX)

{

cX=oldx;

}

else

{

cX=crX;

}

if(oldy<crY)

{

cY=oldy;

}

else

{

cY=crY;

}

mapD.Scale=mapD.Scale*scl;

x=oldDx+Convert.ToDouble(cX)/(oldSc*oldKx);

y=oldDy+Convert.ToDouble(cY)/(oldSc*oldKy);

mapD.SetXYAxes(x,y);

this.Refresh();

}

public void VeiwInWindow()

{

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

mapD.SetXYtoView();

this.Refresh();

}

public void RealScale()

{

mapD.Scale=1;

mapD.SetXYtoView();

this.Refresh();

}

public bool VeiwRect

{

set

{

flRec=value;

}

get

{

return flRec;

}

public int GetNamberPath (int crX, int crY)

{

double x,y;

int pth=-1;

x=oldDx+Convert.ToDouble(crX)/(this.mapD.Scale*this.mapD.KX);

y=oldDy+Convert.ToDouble(crY)/(this.mapD.Scale*this.mapD.KY);

double x1,y1,x2,y2;

double p;

double nx;

double ny=y;

int per=0;

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

{

per=0;

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

{

x1 = mapD.AllPaths[k].PathPoints[j].X;

y1 = mapD.AllPaths[k].PathPoints[j].Y;

x2 = mapD.AllPaths[k].PathPoints[j+1].X;

y2 = mapD.AllPaths[k].PathPoints[j+1].Y;

if(y1!=y2)

{

//this.listBox1.Items.Add("xx");

p=(ny-y2)/(y1-y2);

nx=p*x1+(1-p)*x2;

if((p>0)&&(p<1)&&(x<nx))

{

//if(nx!=x1&&ny!=y1)

per++;

if(nx==x1&&ny==y1)

{

double xp = mapD.AllPaths[k].PathPoints[j-1].X;

double yp = mapD.AllPaths[k].PathPoints[j-1].Y;

if(yp<y1&&y1<y2)

{

per++;

}

else if(y1>y2&&y1>yp)

{

else if(y1==y2&&y1==y)

{

// per++;

//не входит

}

}

//listBox1.Items.Add("per_"+per.ToString());

if((per%2)==1)

{

pth=k;

//listBox1.Items.Add("per_"+per.ToString());

//listBox1.Items.Add(k.ToString());

}

}

return pth;

}

public void Allocate(int nPth,int type)

{

mapD.Allocate(nPth,type);

this.Refresh();

}

public void SetClrPath (int NPth,Color Clr)

{

mapD.SetClrPth(NPth,Clr);

}

public Color GetClrPath(int NPth)

{

return mapD.AllPaths[NPth].ColorP;

}

public int[,] GetMsGr()

{

int [,] ms = new int [mapD.Length,mapD.Length];

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

{

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

{

ms[i,j]=0;

}

}

double x1,y1;

double _x1,_y1;

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

{

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

{

x1 = mapD.AllPaths[i].PathPoints[j].X;

y1 = mapD.AllPaths[i].PathPoints[j].Y;

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

{

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

{

if(i!=k)

{

_x1 = mapD.AllPaths[k].PathPoints[l].X;

_y1 = mapD.AllPaths[k].PathPoints[l].Y;

if(x1==_x1&&y1==_y1)

{

ms[i,k]=1;

}

return ms;

} //getmsgr

public void Run(int curPth, ref int [,] ms)

{

if(ms[curPth,curPth]==0)

{

int j=1;

bool flag = false;

while (j<256&&!flag)

{

flag=true;

for(int i=0;i<ms.GetLength(1);i++)

{

if(curPth!=i&&ms[curPth,i]>0&&ms[i,i]==j)

{

flag=false;

}

}

j++;

}

ms[curPth,curPth]=j-1;

for(int i=0;i<ms.GetLength(1);i++)

{

if(ms[curPth,i]==1&&curPth!=i)

{

ms[curPth,i]=2;

ms[i,curPth]=2;

Run(i,ref ms);

}

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

{

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

mapD.SetXYtoView();

this.Refresh();

}

public MyMap GetMap

{

get

{

return mapD;

}

}

}

}

Приложение Б

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

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

namespace CmpView

{

/// <summary>

/// Summary description for MyMap.

/// </summary>

public class MyMap

{

private double scale;

private int length;

private int space;

private double kx;

private double ky;

private double dx;

private double dy;

private PathD [] msPthd;

private Pen [] msPn;

// private GraphicsPath[] GrphPth;

public MyMap()

{

space=20;

scale =1;

msPthd=null;

msPn=null;

kx=1;

ky=1;

dx=0;

dy=0;

//GrphPth=null;

}

public void AddPath(PathD pathD)

{

PathD[] tmpPathD = new PathD[length+1];

msPn = new Pen[length+1];

for(int i=0;i<length+1;i++)

{

msPn[i]= null;

}

if (length>0)

{

msPthd.CopyTo(tmpPathD,0);

}

tmpPathD[length]=pathD;

msPthd=tmpPathD;

tmpPathD=null;

length++;

/* Point[] tmP = new Point [pathD.Length];

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

{

tmP[i].X=Convert.ToInt32(pathD.PathPoints[i].X*this.scale+this.x*this.scale);

tmP[i].Y=Convert.ToInt32(pathD.PathPoints[i].Y*this.scale+this.y*this.scale);

} */

}

public PathD[] AllPaths

{

get

{

return msPthd;

}

}

public Pen[] AllPen

{

get

{

return msPn;

}

}

public int Length

{

get

{

return length;

}

}

public double Scale

{

get

{

return this.scale;

}

set

{

if(value<10000&&value>0)

{

scale=value;

}

public void SetAxes(double kX,double kY)

{

kx=kX;

ky=kY;

}

public void SetXYAxes(double dX, double dY)

{

dx=dX;

dy=dY;

}

public double KX

{

get

{

return kx;

}

}

public double KY

{

get

{

return ky;

}

}

public double DX

{

get

{

return dx;

}

}

public double DY

{

get

{

return dy;

}

}

public void SetXYtoView()

{

if(length>0)

{

double minX,minY;

minX = kx*(this.msPthd[0].PathPoints[0].X);

minY = ky*(this.msPthd[0].PathPoints[0].Y);

for (int k=0;k<length;k++)

{

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

{

if((kx*msPthd[k].PathPoints[j].X)<minX)

{

minX=kx*msPthd[k].PathPoints[j].X;

}

if((ky*msPthd[k].PathPoints[j].Y)<minY)

{

minY=ky*msPthd[k].PathPoints[j].Y;

}

this.dx=minX/kx-space/(scale*(kx/Math.Abs(kx)));

this.dy=minY/ky-space/(scale*(ky/Math.Abs(ky)));

}

}

public void SetScaleToView(int height,int width)

{

if(length>0)

{

double minX,minY,maxX,maxY;

minX = (kx*this.msPthd[0].PathPoints[0].X);

minY = (ky*this.msPthd[0].PathPoints[0].Y);

maxX = (kx*this.msPthd[0].PathPoints[0].X);

maxY = (ky*this.msPthd[0].PathPoints[0].Y);

for (int k=0;k<length;k++)

{

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

{

if((kx*msPthd[k].PathPoints[j].X)<minX)

{

minX=kx*msPthd[k].PathPoints[j].X;

}

if((ky*msPthd[k].PathPoints[j].Y)<minY)

{

minY=ky*msPthd[k].PathPoints[j].Y;

}

/////

if((kx*msPthd[k].PathPoints[j].X)>maxX)

{

maxX=kx*msPthd[k].PathPoints[j].X;

}

if((ky*msPthd[k].PathPoints[j].Y)>maxY)

{

maxY=ky*msPthd[k].PathPoints[j].Y;

}

double h,l;

l=Math.Abs(maxX-minX);

h=Math.Abs(maxY-minY);

if(h>l)

{

scale = (height-space*2)/h;

}

else

{

scale = (width-space*2)/l;

}

}

}

public void Allocate(int nPth,int type)

{

if(type ==0)

{

if(msPn[nPth]!=new Pen(Color.Black,4))

{

for(int i=0;i<length;i++)

{

msPn[i]= null;

}

msPn[nPth] = new Pen(Color.Black,4);

}

public void SetClrPth(int NPth, Color Clr)

{

msPthd[NPth].ColorP=Clr;

}

Страницы: 1, 2


© 2010 BANKS OF РЕФЕРАТ