Вы находитесь на странице: 1из 3

Лабораторная работа по Си шарп создание

3D моделей WPF
Цель работы
Cоздать из массива целых чисел 3D модель (3D Surface plot или 3D histogram) и вывести результат
моделирования на экран.
Лабораторное задание
1. . Изучить принципы работы графической библиотеки WPF.
2. С помощью данных библиотек в соответствии с заданием разработать программу на языке C#.
3. Данные визуализации являются массивом – размером X разрядов, который генерируется программно с
помощью генератора случайных чисел (П) или читается из двоичного файла (Ф) – данные записываются
программно в файл, а затем читаются из него функциями BinaryReader и BinaryWriter.
Данные о 3D моделях, которые необходимо создать, разрядности элементов массива, его размере и способе
получения берутся из задания, каждое из которых будет соответствовать одному из вариантов.

Вариант №5:
3D модель - 3D histogram ;
Массив состоит из 64-разрядных элементов;
Размер массива = 256 элементов;
Массив генерируется программно с помощью генератора случайных чисел (П) и читается из двоичного файла
(Ф).

Листинг
Файл Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using C1.Win.C1Chart3D;

namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public const int COLS = 32;
public const int ROWS = 8;
public Form1()
{
InitializeComponent();
}

public static Int64 NextInt64(Random rnd)


{
var buffer = new byte[sizeof(Int64)];
rnd.NextBytes(buffer);
return BitConverter.ToInt64(buffer, 0);
}

private void generationToolStripMenuItem_Click(object sender, EventArgs e)


{
Random rnd = new Random();
Int64[] data = new Int64[256];
for (int i = 0; i < 256; i++)
{
data[i] = rnd.Next(-7, 8);
}
System.IO.Stream myStream;
this.saveFileDialog1.Title = "Сохранение";
this.saveFileDialog1.Filter = "Lab4 files (*.data4lab)|*.data4lab";
this.saveFileDialog1.FilterIndex = 1;
this.saveFileDialog1.RestoreDirectory = true;
this.saveFileDialog1.FileName = "Lab4Data";
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(myStream);
for (int i = 0; i < 256; i++)
bw.Write((Int64)data[i]);
bw.Close();
myStream.Close();
}
}
}

private void visualisationToolStripMenuItem_Click(object sender, EventArgs e)


{
string header;
int k=0;
Int64[] data = new Int64[256];
System.IO.Stream myStream;
this.openFileDialog1.Title = "Открытие";
this.openFileDialog1.FilterIndex = 1;
this.openFileDialog1.Filter = "Lab4 files (*.data4lab)|*.data4lab";
this.openFileDialog1.FileName = "Lab4Data";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if ((myStream = openFileDialog1.OpenFile()) != null)
{
System.IO.BinaryReader bw = new System.IO.BinaryReader(myStream);
for (int i = 0; i < 256; i++)
data[i] = bw.ReadInt64();
bw.Close();
myStream.Close();
}
}
for (int j = 0; j < COLS; j++)
{
header = "C" + j.ToString();
dataGridView1.Columns.Add(header, header);
}

dataGridView1.Rows.Add(8);
for (int i = 0; i < ROWS; i++)
{
dataGridView1.Rows[i].HeaderCell.Value = "R" + i.ToString();
for (int j = 0; j < COLS; j++)
{
header = "C" + j.ToString();
dataGridView1.Rows[i].Cells[header].Value = data[k];
k++;
}
}
C1Chart3D1.ChartGroups[0].ChartData.SetGrid.RowCount = 8;
C1Chart3D1.ChartGroups[0].ChartData.SetGrid.ColumnCount = 32;
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j <COLS ; j++)
{
C1Chart3D1.ChartGroups[0].ChartData.SetGrid[j,i] =
Int64.Parse(dataGridView1.Rows[i].Cells["C"+j.ToString()].Value.ToString());
}
}
C1Chart3D1.Legend.Visible = true;
C1Chart3D1.Header.Visible = true;
C1Chart3D1.ChartArea.Visible = true;
Font f = new Font("Arial", 20, FontStyle.Bold);
C1Chart3D1.ChartArea.Axes.AxisTitleFont = f;
C1Chart3D1.ChartArea.AxisX.Title = "Cols";
C1Chart3D1.ChartArea.AxisY.Title = "Rows";
C1Chart3D1.ChartArea.AxisZ.Title = "Z";
}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)


{
Application.Exit();
}

}
}
Результаты работы программы

Вам также может понравиться