Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с отрисовкой GraphicsPath, Дуги постоянно закрываются 
V
    Опции темы
explorer
Дата 20.2.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: 1
Всего: 2



Здравствуйте, уважаемые знатоки!

Столкнулся с проблемой, решение которой (как я подозреваю) элементарное, но дойти никак не могу.
Суть проблемы: есть файл с перечнем объектов и их координат (линии и дуги). Разбираю файл, создаю соответствующие пути (для каждого объекта свой) и затем собираю все эти пути в один (без использования Start/CloseFigure()). В результате линии прорисовываются отлично, а вот у дуг первая и последняя точки соединяются. Пробовал даже "вручную" исправлять массив PointTypes пути (заменял все типы на 1, кроме первого элемента), но это также не помогло. 
Может быть кто-нибудь уже сталкивался с подобным или знает, в чем может быть причина? Подскажите, пожалуйста.

Код добавления линии:
Код

            GraphicsPath linePath = new GraphicsPath();
            ... 
            linePath.AddLine(pt1, pt2);
            linePath.Flatten();
            linePath.SetMarkers();
            entirePath.AddPath(linePath, false);
            linePath.Dispose();


Код добавления дуги:
Код

            GeneratePoints(pt1, pt2, center, radius, arcPointsList);
            GeneratePoints(pt2, pt3, center, radius, arcPointsList);

            arcPoints = arcPointsList.ToArray();
            types = CreateTypes(arcPoints.Length);
                       
            arcPath = new GraphicsPath(arcPoints, types, FillMode.Winding);
            arcPath.Flatten();
            arcPath.SetMarkers();
            entirePath.AddPath(arcPath, true);
            arcPath.Dispose();

Да, забыл сказать, что дуги я "собираю" по точкам в List<PointF>, а потом этот лист в массив.

Вот так я "подправляю" путь:
Код

            byte[] types = path.PathTypes;
            PointF[] points = path.PathPoints;

            for (int i = 1; i < types.Length; ++i)
                if (types[i] != 1 && types[i] != 32)
                    types[i] = 1;

            return new GraphicsPath(points, types);

--------------------
 
PM MAIL WWW ICQ   Вверх
Experimenter
Дата 22.2.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 8
Всего: 17



explorer, может лучше так?
Код

entirePath.AddPath(arcPath, false);



--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
explorer
Дата 24.2.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: 1
Всего: 2



Да, такое я тоже пробовал, поэтому решил еще проверить входящие данные для рисования. Проблема оказалась именно в них. Координаты дуг шли не в том порядке. При таком раскладе сначала рисовался низ дуги, птом верх, а потом низ нижележащей дуги и т.д. Тему можно считать закрытой. Спасибо за помощь. 

p.s. Воистину,  проверка входящих данных избавляет от головной боли...
--------------------
 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.