Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Карта

2.0K
15 февраля 2005 года
Asius
36 / / 06.10.2004
Допустим есть карта Африки
Как сделать чтобы если пользователь щелкунл по Египту выделялись границы Египта, если по Каиру - границы Каира.

Желательно пример или соответствующая дкументация.
9.8K
16 февраля 2005 года
Beer
5 / / 15.02.2005
Цитата:
Originally posted by Asius
Допустим есть карта Африки
Как сделать чтобы если пользователь щелкунл по Египту выделялись границы Египта, если по Каиру - границы Каира.

Желательно пример или соответствующая дкументация.



Я такое делал с картой Москвы. Может не очень эфективно, но работает.

1. В программе MapEdit (она шариварная можно найти в инете) обрисовал все районы и сохранил в текстовом файле координаты углов получившихся полигонов (многоугольников)
2. Для каждого района сделал картинку с выделением и загрузил их в ImageList
3. Далее обрабатывал сообщение на компоненте OmMouseMove и в зависимости от положения мышки менял картинку на компоненте. В вашем случае, на сколько я понял, надо обрабатывать сообщение OnClick.

P.S. Если надо могу дать алгоритм как определить, на каком полигоне в данный момент находится мышка.

2.0K
16 февраля 2005 года
Asius
36 / / 06.10.2004
Угу если нетрудно можно с маленьким примером
9.8K
24 февраля 2005 года
Beer
5 / / 15.02.2005
Цитата:
Originally posted by Asius
Угу если нетрудно можно с маленьким примером



Пример великоват будет. Пэтому если хочешь его лицезреть, долбись мне на мыло я тебе вышлю.

А идея примерно такая. Полигоны описываются массивом точек
A[0].X := 0;
A[0].Y := 0;
A[1].X := 5;
....
A[n].X := A[0];
A[n].Y := A[0];
Массив можно читать из файла. Далее берем произвольную точку, которая ну никак не может находиться в полигоне и проводим прямую между этой точкой и положением указателя мышки. Далее
считаем сколько раз эта прямая пересечет отрезки:

A[0]-A[1], A[1]-A[2],... A[n-1]-A[n]

Если получим четное число, то курсор находится все этого полигона и переходим к следующему. А если нечетное, то курсор находится в полигоне.

259
24 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Beer


Пример великоват будет. Пэтому если хочешь его лицезреть, долбись мне на мыло я тебе вышлю.

А идея примерно такая. Полигоны описываются массивом точек
A[0].X := 0;
A[0].Y := 0;
A[1].X := 5;
....
A[n].X := A[0];
A[n].Y := A[0];
Массив можно читать из файла. Далее берем произвольную точку, которая ну никак не может находиться в полигоне и проводим прямую между этой точкой и положением указателя мышки. Далее
считаем сколько раз эта прямая пересечет отрезки:

A[0]-A[1], A[1]-A[2],... A[n-1]-A[n]

Если получим четное число, то курсор находится все этого полигона и переходим к следующему. А если нечетное, то курсор находится в полигоне.


Это классическая задача теории фрактальных множеств. Поиск по инету со словом фрактал даст большой объем литературы и примеров.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог