Разработка элемента управления для отображения векторных карт
Создание элемента управления для отображения карт, представляющих собой векторные изображений в формате Encapsulated PostScript. Поддержка использования программных интерфейсов. Разработка элемента управления, вписывание изображения в область компонента.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 11.11.2010 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{
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;
}
Подобные документы
Функционирование разрабатываемого элемента управления ActiveX, его свойства и методы. Создание внешнего вида элемента управления. Программирование событий инициализации и изменения размеров. Тестирование элемента на этапе проектирования и выполнения.
курсовая работа [1,4 M], добавлен 07.04.2014Основные концепции объектно-ориентированного программирования. Разработка компонента ActiveX (элемента управления Label с новым свойством Caption) на базе стандартного текстового поля. Тестирование пользовательского класса Auto и коллекции его объектов.
курсовая работа [834,8 K], добавлен 07.04.2014Создание приложения для просмотра графических файлов. Компоненты, объекты и операторы для отображения графической информации в библиотеке Delphi. Канва как область компонента для рисования и отображения изображений. Рисование пером, закрашивание кистью.
методичка [98,1 K], добавлен 19.06.2011Настройка редактора символов. Создание символа с помощью мастера. Создание посадочного места компонента. Запуск редактора корпусов. Создание компонента в Library Executive. Проверка правильности настройки таблицы перед записью элемента в библиотеку.
контрольная работа [1,0 M], добавлен 14.05.2013Анализ необходимости в инструменте, который позволял бы автоматически генерировать изображение без необходимости ручной отрисовки. Основные концепции и операторы языка Postscript. Использование Postscript для генерации изображения циферблата манометра.
отчет по практике [269,3 K], добавлен 16.05.2017Формализация задачи и применение численных методов. Классификация программных продуктов для моделирования технических устройств. Программный комплекс MatLab with simulink. Создание интерфейса модели электрогидравлического вихревого регулирующего элемента.
дипломная работа [694,9 K], добавлен 25.07.2012Разработка шаблонной функции FindMax, выполняющей поиск максимального элемента в массиве. Разработка шаблонного класса CMyArray, представляющего собой массив элементов некоторого типа. Иерархия классов и интерфейсов. Индексированный доступ к элементам.
лабораторная работа [419,0 K], добавлен 03.11.2014Работа с компонентом TTreeView, служащим для отображения иерархических данных в виде дерева. Обеспечение заполнения дерева, очистка, анализ и редакция элементов. Процедура удаления элемента. Демонстрация работы программы, исходные данные и результаты.
лабораторная работа [788,6 K], добавлен 11.01.2012Разработка нового технического оборудования. Изготовление и эксплуатация цифровых устройств. Модель элемента дискретного устройства. Алгоритм загрузки логического элемента из файла и процедуры моделирования. Используемые методы, процедуры и функции.
курсовая работа [306,1 K], добавлен 24.06.2012Технология Active Template Library. Создание полнофункционального элемента управления и расширение свойств. Подготовка рабочего пространства и ресурсов. Проектирование пользовательского интерфейса. Добавление переменных для управления анимацией.
курсовая работа [722,5 K], добавлен 09.12.2015