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

Выделение объектов

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Выделение объектов
 
Здравствуйте! Использую ГИС Конструктор 11.10.4 под AstraLinux 1.4.
Использую следующий код для изменения цвета объекта.
Код
bool MapApi::flashObject(HOBJ hobj, long color, long win_id,
                         const QPoint& top_left_display)
{
   try
   {
      if(!hobj)
         throw std::runtime_error("Передан некоректный описатель объекта");

      if(!win_id)
         throw std::runtime_error("Передан некоректный описатель окна");

      HMAP hmap = _core->getMapHandle();
      if(!hmap)
         throw std::runtime_error("Получен некорректный описатель карты");

      IMGLINE img_obj;
      memset(&img_obj,0,sizeof(IMGLINE));
      img_obj.Color = color;
      img_obj.Thick = PIX2MKM(3);

      PAINTPARM image;
      memset(&image,0,sizeof(PAINTPARM));
      image.Image = IMG_OBJECT;
      image.Mode  = R2_COPYPEN;
      image.Parm  = (char*)(&img_obj);

      XCONTEXT FxDC;
      memset(&FxDC,0,sizeof(XCONTEXT));
      FxDC.xcDisplay = QX11Info::display();
      FxDC.xcWindow  = win_id;
      FxDC.xcContext = XCreateGC(FxDC.xcDisplay,FxDC.xcWindow,0,NULL);
      FxDC.xcPoint.X = 0;
      FxDC.xcPoint.Y = 0;

      DOUBLEPOINT dp;
      dp.x = top_left_display.x();
      dp.y = top_left_display.y();

      if(!_core->mapViewMapObject(hmap,(HWND)&FxDC,&dp,&image,hobj,PP_PICTURE))
         throw std::runtime_error("Не удалось отрисовать объект");
   }
   catch(const std::runtime_error& err)
   {
      _error = err.what();
      return false;
   }
   return true;
}
При этом для площадных и линейных объектов это не работает. Кто-то может сказать почему?
 
Предлагаю для площадных и линейных объектов следующий код выделения линией:
Код
      IMGLINE img_obj;
      memset(&img_obj,0,sizeof(IMGLINE));
      img_obj.Color = color;
      img_obj.Thick = PIX2MKM(3);

      PAINTPARM image;
      memset(&image,0,sizeof(PAINTPARM));
      image.Image = IMG_LINE;
      image.Mode  = R2_COPYPEN;
      image.Parm  = (char*)(&img_obj);

      XCONTEXT FxDC;
      memset(&FxDC,0,sizeof(XCONTEXT));
      FxDC.xcDisplay = QX11Info::display();
      FxDC.xcWindow  = win_id;
      FxDC.xcContext = XCreateGC(FxDC.xcDisplay,FxDC.xcWindow,0,NULL);
      FxDC.xcPoint.X = 0;
      FxDC.xcPoint.Y = 0;

      DOUBLEPOINT dp;
      dp.x = top_left_display.x();
      dp.y = top_left_display.y();

      if(!_core->mapViewMapObject(hmap,(HWND)&FxDC,&dp,&image,hobj,PP_PICTURE))
         throw std::runtime_error("Не удалось отрисовать объект");
 
Спасибо, помогло.
Страницы: 1
Читают тему (гостей: 1)



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

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