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

voice2 (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » voice2
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
работа с семантикой
 
Вы используете функцию:
long int _MAPAPI mapAppendSemantic(HOBJ info,long int code, char * value,long int size);
Здесь Сode - внешний код характеристики, указанный в классификаторе открытой карты (пользовательской карты), соответственно, название характеристики меняется либо вручную в классификаторе при помощи программы ГИС Интеграция,
либо использовать api функиции по работе с классификатором карты такие как:
 // Создать новую семантику - возвращает  код созданной семантики
 // hRsc - идентификатор классификатора карты
 // структура RSCSEMANTICEX описана в maptype.h
 // При ошибке возвращает ноль

long int  _MAPAPI mapAppendRscSemanticEx(HRSC hRsc,RSCSEMANTICEX * rsem);

либо:

 // Обновить семантику - возвращает  код обновленной семантики
 // code - код обновляемой семантики
 // classupdate - 1, классификатор семантики удаляется для последующего
 // обновления
 // hRsc - идентификатор классификатора карты
 // структура RSCSEMANTICEX описана в maptype.h
 // При ошибке возвращает ноль

long int  _MAPAPI mapUpdateRscSemanticEx(HRSC hRsc,long int code,

                                   RSCSEMANTICEX * rsem,long int classupdate);

Более подробно можно посмотреть в справке по MapApi
Название семантической характеристики изменяется в структуре RSCSEMANTICEX.

// ОПИСАНИЕ СЕМАНТИКИ
typedef struct RSCSEMANTICEX  // РАСШИРЕННОЕ ОПИСАНИЕ СЕМАНТИЧЕСКОЙ
                             // ХАРАКТЕРИСТИКИ ОБ'ЕКТА
{
 long int Code;         // внешний код
 long int Type;         // тип значения
 long int Reply;        // разрешается повторение (1)
 long int Enable;       // допустимая(1),обязательная(2)
                        // (при создании семантики поле не учитывается)
 long int Service;      // служебная,допустима для всех объектов (1)
 long int Reserv;       // резерв (должен быть равен 0)
 char     Name[32]; // название характеристики
 char     Unit[8]; // единица измерения
 double   Minimum;      // минимальное значение
 double   Default;      // умалчиваемое значение
 double   Maximum;      // максимальное значение
 long int Size;         // общий размер поля значения семантики
 long int Decimal;      // точность поля значения семантики
 char     ShortName[16];// короткое имя семантики (связь с полем БД)
}
 RSCSEMANTICEX;
Изменено: voice2 - 03.02.2009 14:25:03
Печать карть программным способом под операционной системой МСВС
 
[B]Печать карты под операционной системой МСВС:
[/B]
[B]Способ №1 Использование библиотек QT
[/B]
[code]
// создаем принтер
printer = new QPrinter( QPrinter::ScreenResolution);
HDC FmapDC;
RECT mapRect;
QPainter *p;
p = new QPainter();
// создаем изображение равное по размеру области вывода карты
QPixmap * pixmap = new QPixmap(MAP->viewport()->width(),MAP->viewport()->height());

if (MAP -> hMap) // если карта открыта заполняем созданное изображение
  {                           //изображением карты отображенной на экране
     
       FxDC.xcDisplay = pixmap -> x11AppDisplay();
       FxDC.xcWindow = pixmap -> handle();
       FxDC.xcContext = XCreateGC(FxDC.xcDisplay, FxDC.xcWindow, 0, NULL);
  FxDC.xcPoint.X =   MAP->viewport()->x();
  FxDC.xcPoint.Y =   MAP->viewport()->y();
FmapDC = HDC(&FxDC);
mapRect.left = MAP->viewport()->x() + MAP->contentsX();
mapRect.top  = MAP->viewport()->y() + MAP->contentsY() ;
mapRect.right  = MAP->viewport()->x() + MAP->viewport()->width() + MAP->contentsX();
mapRect.bottom = MAP->viewport()->y() + MAP->viewport()->height() + MAP->contentsY();
mapPaint95( MAP->hMap,FmapDC,1,&mapRect);
XFreeGC( FxDC.xcDisplay,FxDC.xcContext );  

   printer->setFullPage( TRUE );
  // запускаем стандартный диалог печати
   if ( printer->setup(this) ) {               // printer dialog
       qDebug("start printing");
      if( !p -> begin( printer ) ) {               // paint on printer
           qDebug( "Printing aborted");
           return;
       }
  // распечатываем полученное изображение
     p->drawTiledPixmap(0,0,MAP->viewport()->width(),MAP->viewport()->height(),*pixmap,0,0);
  }

}
 delete(p);
 delete(pixmap);
 delete(printer);
[/code]
[B]Достоинства данного способа:[/B]
1. Используются только функции QT и функции содержащиеся в библиотеке libmapacces.so
2. Возможности дополнительного редактирования и совершенствования

[B]Недостатки:[/B]
1. При использовании данного примера на печать выводится только область карты видимая на экране.
2. Размер выводимого изображения не превышает размеров экрана, в связи с этим нет возможности детальной печати изображения на листах большого формата (A3-A0 и более)
Но указанные недостатки могут быть устранены при использовании достоинства №2.


[B]Способ № 2. Печать с использованием функций MapApi. (Пример взят из файла prnapi.h)[/B]
[code]
 // Загрузить принтер
 HPRINTER printer = prnLoadPrinter();
 // Вызвать диалог печати
 // (печать выбранного фрагмента карты производится
 //  автоматически при нажатии кнопки "Печать")

 ret = prnMapPrint(hmap, printer, printparm, taskparm);

// При успешном выполнении диалога возвращаемое значение не равно 0
 if (ret != 0)
 {
   // Закрытие диалога при помощи кнопки "Выбрать"
   if (printparm->Regime == MPR_SELECTFRAME)
   {
     // Вызвать пользовательскую функцию выбора прямоугольной области
     // ...
   }
   // Закрытие диалога при помощи кнопки "Изменить"
   if (printparm->Regime == MPR_CHANGEFRAME)
   {
     // Вызвать пользовательскую функцию изменения прямоугольной области
     // ...
   }
 }
  // Освободить принтер
 prnFreePrinter(printer);
[/code]
Более подробно см. prnapi.h

[B]Недостатки: [/B]
Данный способ под МСВС реализовать не удалось, так как не удалось найти аналога библиотекам mapprint.dll, gisforms.dll  для операционной системы МСВС.
Вопрос администрации:
Реализована ли подсистема печати при помощи вышеописанных функций?
Если да, то в каких библиотеках они размещаются?
Страницы: 1



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

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