На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

хотелки - яркое отображение нужных объектов на бледной карте

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2
RSS
хотелки - яркое отображение нужных объектов на бледной карте
 
Андрей, спасибо
нужна именно отсылка по конкретике.

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


но хочется улучшить:
можно ли карту внутри рамки (вторая картинка - красный прямоугольник) сделать целиком пеструю карту, а вне рамки - бледную? вызов mapView и mapViewEx желаемого не дал.
это хотелось сделать как основной эффект, но то что получилось вполне устраивает.

пока есть проблема с мельканием. вполне возможно что я что-то не так делаю.
сейчас, чтобы выделить объект как на картинке справа, нужно знать MapObj.fObj выделяемых объектов.
для этого его нужно заранее найти. а чтобы небыло мелькания приходится искать на скрытой карте.
мелькание возникает из-за сброса селекта когда ищется подсвечиваемый объект
поиске. приходится сбрасывать событие OnMapPaint := nil, а потом его восстанавливать, но от мелькания это не помогает (мелькание только при поиске, при сдвиге карты или масштабировании мелькания нет).
если сброса выделения не делать, новый объект не ищется. то-ли я что-то не так делаю, то-ли так задумано.
мелькание происходит во время сброса поиска - mapobj.MapSelect.Clear.

пока это демка. алгоритм еще прорабатывается.
Снимок2.PNG (36.13 КБ)
Снимок1.PNG (48.71 КБ)
 
Код
// 1 - добавить в класс переменную
HSITE hTempSite;

// 2 - инициализация в конструкторе
hTempSite = 0;

// 3 - Освобождение в деструкторе
if (hTempSite)
{
  mapCloseSiteForMap(hMap, hTempSite);
}

// 4 - Создание перед применением
if (!hTempSite)
{
  // Создать временную карту в памяти
  hTempSite = mapCreateTempSiteForMap(hMap, hMap, 1);
}
else
{
  // Удалить все с карты
  mapClearSite(hMap, hTempSite);
}

// 5 - Нанести полигон для выделения прямоугольника
HOBJ hobj = mapCreateSiteObject(hMap, hTempSite, IDDOUBLE2, 0);

// Зарегистрировать, как графический объект
mapRegisterDrawObject(hobj, 0, LOCAL_SQUARE);

// Запросить габариты документа
DFRAME dframe;
mapGetTotalBorder(hMap, &dframe, PP_PLANE);

// Внешний контур
mapAppendPointPlane(hobj, dframe.X1, dframe.Y1, 0);
mapAppendPointPlane(hobj, dframe.X2, dframe.Y1, 0);
mapAppendPointPlane(hobj, dframe.X2, dframe.Y2, 0);
mapAppendPointPlane(hobj, dframe.X1, dframe.Y2, 0);
mapAppendPointPlane(hobj, dframe.X1, dframe.Y1, 0);

// Внутренний контур (координаты выделяемого прямоугольника или любой области)
int subject = mapCreateSubject(hobj);

mapAppendPointPlane(hobj, x1, y1, subject);
mapAppendPointPlane(hobj, x2, y1, subject);
mapAppendPointPlane(hobj, x2, y2, subject);
mapAppendPointPlane(hobj, x1, y2, subject);
mapAppendPointPlane(hobj, x1, y1, subject);

// Добавить графические параметры (тут можно поиграться) - затуманить область вокруг прямоугольника
IMGPOLYGONGLASS parm;
parm.Color = 0x0808080;
parm.Bright = 50;
parm.Contrast = 50;
parm.Transparency = 50;

mapAppendDraw(hobj, IMG_POLYGONGLASS, (char*)&parm);

// Сохранить объект на временной карте
mapCommitObject(hobj);
mapFreeObject(hobj);


// 6 - перерисовать карту (дальше рамка будет сама рисоваться до очистки временной карты через mapClearSite(hMap, hTempSite) или запрет отображения временной карты)


При перерисовке карты через механизм двойной буферизации (см. mapCreateImageEx() и далее) этот прямоугольник можно мышкой перемещать
по карте без мерцания.
Страницы: Пред. 1 2
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности