G I S   T o o l K i t
Справочник программиста

Главная | MAPAPI | PANAPI | Примеры
 

 
ИНТЕРФЕЙС PANAPI

 

Интерфейс PANAPI позволяет программисту создавать собственные прикладные задачи для продуктов линейки ГИС "Панорама". Для продуктов 12-й версии прикладные задачи создаются в виде 64-х разрядных dll-библиотек. Пользователь может добавить такие задачи в систему с помощью режима "Запуск прикладных задач" и в дальнейшем работать с ними, как с обычной задачей соответствующего продукта, вызывая их из управляющей оболочки. Прикладная задача может иметь собственные диалоговые окна, панели инструментов, добавлять свои разделы в главное меню программы, выводить сообщения в строку состояния главного окна и т.п.

Существует два вида прикладных задач:

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

Второй вид - это интерактивные задачи. Например: редактирование, решение расчетных задач, построение отчетов, работа с базами данных и так далее. Работая с такой задачей, пользователь может выбирать на карте объекты, которые следует обработать, изменять состав отображения или состав данных проекта, осуществлять поиск или выделение данных, выполнять другие действия, работая поочередно, то с режимами базовых задач ГИС, то с режимами добавленной прикладной задачи.

 

Создание задачи, работающей в потоковом режиме

Для реализации задач первого вида dll-библиотеки должна содержать две стандартные функции.

extern "C"
{
   long int _ export WINAPI GetInterfaceVersion()
   {
       return MAPACCESSVERSION;
   }

При разработке в Visual C++ вместо "_export" необходимо писать "__declspec(dllexport)". 

Эта функция всегда вызывается системой перед запуском задачи для сравнения версии библиотеки MAPACCESS, используемой программистом при написании задачи, и версии библиотеки, реально установленной в системе. Если версии различаются - задача не будет выполняться. Переменная MAPACCESSVERSION объявлена в файле mapapi.h.

Во многих случаях программист может предусмотреть возврат нуля вместо MAPACCESSVERSION. Это позволит его задаче запускаться даже, если версии библиотек различаются, однако грозит возникновением критических сбоев, если в системе пользователя используется сильно устаревшая версия MAPACCESS. 

Кроме функции проверки версии задача должна содержать функцию вида: 

extern "C"
{
   long int WINAPI CallMapFunctionEx(HMAP hmap, TASKPARMEX* parm)
  {

       ...  // Текст прикладной задачи, работающей в потоковом режиме

   }

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

 

Разработка интерактивных задачх

Для написания интерактивных прикладных задач кроме функций MAPAPI потребуется также использовать средства интерфейса PANAPI. В этом случае интерфейс MAPAPI обеспечивает непосредственную обработку данных электронных карт (векторных, растровых и матричных), а интерфейс  PANAPI – взаимодействие с управляющей оболочкой ГИС, средства интерактивного выбора данных и указание способа обработки.

Интерфейс PANAPI основан на применении трех видов объектов управления: прикладная задача, окно электронной карты, обработчик текущей команды (одного из интерактивных режимов работы задачи). Все объекты могут генерировать события и управляться через изменение их свойств.

Программная реализация PANAPI основана на импорте в прикладную задачу определенного набора функций из библиотеки MAPTASK64.DLL.

При написании прикладных задач используется библиотека PanTask, которая содержит исходные тексты классов PANAPI:

  • объект прикладная задача определен как класс TPanTask;
  • окно электронной карты – TPanWindow;
  • обработчик текущей команды – TPanAction.

Библиотека PanTask содержит также ряд других классов, которые могут быть использованы программистом.

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

Чтобы прикладная задача могла работать внутри продукта линейки ГИС “Панорама”, dll-библиотека должна содержать ряд стандартных функций.

Во-первых, также как в потоковых задачах, должна быть функция проверки версии библиотеки:

extern "C"
{
   long int _ export WINAPI GetInterfaceVersion()
   {
       return MAPACCESSVERSION; // или return 0;
   }

При разработке в Visual C++ писать "__declspec(dllexport)" вместо "_export".

  

Далее dll-библиотека интерактивной задачи должна содержать функцию вида: 

extern "C"
{
    HMAPTASK WINAPI __declspec(dllexport)
    CreatePanTask(HMAPDOC hdoc, TASKPARM* parm, const char* dllname)
    {
           // Создать объект "прикладная задача"

          TPanTask * task = new TUserTask(hdoc, parm, dllname); 

          if (task == 0)
          return 0;

          if (task->GetTaskIdent() == 0)
          {
              delete task;
              task = 0;
          }

          if (task)
          return task->GetTaskIdent(); 

         return 0;
    }
}  

Здесь TUserTask – это класс прикладной задачи, создаваемый разработчиком, производный от класса TPanTask.

При создании объекта класса прикладной задачи будет также автоматически создан экземпляр объекта "окно электронной карты" (TPanWindow). Указатель на этот объект записывается системой в свойство MapWindow созданногообъекта task.

Прикладная задача может поддерживать несколько режимов работы (подзадач). Для пользователем выбора режима задача работы, в задаче может создаваться панель инструментов или пункты меню, которые встраиваются в главное меню системы. Для реализации режимов разработчик создает собственные классы, производные от класса TPanAction.

 

Библиотека классов интерфейса PANAPI:

Класс "прикладная задача" (TPanTask)
Класс "обработчик команды управления" (TpanAction)
Класс "коммутатор обработчиков команды управления" (TPanActionLink)
Класс "окно электронной карты" (TPanWindow)

 

 
 

Касьянов О.В.
info@panorama.kharkov.ua

bigmir)net TOP 100