Народ поможите чем можете ...
Ищу алгоритм быстрой закраски замкнутой области типа замкнутого полисплайна безье с самопересекающимися частями ... (алгоритм флэша или директора очень бы помог)
Косяк в том, что затравку для области ограниченной сплайном не так то просто найти, особенно если он самопересекающийся ...
Если просто заливать Прямоугольник, в которой находится сплайн, со сканированием области то туда запросто может попасть другая фигура, вполне может быть что уже залитая ...
Здравствуйте Andir, Вы писали:
A>Народ поможите чем можете ... A>Ищу алгоритм быстрой закраски замкнутой области типа замкнутого полисплайна безье с самопересекающимися частями ... (алгоритм флэша или директора очень бы помог)
Я думаю, что пути тебе должны помочь.
Идея такая:
1. Делаешь BeginPath в своём контексте устройства.
2. Рисуешь кривую.
3. Делаешь EndPath, заканчивая тем самым рисование фигуры.
4. Вызываешь FillPath, чтобы залить полученную фигуру. Есть ещё StrokePath (нарисовать контур) и StrokeAndFillPath (и то и другое сразу). Заливка осуществляется текущей кистью.
Точно помню, что парни из Стингрея рисовали эллипсы под произвольным углом как раз через кривые Бизье и пути. Расскажешь потом, получилось или нет. :)
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Спасибо за ответ, но увы BeginPath и EndPath не работают с SetPixel, а сплайны я рисую с помощью него, если знаете решение и этой проблемы, буду очень благодарен !
Здравствуйте Andir, Вы писали:
A>Спасибо за ответ, но увы BeginPath и EndPath не работают с SetPixel, а сплайны я рисую с помощью него, если знаете решение и этой проблемы, буду очень благодарен !
Боюсь, что при таком низкоуровневом подходе тебе и заливать придётся на низком уровне. (удивлённо) А зачем рисовать сплайны через SetPixel, когда можно к примеру через LineTo или PolyLine?
PS. отвечай прямо на это письмо, а не на первое в треде, тогда я получу уведомление о твоём ответе.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Здравствуйте Alexander Shargin, Вы писали:
AS>Боюсь, что при таком низкоуровневом подходе тебе и заливать придётся на низком уровне. (удивлённо) А зачем рисовать сплайны через SetPixel, когда можно к примеру через LineTo или PolyLine?
А я кстати и понятия об этом не имею, MFC юзаю недавно...
Тормозить такое не будет ?
Привык уже ко всяким SetPixel (putpixel).
А вот насчёт низкоуровневой заливки я бы и хотел узнать, дело всё в том что если сплайн самопересекается то некоторые его части заливаются неправильно. Даже когда используешь что-то типа PolyBezierTo(). А Флэш использует какой-то другой алгоритм, и если инвертить его способ то по-моему получиться вполне приемлемая заливка самопересекающегося сплайна.
Попробовал только что LineTo() Эффект тот же что и от PolyBezierTo() ;-(
Уже даже не знаю что сделать. Теряюсь в просторах Инета.