Изображение объектов
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);
}