Лабораторная работа по Си шарп создание 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();
        }

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

Комментариев нет:

Отправить комментарий