При объединении двух и более регионов (метод Region::Union) регион при его отображении рисуется как надо, а вот ограничивающий его прямоугольник (метод Region::GetBounds) возвращается неверный
Эффект имеет место даже если второй регион полностью находится внутри первого. Регионы создавал уже и непосредственно из примитивов и из путей (GraphicPath). А вот если объединить сначала пути, а потом из них создат регион — всё нормально, но этот вариант не подходит, есть объекты, которые возвращают регионы.
Кто сталкивался с этой проблемой подскажите как быть.
Re: Объединение регионов в GDI+ происходит с ошибками
Здравствуйте, s_tar, Вы писали:
_>При объединении двух и более регионов (метод Region::Union) регион при его отображении рисуется как надо, а вот ограничивающий его прямоугольник (метод Region::GetBounds) возвращается неверный
Не сталкивался, но просто интересно — как именно "неверный"? Регион выходит за пределы прямоугольника или прямоугольник содержит регион, но не является минимальным? Если второе, то документация говорит:
The rectangle returned by GetBounds is not always the smallest possible rectangle.
Re: Объединение регионов в GDI+ происходит с ошибками
Здравствуйте, ghostrider, Вы писали: G>Если не сложно, приведите конкретный пример.
VS сейчас под рукой нет, но тестовый пример, на котором проверял есть
Region r;
r.MakeEmpty();
r.Union(RectF(0,0,100,100));
RectF rect_f;
r.GetBounds(&rect_f, &gr);
r.Union(RectF(0,0,200,10));
RectF rect_s;
r.GetBounds(&rect_s, &gr);
// rect_s немного больше rect_f (на несколько десятых)
Этот эффект заметил при следующих обстоятельствах: группу выделенных объектов обвожу CRectTracker'ом. Для этого получаю регионы всех объектов и объединяю их. Результат налицо, рамка выделения расползается. Сначала думал неправильно пересчитываю координаты, но на контрольном примере то же самое, хотя отклонения меньше.
Re[3]: Объединение регионов в GDI+ происходит с ошибками
Здравствуйте, s_tar, Вы писали:
_>Здравствуйте, ghostrider, Вы писали: G>>Если не сложно, приведите конкретный пример.
_>VS сейчас под рукой нет, но тестовый пример, на котором проверял есть _>[ccode] _> Region r; _> r.MakeEmpty();
_> r.Union(RectF(0,0,100,100)); _> RectF rect_f;
0,0,200,100 _> // rect_s немного больше rect_f (на несколько десятых)
Во-первых, не немного, а 2 раза — как и должно быть — объединение 0,0,100,100 c 0,0,200,10 дает 0,0,200,100 в качестве объемлющего прямоугольника.
_>Этот эффект заметил при следующих обстоятельствах: группу выделенных объектов обвожу CRectTracker'ом. Для этого получаю регионы всех объектов и объединяю их. Результат налицо, рамка выделения расползается. Сначала думал неправильно пересчитываю координаты, но на контрольном примере то же самое, хотя отклонения меньше.
Проверь свой тест, что-то здесь не то.
With best regards
Pavel Dvorkin
Re[3]: Объединение регионов в GDI+ происходит с ошибками
Здравствуйте, s_tar, Вы писали:
_>Этот эффект заметил при следующих обстоятельствах: группу выделенных объектов обвожу CRectTracker'ом. Для этого получаю регионы всех объектов и объединяю их. Результат налицо, рамка выделения расползается.
Из описания функции следует, что в общем случае нерасползание рамки не гарантируется — см. цитату в моем сообщении выше.