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

Вывести изображение объекта из классификатора

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 3 След.
RSS
Вывести изображение объекта из классификатора, как вывести в bmp файл?
 
Здраствуйте.
Подскажите пож-та, можно получить доступ к изображению объекта в классификаторе?
Как его вывести целиком?
Можно привести к bmp изображению?

Спасибо.
Елена
 
Подойдет функция:
// Отобразить образец вида объекта по номеру записи      
// в классификаторе объектов (incode)
// hmap - идентификатор открытой карты
// hrsc - идентификатор классификатора открытой карты
// hdc  - идентификатор контекста устройства вывода,
// (0 - фон не стирать, !=0 - очистить фрагмент цветом фона)
// rect - координаты клиентской области окна вывода (размер окна)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapPaintExampleRscObject(HMAP hmap, HRSC hrsc,
                                                 HDC hdc, RECT* rect,
                                                 long int incode);

HDC для Linux - это указатель на XCONTEXT
Пример заполнения XCONTEXT:
QPixmap pixmap;
XCONTEXT FxDC;

FxDC.xcDisplay = pixmap.x11AppDisplay();
FxDC.xcWindow = pixmap.handle();
FxDC.xcContext = XCreateGC(FxDC.xcDisplay, FxDC.xcWindow, 0, NULL);
FxDC.xcPoint.X = 0;
FxDC.xcPoint.Y = 0;
 
Спасибо.
1.Если нет открытой карты, то не вывести?
Елена
 
Есть возможность вывести изображение в отдельной окно , как в примере Delphi?

Пытаюсь вывести на QLable.(QLable * lblPix).
Ничего не выводит. Доступ к объекту классификатора получаю правильно.
     int incode =  mapGetRscObjectCodeByNumber(hrsc,rscN,LOCAL_VECTOR);
   
     QString name  =  mapGetRscObjectName(hrsc, incode);
     lblName->setText(tr(name));  //- Проверка. Объект корректен
   
     HDC hDC;
     XCONTEXT  xCont;
     RECT rect;
 
     QPixmap * pixmap = new QPixmap( lblPix->width(), lblPix->height());
     xCont.xcDisplay =  pixmap-> x11AppDisplay();
     xCont.xcWindow = pixmap->handle();
     xCont.xcContext =XCreateGC(xCont.xcDisplay, xCont.xcWindow, 0, NULL);
     xCont.xcPoint.X = lblPix->x();
     xCont.xcPoint.Y = lblPix->y();
   
     hDC = HDC(&xCont);
     rect.left = lblPix->x();
     rect.top = lblPix->y();
     rect.right = lblPix->x() + lblPix->width();
     rect.bottom = lblPix->y() + lblPix->height();
   
     if(mapPaintExampleObjectEx(hmap,hDC, &rect, incode,1) == 0)
   messErr("NO");

     Если lblPix->setPixmap(pixmap) - выводит черный квадрат.


//-------------------------------------------//

2. Функции  mapGetRscObjectKeyIncode();  - НЕ Работает .
3. Функции  mapGetRscObjectCode();  - НЕ Работает .
Елена
 
Цитата
Елена пишет:
Спасибо.

1.Если нет открытой карты, то не вывести?

Для такого случая есть функция:

 // Создать временную пользовательскую карту
 // rscname - полное имя файла ресурсов
 // Файлы карты размещаются в рабочей директории системы
 // и имеют уникальные имена, генерируемые автоматически
 // При закрытии карты все файлы данных удаляются
 // При ошибке возвращает ноль

_MAPIMP HMAP _MAPAPI mapCreateTempSite(const char * rscname);


Что означает "Не работает" ? Возвращает ноль?
Хорошо бы увидеть текст программы.
 
1)   Поправлю пример:
int incode = mapGetRscObjectCodeByNumber(hrsc,rscN,LOCAL_VECTOR);

QString name = mapGetRscObjectName(hrsc, incode);
lblName->setText(tr(name)); //- Проверка. Объект корректен

HDC hDC;
XCONTEXT xCont;
RECT rect;

QPixmap * pixmap = new QPixmap( lblPix->width(), lblPix->height());
xCont.xcDisplay = pixmap-> x11AppDisplay();
xCont.xcWindow = pixmap->handle();
xCont.xcContext =XCreateGC(xCont.xcDisplay, xCont.xcWindow, 0, NULL);
xCont.xcPoint.X = 0;//lblPix->x();
xCont.xcPoint.Y = 0;//lblPix->y();

hDC = HDC(&xCont);
rect.left = 0;//lblPix->x();
rect.top = 0;lblPix->y();
rect.right = lblPix->width();
rect.bottom = lblPix->height();

if(mapPaintExampleObjectEx(hmap,hDC, &rect, incode,1) == 0)
messErr("NO");
lblPix->setPixmap(pixmap);

Так будет правильно.
2)По поводу функций - mapGetRscObjectKeyIncode();mapGetRscObjectCode();
Какой продукт и какая версия?
 
2). mapGetRscObjectKeyIncode();mapGetRscObjectCode()Возвращают 0.
   А mapGetRscObjectCodeByNumber с теми же данными возвращает корректное значение.
   gisdesigner9.6 для МСВС от 1 сентября 2009.
1). Спасибо пример. протестирую напишу.
0). _MAPIMP HMAP _MAPAPI mapCreateTempSite(const char * rscname);
 Нужно до открытия карты воспользоваться функцией mapPaintExampleObjectEx(hmap,hDC, &rect, incode,1). Предоставить  возможность просмотра и выбора объектов классификатора и назначения его объекта, куоторые будут созданы на карте.
 Решение - создавать временную карту и  переметры ее передавать в mapPaintExampleObjectEx(hmap,hDC, &rect, incode,1) ?

Спасибо.
Изменено: myr - 28.10.2009 20:39:26
Елена
 
Представьте, пожалуйста, тексты с применением функций mapGetRscObjectKeyIncode();mapGetRscObjectCode().
 
Спасибо за исправленный тест, все работает.
С mapCreateTempSite разобралась.

   QString rscKey = rec->value("rsc_key").toString();
   rscKey.remove(0,1);
   int rscN =rscKey.toInt();
   lblKey->setText(rscKey);
   
   int incode =  mapGetRscObjectCodeByNumber(hrsc,rscN,LOCAL_VECTOR); - верное значение
   int cod2=  mapGetRscObjectKeyIncode(hrsc,rscKey);    
   if(cod2==0)
      messErr("cod2==0");  - возвращает 0.
Елена
 
В качестве входных параметров для MAPAPI функций применяются только типы char, но не в коем случае QString, что наблюдается у Вас в строке:
int cod2= mapGetRscObjectKeyIncode(hrsc,rscKey);
Ознакомьтесь с прототипом данной функции.
Страницы: 1 2 3 След.
Читают тему (гостей: 1)



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

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