/****** MAP3DAPI.H ********** Kruzhkova E.A. ******* 02/08/16 ******

******* MAP3DAPI.H ********** Derevyagina Zh.A.***** 12/11/10 ******

******* MAP3DAPI.H ********** Dishlenko S.G. ******* 26/03/12 ******

******* MAP3DAPI.H ********** Shabakov D.A.  ******* 30/05/13 ******

*                                                                  *

*              Copyright (c) PANORAMA Group 1991-2016              *

*                      All Rights Reserved                         *

*                                                                  *

********************************************************************

*                                                                  *

*                  FOR  WINDOWS95 & WINDOWS NT                     *

*                                                                  *

********************************************************************

*                                                                  *

*       API-ФУНКЦИИ ДЛЯ РАБОТЫ С ТРЕХМЕРНОЙ МОДЕЛЬЮ МЕСТНОСТИ      *

*        ИНТЕРФЕЙС ДЛЯ ПРОГРАММ НА ЯЗЫКАХ C, PASCAL, BASIC         *

*                                                                  *

********************************************************************

*                                                                  *

*    Импортирование функций в Windows :                            *

*                                                                  *

*    // Загрузка библиотеки                                        *

*    HINSTANCE libInst = ::LoadLibrary("gis3d.dll");               *

*                                                                  *

*    // Вызов функции открытия                                     *

*    HTASK3D (WINAPI * lpfn_Open3D)(HMAP hMap,                     *

*                        CREATETASK3D* create, TASKPARMEX* tparm); *

*    (FARPROC)lpfn_Open3D = GetProcAddress(libInst,                *

*                                             "t3dOpen");          *

*    HTASK3D htask3d =(*lpfn_Open3D)(hmap, create3d, parmex);      *

*    ...                                                           *

*                                                                  *

*    // Вызов функции установки центра вращения модели             *

*    long int (WINAPI * lpfn_SetPointOn3D)(HTASK3D hTask3D,        *

*                                          XYHDOUBLE* point);      *

*    (FARPROC)lpfn_SetPointOn3D = GetProcAddress(libInst,          *

*                                                "t3dSetPoint");   *

*    long int ret =(*lpfn_lpfn_SetPointOn3D)(htask3d,              *

*                                            &pointCenter);        *

*                                                                  *

*    ...                                                           *

*                                                                  *

*    // Вызов функции закрытия                                     *

*    HTASK3D (WINAPI * lpfn_Close3D)(HTASK3D hTask3D);             *

*    (FARPROC)lpfn_Close3D = GetProcAddress(libInst, "t3dClose");  *

*    (*lpfn_Close3D)(htask3d);                                     *

*                                                                  *

*    ...                                                           *

*                                                                  *

*    // Выгрузка библиотеки                                        *

*    ::FreeLibrary(libInst);                                       *

*                                                                  *

*******************************************************************/

 

#ifndef MAP3DAPIH

#define MAP3DAPIH

 

#include "maptype.h"

 

extern "C"

{

 

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

// Название секции в ini-файле карты для задачи "3D-НАВИГАТОР"

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

#define IniFileSection "MAP3D"

 

#if defined(_M_X64) || defined(BUILD_DLL64)       // 30/05/13

 

typedef __int64   HTASK3D;    // ИДЕНТИФИКАТОР ЗАДАЧИ ТРЕХМЕРНОГО ОТОБРАЖЕНИЯ

                              // ДАННЫХ(КАРТЫ, РАСТРА, МАТРИЦЫ)

#else

 

typedef long int  HTASK3D;    // ИДЕНТИФИКАТОР ЗАДАЧИ ТРЕХМЕРНОГО ОТОБРАЖЕНИЯ

                              // ДАННЫХ(КАРТЫ, РАСТРА, МАТРИЦЫ)

 

#endif

 

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

// СТРУКТУРА ПЕРЕДАЧИ ОТКРЫТЫХ ДАННЫХ ДЛЯ ПОСТРОЕНИЯ 3D-МОДЕЛИ

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

typedef struct CREATETASK3D

{

  DFRAME   SelectFrame;       // Габариты выбранного для построения модели

                              // участка района (в метрах на местности)

  int Area;                   // Область построения модели:                                     // 26/03/12

                              //   0 - весь район

                              //   1 - выбор участка района (SelectFrame)

                              //   2 - по размеру окна карты

  int MoveAdjust;             // Синхронизация перемещений двух- и трехмерной карт

                              //   0 - не синхронизировать

                              //   1 – синхронизировать перемещение

                              //   2 - синхронизировать масштабирование

                              //   3 - синхронизировать перемещение и

                              //       масштабирование

                              // Значения переменной wParam (notification code)

                              // сообщений типа WM_COMMAND, посылаемых от окна 3D-модели

                              // окну документа, которые необходимо задать для

                              // синхронизации работы 3D-модели с двухмерными данными

                              // (или нули, если синхронизация ненужна)

  int CmStop3d;               // Сообщение запроса о возможности закрытия

  int CmMove3d;               // Сообщение о перемещении центра вращения

                              // 3D-модели при активном режиме синхронизации

                              // перемещения

  int CmSelectFrame3d;        // Сообщение о необходимости выбора части

                              // района для построения на эту часть новой

                              // 3D-модели

  int CmSelectObject3d;       // Сообщение о выборе или отмене выбора объекта

                              // на трехмерной модели

  int CmScale3d;              // Сообщение о масштабировании

                              // трехмерной модели

  int Update;                 // Флаг необходимости обновления сохраненных данных модели     // 05/07/12

                              // 0 - не обновлять,

                              // 1 - удалить сохраненные данные и пересоздать   модель

                              // 2 - обновлять только поверхность модели                    // 02/08/16

                              //     без изменения текстур

  DFRAME   MapWindowFrame;    // Габариты учаcтка, отображаемого в окне двухмерной карты

                              // (в метрах на местности)

 

char     Reserve[216];

}

  CREATETASK3D;

 

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

// Открыть окно отображения трехмерной модели полученных данных

// Построить и отобразить трехмерную модель.

// После успешного вызова данной функции получаем окно с рабочей 3D-моделью

// текущей карты, с возможностью перемещения по ней с помощью мыши и клавиатуры,

// изменения ее параметров через меню и элементы управления

//   Вход:

//      hMap  - идентификатор открытых данных

//     create - описание данных для построения 3D-модели           // 14/09/06

//      tparm - описание параметров приложения

//   Возвращает:  идентификатор запущенной задачи

//   При ошибке возвращает ноль

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

HTASK3D _MAPAPI t3dOpen(HMAP hMap, CREATETASK3D* data, TASKPARMEX* tparm);

 

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

// Закрыть окно отображения трехмерной модели данных

//   Вход:

//     hTask3D - идентификатор запущенной задачи

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

void _MAPAPI t3dClose(HTASK3D hTask3D);

 

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

// Установить центр вращения трехмерной модели в заданную точку(координаты

// задаются в метрах на местности), перерисовать модель

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//       point - точка будущего центра модели (в метрах на местности)

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dSetPoint(HTASK3D hTask3D, XYHDOUBLE* point);

 

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

// Установить центр вращения трехмерной модели в заданную точку с поворотом

// в заданном направлении, перерисовать модель

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//      point1 - точка будущего центра вращения модели (в метрах на местности)

//      point2 - точка, задающая направление поворота модели (в метрах на местности)

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dSetPointAndDirect(HTASK3D hTask3D, XYHDOUBLE* point1,

                                      XYHDOUBLE* point2);

 

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

// Запросить положение центра вращения трехмерной модели

// (в метрах на местности)

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//       point - адрес для координат возвращаемой точки в метрах на местности

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dGetPoint(HTASK3D hTask3D, XYHDOUBLE* point);

 

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

// Проверяет активность синхронизации движения 2D и 3D карт

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//   Возвращает: 1 - синхронизация включена, 0 - выключена

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

long int _MAPAPI t3dMoveAdjustIsActive(HTASK3D hTask3D);

 

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

// Согласовать данные векторной карты в памяти и на диске

// (при необходимости выполняется перестройка и отображение новой 3D-модели)

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dAdjustData(HTASK3D hTask3D);

 

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

// Обновить и отобразить 3D-модель векторной карты

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dUpdateData(HTASK3D hTask3D);

 

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

// Выделить объект на трехмерной модели

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//        hObj - идентификатор выбранного объекта

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dSetSelectObject(HTASK3D hTask3D, HOBJ hObj);

 

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

// Сбросить выделение объекта на трехмерной модели (если объект был ранее

// выделен функцией t3dSetSelectObject)

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dClearSelectObject(HTASK3D hTask3D);

 

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

// Копирование выбранного на трехмерной модели объекта

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//        hObj - идентификатор объекта для копирования выбранного объекта

//   При ошибке возвращает ноль

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

long int _MAPAPI t3dGetSelectObject(HTASK3D hTask3D, HOBJ hObj);

 

// Запросить текущий знаметнатель масштаба отображения 3D-модели

//   Вход:

//     hTask3D - идентификатор запущенной задачи

//       scale - адрес для значения знаменателя масштаба

//   При ошибке возвращает ноль

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

long int _export WINAPI t3dGetViewScale(HTASK3D hTask3D, double* scale);

 

 

 

}       // extern "C"

 

#endif

 

Дата последней корректировки  02.12.2016 г.