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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 21:44   #1
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию Рисование многоугольника в C#

В общем, проблема такая:
Юзер рисует многоугольник. Для этого он жмёт на левую кнопку мыши, создаётся структура на 100 точек и заносятся координаты первой точки:
Код:
pointsnew.SetValue(point, 0);
Далее по каждому новому клику заносятся новые точки,
Код:
j++;
pointsnew.SetValue(e.Location, j);
А потом это всё отправляется на прорисовку.
Код:
obj.points = pointsnew;
objects.Add(obj);
Refresh();
В результате почему-то получается фигура, в которой сначала идёт точка (0,0), потом все мои точки, и замыкается снова на точку (0,0). В чём может быть проблема?

UPD: частично понял проблему.(0,0) - это все те точки, которые я не задал. Т.е. если я пишу pointsnew= new Point[5]; и кликаю 5 точек, то всё нормально. А при 100 - оставшиеся 95 просто рисуются в (0,0).
Тогда другой вопрос: как мне присвоить obj.points = pointsnew; - не всю pointsnew, а только первые j символов? Посимвольно отказывается.

Последний раз редактировалось vandrouny; 11.10.2010 в 22:51. Причина: Updated
vandrouny вне форума Ответить с цитированием
Старый 11.10.2010, 23:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

боюсь сказать глупость, но, мне кажется,
тут два способа решения.
1-й - заниматься отрисовкой самостоятельно (рисованием линий)

2-й - ввести дополнительный массивчик.
типа так:
Код:
points4Draw = new Point[j];
for(int i = 0; i <= j; i++)
{ points4Draw[i] := pointsnew[i]; }
obj.points = points4Draw;
objects.Add(obj);
Refresh();
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2010, 23:15   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Ну во-первых почему бы не хранить количество поставленных точек в отдельной переменной.
Во-вторых,можно использовать ArrayList-проблемы сами отпадут.
В-третьих можно написать простую функцию,увеличивающую массив на 1(копировать существующий массив(его длину мы знаем(свойство Length)) в массив с размером Length+1... и заносить туда новую точку.
Ну эти решения,которые пришли сразу на ум,возможно можно и по-другому. Но я бы не стал привязываться к размеру массива,вдруг пользователь введет 101 точку.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 11.10.2010, 23:30   #4
vandrouny
Пользователь
 
Регистрация: 23.04.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
боюсь сказать глупость, но, мне кажется,
тут два способа решения.
1-й - заниматься отрисовкой самостоятельно (рисованием линий)

2-й - ввести дополнительный массивчик.
типа так:
Код:
points4Draw = new Point[j];
for(int i = 0; i <= j; i++)
{ points4Draw[i] := pointsnew[i]; }
obj.points = points4Draw;
objects.Add(obj);
Refresh();
О, большое спасибо! Он согласился на версию с доп.массивом!
vandrouny вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот многоугольника в паскале Belii09878 Помощь студентам 3 25.06.2010 16:20
Определить видимость грани многоугольника Sergey2 Помощь студентам 4 26.06.2009 20:46
Определение площади многоугольника Bayazet Помощь студентам 5 17.02.2009 12:48
Задача с периметром многоугольника Abakan Общие вопросы C/C++ 1 02.01.2009 19:06
Рисование многоугольника (собственный класс) MaTBeu Общие вопросы C/C++ 1 08.12.2007 14:53