powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как рассчитать положение объектов, чтобы они не пересекались
4 сообщений из 4, страница 1 из 1
Как рассчитать положение объектов, чтобы они не пересекались
    #38963858
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть список объектов.
Таким способом я определяю размер прямоугольника:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FormattedText ft = new FormattedText(SweEphHelper.GetPlanetSign((Data.Code == 11 ? Data.Code * -1 : Data.Code)),
                    new CultureInfo("en-us"),
                    FlowDirection.LeftToRight,
                    new Typeface(new FontFamily(new Uri("pack://application:,,,/Astro;Component/Fonts"), "#Test"), FontStyles.Normal,
                    FontWeights.Normal, new FontStretch()),
                    18D,
                    Brushes.Black);
Rect rect = new Rect(x, y, ft.Width, ft.Height);
context.DrawText(ft, new Point(x - ft.Width / 2, y - ft.Height / 2));



Как мне рассчитать положение каждого прямоугольника, чтобы они располагались в шахматном порядке, если пересеклись?
...
Рейтинг: 0 / 0
Как рассчитать положение объектов, чтобы они не пересекались
    #38963953
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavluhaЕсть список объектов.
Таким способом я определяю размер прямоугольника:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
FormattedText ft = new FormattedText(SweEphHelper.GetPlanetSign((Data.Code == 11 ? Data.Code * -1 : Data.Code)),
                    new CultureInfo("en-us"),
                    FlowDirection.LeftToRight,
                    new Typeface(new FontFamily(new Uri("pack://application:,,,/Astro;Component/Fonts"), "#Test"), FontStyles.Normal,
                    FontWeights.Normal, new FontStretch()),
                    18D,
                    Brushes.Black);
Rect rect = new Rect(x, y, ft.Width, ft.Height);
context.DrawText(ft, new Point(x - ft.Width / 2, y - ft.Height / 2));



Как мне рассчитать положение каждого прямоугольника, чтобы они располагались в шахматном порядке, если пересеклись?
у структуры Rect есть метод Intersect, она возвращает Rect пересечения 2 прямоугольников.

Но вообще это делается с помощью панелей и элементов панели, а не вот таким способом.
в WPF переопределять OnRender далеко не лучшая практика. Для размещения элементов существует класс Panel который можно наследовать и переопределить. Задав свою логику расположения объектов в панели. Все панели такие как Grid, StackPanel и так далее наследования от неё. Для виртуализации используйте VirtualiingPanel, но последний класс абстрактный и сделать реально работающую виртуальную панель будет очень и очень не просто.
...
Рейтинг: 0 / 0
Как рассчитать положение объектов, чтобы они не пересекались
    #38963992
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Мне надо пересчитать просто положение элемента и все.
...
Рейтинг: 0 / 0
Как рассчитать положение объектов, чтобы они не пересекались
    #38964005
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavluhaRoman Mejtes,

Мне надо пересчитать просто положение элемента и все.ну у вас есть список Rect которые уже размещены на панели когда вы их отрисовали, обходите этот список с новым рект, проверяете, если он пересекается, перемещаете его туда, куда вам надо. в чем проблема то?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как рассчитать положение объектов, чтобы они не пересекались
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]