Тема: Малювання у C# (Windows Forms Application)
Доброго часу доби усім! Розробляючи програму для бакалаврської роботи зіткнувся з проблемою намалювати щось на формі. Як правильно оформити метод та які існують методи малювання у C#?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C#, .NET → Малювання у C# (Windows Forms Application)
Для відправлення відповіді ви повинні увійти або зареєструватися
Доброго часу доби усім! Розробляючи програму для бакалаврської роботи зіткнувся з проблемою намалювати щось на формі. Як правильно оформити метод та які існують методи малювання у C#?
А ви хочете створити повноцінну прогу для малювання?
...канвас, як завжди https://msdn.microsoft.com/ru-ru/librar … 10%29.aspx
Доречi, правильніше говорити про технології. Э ще DirectX та OpenGL. На їх базi багато движкiв графiчних.
...канвас, як завжди https://msdn.microsoft.com/ru-ru/librar … 10%29.aspx
Доречi, правильніше говорити про технології. Э ще DirectX та OpenGL. На їх базi багато движкiв графiчних.
Якщо людина питає як малювати в C# і не вказує технології, яку хоче використовувати, то скоріше за все вона не знає навіть про System.Drawing і відрисовку на контролах.
Як правильно оформити метод та які існують методи малювання у C#?
Перегляньте приклади:
techotopia.com Drawing_Graphics_in_C_Sharp
c-sharpcorner.com drawing graphics onto windows forms
codeproject.com Drawing Graphics
І створюйте окремі контроли, в яких Ви будете малювати. А потім додавайте ці контроли на форму.
А ви хочете створити повноцінну прогу для малювання?
Ні. Моїм завданням не є створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.
FakiNyan написав:А ви хочете створити повноцінну прогу для малювання?
Ні. Моїм завданням не є створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.
так це ж занадто просто для диплому, хіба ні?
так це ж занадто просто для диплому, хіба ні?
Намалювати область можливо і просто. Це стало для мене проблемою, оскільки в C# я новачок.
Але це не все завдання. Воно набагато ширше. Туди ще входить побудова гідродинамічної сітки за заданим алгоритмом, уточнення зовнішніх та внутрішніх вузлів тощо.
Volodymyr Rizun написав:FakiNyan написав:А ви хочете створити повноцінну прогу для малювання?
Ні. Моїм завданням не є створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.
так це ж занадто просто для диплому, хіба ні?
Зробити математичну модель - це просто? Ню-ню.
FakiNyan написав:Volodymyr Rizun написав:Ні. Моїм завданням не є створити графічний редактор. Мені потрібно намалювати задану область маючи її математичну модель.
так це ж занадто просто для диплому, хіба ні?
Зробити математичну модель - це просто? Ню-ню.
ну я думав, що вона вже зроблена, а пану тільки формулки тре вписати
Як було сказано вище, користуйся методами класу System.Drawing.
Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.
класу System.Drawing
оберточнік )
Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.
А якщо дуже серйозно підходити, то робіть чип на VHDL
оберточнік )
Що саме воно обертає?
GDI+ is a class-based API.
Та не треба доходити до маразму )
Якщо серйозно підходити до справи, забудьте про WPF та контроли, навіть про GDI. Вивчайте кросплатформовий OpenGL, OpenGL ES.
Думаю на вивчення System.Drawing доведеться потратити менше часу, ніж на OpenGL.
Це не лабораторна робота або курсова, це бакалавр. Потiм в країнi такi спецiалiсти формошльопи )
в оупен дже елі нема нічо складного, і то навіть цікаво
І знову доброго часу доби усім! Скориставшись вашими порадами я, здебільшого, розібрався з 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;
}
Форма запускається, при натисканні на кнопку нічого не відбувається. Підкажіть, будь ласка, що я роблю не так?
Що таке m, n, k, x0, y0, x[,], y[,] ?
Поставте breakpoint на перший for і покроково перегляньте значення змінних.
А краще покажіть весь проект, тоді я розберусь.
Що таке 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;
}
}
}
Для відправлення відповіді ви повинні увійти або зареєструватися