1 Востаннє редагувалося Volodymyr Rizun (25.03.2016 00:30:27)

Тема: Малювання у C# (Windows Forms Application)

Доброго часу доби усім! Розробляючи програму для бакалаврської роботи зіткнувся з проблемою намалювати щось на формі. Як правильно оформити метод та які існують методи малювання у C#?

2

Re: Малювання у C# (Windows Forms Application)

А ви хочете створити повноцінну прогу для малювання?

3

Re: Малювання у C# (Windows Forms Application)

...канвас, як завжди https://msdn.microsoft.com/ru-ru/librar … 10%29.aspx

Доречi, правильніше говорити про технології. Э ще DirectX та OpenGL. На їх базi багато движкiв графiчних.

Подякували: leofun01, Volodymyr Rizun2

4 Востаннє редагувалося leofun01 (25.03.2016 10:03:12)

Re: Малювання у C# (Windows Forms Application)

raxp написав:

...канвас, як завжди https://msdn.microsoft.com/ru-ru/librar … 10%29.aspx

Доречi, правильніше говорити про технології. Э ще DirectX та OpenGL. На їх базi багато движкiв графiчних.

Якщо людина питає як малювати в C# і не вказує технології, яку хоче використовувати, то скоріше за все вона не знає навіть про System.Drawing і відрисовку на контролах.

Volodymyr Rizun написав:

Як правильно оформити метод та які існують методи малювання у C#?

Перегляньте приклади:
techotopia.com Drawing_Graphics_in_C_Sharp
c-sharpcorner.com drawing graphics onto windows forms
codeproject.com Drawing Graphics
І створюйте окремі контроли, в яких Ви будете малювати. А потім додавайте ці контроли на форму.

Подякували: Volodymyr Rizun1

5 Востаннє редагувалося Volodymyr Rizun (25.03.2016 12:48:25)

Re: Малювання у C# (Windows Forms Application)

FakiNyan написав:

А ви хочете створити повноцінну прогу для малювання?

Ні. Моїм завданням не є  створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.

6

Re: Малювання у C# (Windows Forms Application)

Volodymyr Rizun написав:
FakiNyan написав:

А ви хочете створити повноцінну прогу для малювання?

Ні. Моїм завданням не є  створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.

так це ж занадто просто для диплому, хіба ні?

7

Re: Малювання у C# (Windows Forms Application)

FakiNyan написав:

так це ж занадто просто для диплому, хіба ні?

Намалювати область можливо і просто. Це стало для мене проблемою, оскільки в C# я новачок.
Але це не все завдання. Воно набагато ширше. Туди ще входить побудова гідродинамічної сітки за заданим алгоритмом, уточнення зовнішніх та внутрішніх вузлів тощо.

Подякували: leofun01, 0xDADA11C72

8

Re: Малювання у C# (Windows Forms Application)

FakiNyan написав:
Volodymyr Rizun написав:
FakiNyan написав:

А ви хочете створити повноцінну прогу для малювання?

Ні. Моїм завданням не є  створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.

так це ж занадто просто для диплому, хіба ні?

Зробити математичну модель - це просто? Ню-ню.

Подякували: leofun011

9

Re: Малювання у C# (Windows Forms Application)

quez написав:
FakiNyan написав:
Volodymyr Rizun написав:

Ні. Моїм завданням не є  створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.

так це ж занадто просто для диплому, хіба ні?

Зробити математичну модель - це просто? Ню-ню.

ну я думав, що вона вже зроблена, а пану тільки формулки тре вписати

10

Re: Малювання у C# (Windows Forms Application)

Як було сказано вище, користуйся методами класу System.Drawing.

Подякували: Volodymyr Rizun, leofun012

11 Востаннє редагувалося raxp (25.03.2016 19:05:47)

Re: Малювання у C# (Windows Forms Application)

Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.

класу System.Drawing

оберточнік )

Подякували: leofun011

12

Re: Малювання у C# (Windows Forms Application)

Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.

А якщо дуже серйозно підходити, то робіть чип на VHDL  :P

оберточнік )

Що саме воно обертає? ;)

Подякували: leofun011

13

Re: Малювання у C# (Windows Forms Application)

GDI+ is a class-based API.
Та не треба доходити до маразму )

14

Re: Малювання у C# (Windows Forms Application)

raxp написав:

Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.

Думаю на вивчення System.Drawing доведеться потратити менше часу, ніж на OpenGL.

15

Re: Малювання у C# (Windows Forms Application)

Це не лабораторна робота або курсова, це бакалавр. Потiм в країнi такi спецiалiсти формошльопи )

16

Re: Малювання у C# (Windows Forms Application)

в оупен дже елі нема нічо складного, і то навіть цікаво

Подякували: leofun011

17 Востаннє редагувалося raxp (26.03.2016 13:23:08)

Re: Малювання у C# (Windows Forms Application)

http://programming.in.ua/programming/c- … pengl.html (цикл з вiдео на рiднiй мовi)
http://opengl-tutorial.blogspot.com/p/blog-page.html

https://www.youtube.com/watch?v=81IIAb9JDeU

Подякували: leofun011

18 Востаннє редагувалося Volodymyr Rizun (04.04.2016 21:34:05)

Re: Малювання у C# (Windows Forms Application)

І знову доброго часу доби усім! Скориставшись вашими порадами я, здебільшого, розібрався з System.Drawing. Ще раз дякую всім, хто відгукнувся.
На даному етапі в мене виникло інше питання. Додавши на форму кнопку та PictureBox на якому я власне зібрався малювати, написав обробник кнопки. Виглядає він наступним чином:

 private void btn1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(picture.Width, picture.Height);
            Graphics g = Graphics.FromImage(bmp);
            Pen pen = new Pen(Color.Blue, 2);
            for (int j = 0; j < m; j++)
                for (int i = 0; i < n - 1; i++)
                {
                    g.DrawLine(pen,
                        x0 + (int)Math.Round(k * x[i, j]),
                        y0 - (int)Math.Round(k * y[i, j]),
                        x0 + (int)Math.Round(k * x[i + 1, j]),
                        y0 - (int)Math.Round(k * y[i + 1, j]));
                }
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m - 1; j++)
                {
                    g.DrawLine(pen,
                        x0 + (int)Math.Round(k * x[i, j]),
                        y0 - (int)Math.Round(k * y[i, j]),
                        x0 + (int)Math.Round(k * x[i, j + 1]),
                        y0 - (int)Math.Round(k * y[i, j + 1]));
                }
            picture.Image = bmp;
        }

Форма запускається, при натисканні на кнопку нічого не відбувається. Підкажіть, будь ласка, що я роблю не так?

Подякували: FakiNyan1

19

Re: Малювання у C# (Windows Forms Application)

Що таке m, n, k, x0, y0, x[,], y[,] ?
Поставте breakpoint на перший for і покроково перегляньте значення змінних.
А краще покажіть весь проект, тоді я розберусь.

20 Востаннє редагувалося Volodymyr Rizun (04.04.2016 23:20:20)

Re: Малювання у C# (Windows Forms Application)

leofun01 написав:

Що таке m, n, k, x0, y0, x[,], y[,] ?

m та n, - це розбиття сітки.
k -  коефіцієнт масштабу.
x0 та y0 - це початок координат.
x[,] та y[,] - масиви координат сітки на попередньому кроці.

Додаю код проекту:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BachelorWork
{
    public partial class Form1 : Form
    {
        public const int m = 50;
        public const int n = 50;
        public double[,] x = new double[n, m];
        public double[,] y = new double[n, m];
        public int k = 14; 
        public int x0 = 10;
        public int y0 = 100;
        public Form1()
        {
            InitializeComponent();
        }
        private void btn1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(picture.Width, picture.Height);
            Graphics g = Graphics.FromImage(bmp);
            Pen pen = new Pen(Color.Blue, 2);
            for (int j = 0; j < m; j++)
                for (int i = 0; i < n - 1; i++)
                {
                    g.DrawLine(pen, 
                           x0 + (int)Math.Round(k * x[i, j]),
                           y0 - (int)Math.Round(k * y[i, j]),
                           x0 + (int)Math.Round(k * x[i + 1, j]), 
                           y0 - (int)Math.Round(k * y[i + 1, j]));
                }
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m - 1; j++)
                {
                    g.DrawLine(pen, 
                           x0 + (int)Math.Round(k * x[i, j]),
                           y0 - (int)Math.Round(k * y[i, j]), 
                           x0 + (int)Math.Round(k * x[i, j + 1]), 
                           y0 - (int)Math.Round(k * y[i, j + 1]));
                }
            picture.Image = bmp;
        }
    }
}
Подякували: leofun01, FakiNyan2