Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2010, 22:54   #1
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию Графический редактор - добавление нового класса

Доброго дня!
В общем, такая проблема. Пишу лабу на С#. Задание - примитивный графический редактор, который рисует всякие круги, линии, 4угольники и есть возможность пользователю создать свою фигуру: то есть он нажимает на кнопочку "создать", изображает многоугольник, а потом можно нажать другую кнопочку, и эта создастся ещё одна такая же фигура.
С первой частью я справился. Но вот как сделать, чтобы пользователь мог создавать свою фигуру?
P.S. Это, вроде, называется расширяемое программирование.
Заранее спасибо за советы.
vandrouny вне форума Ответить с цитированием
Старый 01.10.2010, 00:22   #2
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

something like that...

Код:
interface IShape
{
	void Draw(Graphics g);
}

class RectShape : IShape
{
	public Point Location;
	public Size Size;
	
	public RectShape()
	{}
	
	public void Draw(Graphics g)
	{
		Rectangle r = new Rectangle(this.Location, this.Size);
		g.DrawRectangle(Pens.Red, r);
	}
}

class UserShape : IShape
{
	public Point Center;
	public Point[] Points;
	public bool DrawAsPolygon;
	
	public UserShape()
	{}
	
	private void SetPoints()
	{
		foreach (Point p in this.Points)
		{
			p = new Point(this.Center.X + p.X,
				this.Center.Y + p.Y);
		}
	}
	
	public void Draw(Graphics g)
	{
		this.SetPoints();
		if (DrawAsPolygon)
		{		
			g.DrawPolygon(Pens.Red, this.Points);
		}
		else
		{
			GraphicsPath gp = new GraphicsPath();
			gp.AddLines(this.Points);
			gp.CloseFigure();
			g.DrawPath(Pens.Red, gp);
		}
	}
}

using :
...
public List<IShape> Shapes;
...
protected ovverride void OnPaint(object sender, PaintEventArgs e)
{
           foreach (IShape sh in this.Shapes)
                      sh.Draw(e.Graphics);
}

Последний раз редактировалось akasex; 01.10.2010 в 00:25. Причина: Added some code
akasex вне форума Ответить с цитированием
Старый 01.10.2010, 22:53   #3
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию

Что-то он упорно ругается на метод setpoints(

Код:
private void SetPoints()
	{
		foreach (Point p in this.Points)
		{
			p = new Point(this.Center.X + p.X,
				this.Center.Y + p.Y);
		}
	}
говорит, что p слева от = нельзя использовать, так как она используется в итерации foreach
vandrouny вне форума Ответить с цитированием
Старый 04.10.2010, 18:17   #4
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Код:
private void SetPoints()
{
	for (int i = 0; i < this.Points.Count; i++)
	{
	            this.Points[i] = new Point(this.Center.X + p.X,
				this.Center.Y + p.Y);
	}
}
akasex вне форума Ответить с цитированием
Старый 12.10.2010, 20:19   #5
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию

Сделал не совсем так, но вроде получилось. Спасибо)
vandrouny вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(C++) Графический редактор. AleSS Помощь студентам 4 29.03.2010 15:04
Графический редактор Alex2009 Мультимедиа в Delphi 8 26.11.2009 00:43
Графический редактор... Alex2009 Мультимедиа в Delphi 12 18.04.2009 23:55
Графический редактор Alex_Bond Общие вопросы .NET 1 14.05.2008 08:55