Объединение регионов в GDI+ происходит с ошибками
От: s_tar  
Дата: 11.05.06 14:10
Оценка:
При объединении двух и более регионов (метод Region::Union) регион при его отображении рисуется как надо, а вот ограничивающий его прямоугольник (метод Region::GetBounds) возвращается неверный

Эффект имеет место даже если второй регион полностью находится внутри первого. Регионы создавал уже и непосредственно из примитивов и из путей (GraphicPath). А вот если объединить сначала пути, а потом из них создат регион — всё нормально, но этот вариант не подходит, есть объекты, которые возвращают регионы.

Кто сталкивался с этой проблемой подскажите как быть.
Re: Объединение регионов в GDI+ происходит с ошибками
От: Vadim B  
Дата: 11.05.06 18:00
Оценка:
Здравствуйте, s_tar, Вы писали:

_>При объединении двух и более регионов (метод Region::Union) регион при его отображении рисуется как надо, а вот ограничивающий его прямоугольник (метод Region::GetBounds) возвращается неверный


Не сталкивался, но просто интересно — как именно "неверный"? Регион выходит за пределы прямоугольника или прямоугольник содержит регион, но не является минимальным? Если второе, то документация говорит:

The rectangle returned by GetBounds is not always the smallest possible rectangle.

Re: Объединение регионов в GDI+ происходит с ошибками
От: ghostrider Беларусь https://www.linkedin.com/in/andreipushkin
Дата: 11.05.06 19:00
Оценка:
Если не сложно, приведите конкретный пример.
Re[2]: Объединение регионов в GDI+ происходит с ошибками
От: s_tar  
Дата: 12.05.06 05:33
Оценка:
Здравствуйте, 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+ происходит с ошибками
От: Pavel Dvorkin Россия  
Дата: 12.05.06 11:54
Оценка:
Здравствуйте, s_tar, Вы писали:

_>Здравствуйте, ghostrider, Вы писали:

G>>Если не сложно, приведите конкретный пример.

_>VS сейчас под рукой нет, но тестовый пример, на котором проверял есть

_>[ccode]
_> Region r;
_> r.MakeEmpty();

_> r.Union(RectF(0,0,100,100));

_> RectF rect_f;


_> r.GetBounds(&rect_f, &gr);


0,0,100,100


_> r.Union(RectF(0,0,200,10));

_> RectF rect_s;
_> r.GetBounds(&rect_s, &gr);


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+ происходит с ошибками
От: Vadim B  
Дата: 12.05.06 18:06
Оценка:
Здравствуйте, s_tar, Вы писали:

_>Этот эффект заметил при следующих обстоятельствах: группу выделенных объектов обвожу CRectTracker'ом. Для этого получаю регионы всех объектов и объединяю их. Результат налицо, рамка выделения расползается.


Из описания функции следует, что в общем случае нерасползание рамки не гарантируется — см. цитату в моем сообщении выше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.