Изображение объектов на Visual C#, Visual Basic и Visual C++ на основе интеграции по методике “компонент - клиент”

 

Imports System.Math 'Для математических функций.

Imports System.Drawing 'Для рисования изображений.

Imports System.Drawing.Drawing2D 'Для рисования.

6. В тело этого класса Class1 записываем, для примера, следующую произвольную функцию для расчета массива с координатами точек графика.

Листинг 43.1. Метод для расчета массива с координатами точек графика.

Public Class Class1

Public Function myFunction1() As Object

'Объявляем индексы элементов массива myArrayVB(i, j):

Dim i, j As Integer

'Задаем границы индексов массива myArrayVB(i, j):

Dim N_x As Integer = 2000

Dim N_y As Integer = 1

'Массив переменных Single в виде myArrayVB(i, j),

'когда i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y:

Dim myArrayVB(N_x, N_y) As Single

'Задаем произвольное значение 10 в двойном цикле:

For i = 0 To N_x

For j = 0 To N_y

myArrayVB(i, j) = 10

Next

Next

'Произвольные координаты 4-х точек ломаной линии:

myArrayVB(0, 0) = 100

myArrayVB(0, 1) = 50

myArrayVB(1, 0) = 200

myArrayVB(1, 1) = 75

myArrayVB(2, 0) = 300

myArrayVB(2, 1) = 150

myArrayVB(3, 0) = 400

myArrayVB(3, 1) = 300

Return myArrayVB

End Function

End Class

Листинг 43.2. Процедура PictureBox1_Paint для рисования.

Private Sub PictureBox1_Paint(ByVal sender As Object, _

ByVal e As System.Windows.Forms.PaintEventArgs) _

Handles PictureBox1.Paint

'Объявляем объект myObject класса Class1 компонента VB:

Dim myObject As New ComponentVB.Class1

'Объявляем индексы элементов массива myArrayVC(i, j):

Dim i, j As Integer

'Задаем границы индексов массива myArrayVC(i, j):

Dim N_x As Integer = 2000

Dim N_y As Integer = 1

'Объявляем массив myArrayVC(i, j) переменных типа float,

'когда i = 0,1,2,3,...,(N_x - 1);

' j = 0,1,2,3,...,(N_y - 1):

Dim myArrayVB_Client(N_x, N_y) As Single

'Экспортируем массив myArrayVB(i, j) компонента VB

'в массив myArrayVB_Client(i, j) клиента VB:

For i = 0 To N_x

For j = 0 To N_y

myArrayVB_Client(i, j) = myObject.myFunction1(i, j)

Next

Next

'Рисуем изображение из массива.

'Объявляем координаты двух граничных точек:

Dim x1, y1, x2, y2 As Single

'Будем рисовать пером myPen толщиной 3:

Dim myPen As New Pen(Color.Black, 3)

'Рисуем линию, заданную в массиве myArrayVB_Client(i, j):

x1 = myArrayVB_Client(0, 0)

y1 = myArrayVB_Client(0, 1)

x2 = myArrayVB_Client(1, 0)

y2 = myArrayVB_Client(1, 1)

e.Graphics.DrawLine(myPen, x1, y1, x2, y2)

x1 = x2

y1 = y2

x2 = myArrayVB_Client(2, 0)

y2 = myArrayVB_Client(2, 1)

e.Graphics.DrawLine(myPen, x1, y1, x2, y2)

x1 = x2

y1 = y2

x2 = myArrayVB_Client(3, 0)

y2 = myArrayVB_Client(3, 1)

e.Graphics.DrawLine(myPen, x1, y1, x2, y2)

End Sub

Листинг 43.3. Метод pictureBox1_Paint для рисования.

private void pictureBox1_Paint(object sender,

PaintEventArgs e)

{

//Объявляем объект myObject кл. Class1 компонента VB:

ComponentVB.Class1 myObject =

new ComponentVB.Class1();

//Объявляем индексы элементов массива myArrayVC(i, j):

int i, j;

//Задаем границы индексов массива myArrayVC(i, j):

int N_x = 2001; int N_y = 2;

//Объявляем массив myArrayVC[i, j] перем-х типа float,

//когда i = 0,1,2,3,...,(N_x - 1);

// j = 0,1,2,3,...,(N_y - 1):

float[,] myArrayVC = new float[N_x, N_y];

//Объявляем вспомогательный массив myArray класса Array

//и связываем его с функцией myFunction1, которая

//возвращает массив myArrayVB(i, j) компонента VB:

Array myArray = (Array)myObject.myFunction1();

//Экспортируем массив myArrayVB(i, j) компонента VB

//в массив myArrayVC[i, j] клиента VC:

for (i = 0; i <= N_x - 1; i++)

for (j = 0; j <= N_y - 1; j++)

myArrayVC[i, j] =

Convert.ToSingle(myArray.GetValue(i,j));

//Рисуем изображение из массива.

//Объявляем координаты двух граничных точек:

float x1, y1, x2, y2;

//Будем рисовать пером myPen толщиной 3:

Pen myPen = new Pen(Color.Black, 3);

//Рисуем линию, заданную в массиве myArrayVC[i, j]:

x1 = myArrayVC[0, 0];

y1 = myArrayVC[0, 1];

x2 = myArrayVC[1, 0];

y2 = myArrayVC[1, 1];

e.Graphics.DrawLine(myPen, x1, y1, x2, y2);

x1 = x2; y1 = y2;

x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1];

e.Graphics.DrawLine(myPen, x1, y1, x2, y2);

x1 = x2; y1 = y2;

x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1];

e.Graphics.DrawLine(myPen, x1, y1, x2, y2);

}

Листинг 43.4. Метод pictureBox1_Paint для рисования.

private:

System::Void pictureBox1_Paint(System::Object^ sender,

System::Windows::Forms::PaintEventArgs^ e)

{

//Объявляем объект myObject класса Class1 компонента VB:

ComponentVB::Class1^ myObject =

gcnew ComponentVB::Class1();

//Объявляем индексы элементов массива myArrayVC(i, j):

int i, j;

//Задаем границы индексов массива myArrayVC(i, j):

int N_x = 2001; int N_y = 2;

//Объявляем массив myArrayVC[i, j] переменных типа float,

//когда i = 0,1,2,3,...,(N_x - 1);

// j = 0,1,2,3,...,(N_y - 1):

array<float,2>^ myArrayVC =

gcnew array<float,2>(N_x, N_y);

//Объявляем вспомогательный массив myArray класса Array

//и связываем его с функцией myFunction1, которая

//возвращает массив myArrayVB[i, j] компонента VB:

Array^ myArray = (Array^)myObject->myFunction1();

//Экспортируем массив myArrayVB(i, j) компонента VB

//в массив myArrayVC[i, j] клиента VC:

for (i = 0 ; i <= N_x - 1; i++)

for (j = 0 ; j <= N_y - 1; j++)

myArrayVC[i, j] =

Convert::ToSingle(myArray->GetValue(i,j));

//Рисуем изображение из массива.

//Объявляем координаты двух граничных точек:

float x1, y1, x2, y2;

//Будем рисовать пером myPen толщиной 3:

Pen^ myPen = gcnew Pen(Color::Black, 3);

//Рисуем линию, заданную в массиве myArrayVC[i, j]:

x1 = myArrayVC[0, 0];

y1 = myArrayVC[0, 1];

x2 = myArrayVC[1, 0];

y2 = myArrayVC[1, 1];

e->Graphics->DrawLine(myPen, x1, y1, x2, y2);

x1 = x2; y1 = y2;

x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1];

e->Graphics->DrawLine(myPen, x1, y1, x2, y2);

x1 = x2; y1 = y2;

x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1];

e->Graphics->DrawLine(myPen, x1, y1, x2, y2);

}

Предлагаю ознакомиться с аналогичными статьями: