/****** MTDAPI.H *************** Gorbunov A.V.   ****** 09/06/17 ***

******* MTDAPI.H *************** Shabakov D.A.   ****** 16/04/13 ***

******* MTDAPI.H *************** Belenkov O.V.   ****** 11/09/16 ***

******* MTDAPI.H *************** Savelov A.S.    ****** 18/05/15 ***

******  MTDAPI.H ***************  Konon V.N.     ****** 30/06/16 ***

******* MTDAPI.h ***************  Kruzhkov A.E.  ****** 24/04/17 ***

*                                                                  *

*              Copyright (c) PANORAMA Group 1991-2017              *

*                      All Rights Reserved                         *

*                                                                  *

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

*                                                                  *

*          ОПИСАНИЕ ФУНКЦИЙ ДОСТУПА К МАТРИЦЕ ТОЧЕК (MTD)          *

*                                                                  *

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

*                                                                  *

*                 ИМПОРТИРОВАНИЕ ФУНКЦИЙ :                         *

*                                                                  *

*                                                                  *

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

*                                                                  *

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

*                                                                  *

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

*                                                                  *

*    HMAP (WINAPI * lpfn_OpenMap)(const char*, long int);          *

*    (FARPROC)lpfn_OpenMap = GetProcAddress(libInst, "OpenMap");   *

*    HMAP hMap = (*lpfn_OpenMap)("Noginsk.map",0);                 *

*                                                                  *

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

*                                                                  *

*    ::FreeLibrary(libInst);                                       *

*                                                                  *

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

 

#ifndef MTDAPI_H

#define MTDAPI_H

 

#ifndef MAPTYPE_H

  #include "maptype.h"   // Описание структур интерфейса MAPAPI

#endif

 

#ifndef MAPCREAT_H

  #include "mapcreat.h"

#endif

 

#ifndef MTLAPI_H

  #include "mtlapi.h"

#endif

 

#include "m3dgdi.h"

 

// Идентификатор объекта для запроса точек фрагмента MTD-модели

#define HMTD void * 

 

//  Параметры создаваемого MTD-файла

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

#define POINTSFORELEMENT 32  // Кол-во точек на элемент

#define BLOCKSIDE 32         // Сторона блока элементов

#define BLOCKMTDFACTOR 8     // Сторона блока точек = 4 элемента (BLOCKSIDE / BLOCKMTDFACTOR)

 

// Блок точек = (4 * 4) = 16 эл-тов ~= POINTSFORELEMENT * 16 ~= 32 * 16 ~= 512 точек

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

 

 

 // Точка MTD-модели

 

 typedef struct XYZC  // Размер структуры 32 байта

 {

   double    X;  // Координаты точки

   double    Y;

   double    Z;  // Высота точки

   int       C;  // Код точки

   int       Free;

 

   void operator = (XYZC p) { X = p.X;  Y = p.Y;  Z = p.Z; C = p.C; }

 }

   XYZC;

 

// Точка MTD-модели с данными из LAS-файла            27/08/09

 

 typedef struct XYZCLAS             // Размер структуры 80 байт

 {

   double    X;                     // Координаты точки

   double    Y;

   double    Z;                     // Высота точки

 

   int  C;                     // Код точки

   int  ReturnNumber;          // Номер возврата

 

   int  NumberOfReturns;       // Кол-во возвратов данного импульса

   int  ScanDirectionFlag;     // Флаг направления сканирования

 

   int  EdgeOfFlightLineFlag;  // Флаг "край линии полёта"

   int  Classification;        // Классификация

 

   int  ScanAngleRank;         // Ранг угла сканирования (от -90 до +90)

   int  FileMarker;            // Маркер файла - для объединения в единый файл LAS файлов

 

   int  Intensity;             // Интенсивность возврата

   int  UserBits;              // Поле битов пользователя

 

   int  Free1;                 // Резерв

   int  Free2;

 

   int  Free3;                 // Резерв

   int  Free4;

 

   void operator = (XYZCLAS p)

   {

     X = p.X;  Y = p.Y;  Z = p.Z; C = p.C;

     ReturnNumber = p.ReturnNumber;

     NumberOfReturns = p.NumberOfReturns;

     ScanDirectionFlag = p.ScanDirectionFlag;

     EdgeOfFlightLineFlag = p.EdgeOfFlightLineFlag;

     Classification = p.Classification;

     ScanAngleRank = p.ScanAngleRank;

     FileMarker = p.FileMarker;

     Intensity = p.Intensity;

     UserBits = p.UserBits;

   }

 }

   XYZCLAS;

 

 

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

// Структура точки (внутреннее представление в блоке файла)

// при загрузке MTD из TXT-файла (16 байт)

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

typedef struct

{

  unsigned      int X;  // Координаты точки           // 12/05/11  "unsigned"

  unsigned      int Y;

  unsigned      int H;

  unsigned      int C;  // Код точки

}

  MTDXYHC;

 

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

//  Битовые поля LAS-точки (4 байта)

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

typedef struct

{

     unsigned int ReturnNumber :3;           // The return number - номер возврата

     unsigned int NumberOfReturns :3;        // The number of returns for that shot - кол-во возвратов данного импульса

     unsigned int ScanDirectionFlag :1;      // The scan direction - флаг направления сканирования

     unsigned int EdgeOfFlightLineFlag :1;  // Edge of scan flag - флаг "край линии полёта"

     unsigned int Classification :8;        // Классификация

       signed int ScanAngleRank :8;         // Ранг угла сканирования (-90 to +90) - Left side

     unsigned int FileMarker :8;            // Маркер файла - для объединения в единый файл LAS файлов

}

  LASINFO;

 

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

// Структура точки (внутреннее представление в блоке файла)

// при загрузке MTD из LAS-файла (24 байта)

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

typedef struct

{

  unsigned int X;   // Координаты точки в системе MTD(миллиметры)  // 24/04/17

  unsigned int Y;

  unsigned int H;

  unsigned int C;   // Код точки

 

  LASINFO LasInfo;  // Битовые поля точки (4 байта)

 

  unsigned short int Intensity;  // Интенсивность возврата

  unsigned short int UserBits;   // Поле битов пользователя

}

  MTDXYHCLAS;

 

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

// Описание файла MTD-модели             11/04/17

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

typedef struct

{

  // Габариты MTD-модели в метрах

  DFRAME FrameMeters;

 

  // Минимальное значение Z-координат точек MTD-модели в метрах

  double Zmin;

 

  // Максимальное значение Z-координат точек MTD-модели в метрах

  double Zmax;

 

  // Плотность точек

  double Density;

 

  // Количество точек

  int PointCount;

 

  // Максимальное количество точек в блоке

  int MaxBlockPointCount;

 

  // Резерв

  char Free[64];

 

 

}

  MTDDESC;

 

#pragma pack(push,1)  // 11/04/17

 

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

//  Битовые поля точки (4 байта)

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

typedef struct LASPOINTINFO

{

  unsigned ReturnNumber    : 3;  // Номер отражения (возврата)

  unsigned NumberOfReturns : 3;  // Кол-во отражений (возвратов) данного импульса(до пяти)

  unsigned ScanDirection   : 1;  // The scan direction - флаг направления сканирования

  unsigned EdgeOfScan      : 1;  // Edge of scan flag - флаг "край линии полёта"

  unsigned Classification  : 8;  // Классификация

  signed   ScanAngle       : 8;  // Угол сканирования (-90 to +90)

  unsigned FileMarker      : 8;  // Маркер файла

}

  LASPOINTINFO;

 

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

//  Запись одной точки (20 байт)

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

typedef struct LASPOINT  // MtdPointFormat = 2

{

 // Координаты точки вычисляются по int-значениям из записи точки (X,Y,Z)

 // с использованием коэффициентов масштабирования из LASHEADER

 //   X_coordinate = ( X_record * X_scale ) + X_offset

 //   Y_coordinate = ( Y_record * Y_scale ) + Y_offset

 //   Z_coordinate = ( Z_record * Z_scale ) + Z_offset

 

 int X;  // 02/06/17  "int"

 int Y;

 int Z;

 

 unsigned short int Intensity;  // Интенсивность

 

 LASPOINTINFO Info;   // 4 байта - битовые поля точки     

 

 unsigned short int UserBits;  // Поле битов пользователя

}

  LASPOINT;

 

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

//  Запись одной точки (28 байт)

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

typedef struct LASPOINT_GPS  // MtdPointFormat = 3  11/04/17

{

 LASPOINT LasPoint;

 

 double GPS_Time;

}

  LASPOINT_GPS;

 

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

//  Запись одной точки (26 байт)

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

typedef struct LASPOINT_RGB  // MtdPointFormat = 4  11/04/17

{

 LASPOINT LasPoint;

 

 unsigned short int Red;

 unsigned short int Green;

 unsigned short int Blue;

}

  LASPOINT_RGB;

 

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

//  Запись одной точки (34 байта)

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

typedef struct LASPOINT_GPSRGB  // MtdPointFormat = 5  11/04/17

{

 LASPOINT LasPoint;

 

 double GPS_Time;

 

 unsigned short int Red;

 unsigned short int Green;

 unsigned short int Blue;

}

  LASPOINT_GPSRGB;

 

#pragma pack(pop)

 

extern "C"

{

 

  // Открыть матричные данные

  // Возвращает идентификатор открытой матричной карты (TMapAccess*)

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

 

  _MAPIMP HMAP _MAPAPI mapOpenMtd(const char * mtrname,

                          long int mode = 0);

  _MAPIMP HMAP _MAPAPI mapOpenMtdUn(const WCHAR *mtrname, long int mode = 0);  // 28/01/14

 

 

  // Открыть матричные данные в заданном районе работ

  // (добавить в цепочку матриц)

  // Возвращает номер файла в цепочке матриц

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

 

  _MAPIMP long int _MAPAPI mapOpenMtdForMap(HMAP hMap,

                                    const char * mtrname,

                                    long int mode);

  _MAPIMP long int _MAPAPI mapOpenMtdForMapUn(HMAP hMap, const WCHAR * mtrname, long int mode);  // 28/01/14

 

  // Создать матричную карту

  // Возвращает идентификатор открытой матричной карты (TMapAccess*)

  // Структурa BUILDMTL описанa в mtlapi.h

  // Структурa MTRPROJECTIONDATA описанa в maptype.h

  // maxPointCount - максимальное кол-во точек в блоке матрицы

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

 

  _MAPIMP HMAP _MAPAPI mapCreateMtd(const char * mtrname,

                            BUILDMTL * mtrparm,

                            long int maxPointCount,

                            MTRPROJECTIONDATA * mtrprojectiondata);

  _MAPIMP HMAP _MAPAPI mapCreateMtdUn(const WCHAR * mtrname,          // 28/01/14

 

  // Создать матричную карту

  // Возвращает идентификатор открытой матричной карты (TMapAccess*)

  // Структурa BUILDMTL описанa в mtlapi.h

  // blockpointcount - массив количеств точек в блоках матрицы

  // Структурa MTRPROJECTIONDATA описанa в maptype.h

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

 

  _MAPIMP HMAP _MAPAPI mapCreateMtdByBlockPointCount(const char * mtrname,

                                             BUILDMTL * mtrparm,

                                             int* blockpointcount,

// 18/05/15 Савелов

                                             MTRPROJECTIONDATA * mtrprojectiondata);

 

  _MAPIMP HMAP _MAPAPI mapCreateMtdByBlockPointCountUn(const WCHAR * mtrname,   // 28/01/14

                                             BUILDMTL * mtrparm,

                                             int* blockpointcount,              // 18/05/15 Савелов

                                             MTRPROJECTIONDATA * mtrprojectiondata);

 

  // Записать изменения матрицы в файл

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapSaveMtd(HMAP hMap, long int number);

 

  // Запросить признак редактируемости файла матрицы

  // number - номер файла в цепочке

 

  _MAPIMP long int _MAPAPI mapIsMtdEdit(HMAP hMap,long int number);

 

  // Закрыть матричные данные

  // number - номер закрываемой матрицы

  // если number == 0, закрываются все матрицы в окне

 

  _MAPIMP void _MAPAPI mapCloseMtd(HMAP hMap,long int number = 0);

 

  // Закрыть матричные данные в заданном районе работ

  // number - номер матричного файла в цепочке

  // Если number == 0, закрываются все матричные данные

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

 

  _MAPIMP long int _MAPAPI mapCloseMtdForMap(HMAP hMap,

                                     long int number);

 

  // Запросить число открытых файлов матричных данных

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

 

  _MAPIMP long int _MAPAPI mapGetMtdCount(HMAP hMap);

 

  // Установить в качестве текущей матрицу с номером в цепочке "number"

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

 

  _MAPIMP long int _MAPAPI mapActiveMtd(HMAP hMap, long int number);

 

  // Установить диапазон отображаемых элементов матрицы

  // number   - номер матрицы в цепочке

  // minvalue - минимальное значение отображаемого элемента

  //            в единицах матрицы

  // maxvalue - максимальное значение отображаемого элемента

  //            в единицах матрицы

  // При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapSetMtdShowRange(HMAP hMap,

                                      long int number,

                                      double minvalue,

                                      double maxvalue);

 

  // Установить плотность точек матрицы

  // number - номер матрицы в цепочке

  // density - значение плотности точек (кол-во точек на кв.метр)

  // При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapSetMtdDensity(HMAP hMap,

                                    long int number,

                                    double density);

 

  // Запросить плотность точек матрицы

  // number - номер матрицы в цепочке

  // Возвращает значение плотности точек (кол-во точек на кв.метр)

  // При ошибке возвращает ERRORHEIGHT

 

  _MAPIMP double _MAPAPI mapGetMtdDensity(HMAP hMap,    // 16/08/16

                                    long int number);

 

  // Вывод точки "dot" в матрицу

  // number - номер файла в цепочке

  // Структура XYZC описана в данном файле

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

 

  _MAPIMP long int _MAPAPI mapPutMtdDot(HMAP hMap, long int number, XYZC* dot);

 

  // Вывод точки "dot" в матрицу

  // number - номер файла в цепочке

  // Структура XYZCLAS (точка MTD-модели с данными из LAS-файла)

  // описана в данном файле

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

 

  _MAPIMP long int _MAPAPI mapPutMtdDotLas(HMAP hMap, long int number, XYZCLAS* dot);  // 27/08/09

 

  // Вывод записи точки в формате LAS в MTD-модель       // 11/04/17

  // number - номер файла в цепочке

  // pointRecord - адрес записи точки

  // lengthRecord - длина записи точки

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

 

  _MAPIMP long int _MAPAPI mapPutMtdLasPointRecord(HMAP hMap, long int number,

                                                   const char* pointRecord,

                                                   long int lengthRecord,

                                                   double x, double y);

 

  // Занесение значения абсолютной высоты в элемент матрицы,

  // соответствующий заданной точке.

  // number - номер матрицы в цепочке.

  // Координаты точки (x,y) и значение высоты (h) задаются в метрах

  // в системе координат векторной карты.

  // В случае ошибки возвращает ноль.

 

  _MAPIMP long int _MAPAPI mapPutMtdElementHeight(HMAP hMap,long int number,

                                          double x, double y, double h);

 

  // Занести код слоя в элемент матрицы, соответствующий заданной точке.

  // number - номер матрицы в цепочке.

  // Координаты точки (x,y) задаются в метрах в системе координат векторной карты.

  // code - код слоя

  // В случае ошибки возвращает 0.

 

  _MAPIMP long int _MAPAPI mapPutMtdElementCode(HMAP hMap, long int number,       // 10/06/08

                                        double x, double y, long int code);

 

  // Запросить код слоя из элемента матрицы, соответствующего заданной точке.

  // number - номер матрицы в цепочке.

  // Координаты точки (x,y) задаются в метрах в системе координат векторной карты.

  // Возвращает код слоя

  // В случае ошибки возвращает 0.

 

  _MAPIMP long int _MAPAPI mapGetMtdElementCode(HMAP hMap, long int number,

                                            double x, double y);

 

  // Занести цвет в элемент матрицы, соответствующий заданной точке.

  // number - номер матрицы в цепочке.

  // Координаты точки (x,y) задаются в метрах в системе координат векторной карты.

  // r,g,b - составляющие цвета

  // В случае ошибки возвращает 0.

 

  _MAPIMP long int _MAPAPI mapPutMtdElementColor(HMAP hMap, long int number,  // 14/04/17

                                        double x, double y,

                                        long int r, long int g, long int b);

 

 

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

  *                                                        *

  *           ЗАПРОС ДАННЫХ ИЗ МАТРИЦЫ ТОЧЕК               *

  *                                                        *

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

 

  // Запросить имя файла матричных данных

  // number - номер файла в цепочке

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

 

  _MAPIMP const char * _MAPAPI mapGetMtdName(HMAP hMap,long int number);

 

  // Запросить имя файла матричных данных

  // hMap - идентификатор открытой основной векторной карты

  // number - номер файла в цепочке

  // name - адрес строки для размещения результата

  // size - размер строки

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

 

  _MAPIMP long int _MAPAPI mapGetMtdNameUn(HMAP hMap,long int number,  // 28/01/14

                                           WCHAR *name, long int size);

 

  // Запросить номер матрицы в цепочке по имени файла 

  // name - имя файла матрицы

  // В цепочке номера матриц начинаются с 1

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

 

  _MAPIMP long int _MAPAPI mapGetMtdNumberByName(HMAP hMap, const char* name);

  _MAPIMP long int _MAPAPI mapGetMtdNumberByNameUn(HMAP hMap, const WCHAR * name);  // 28/01/14

 

  // Запросить длину файла матричных данных

  // number - номер файла в цепочке

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

 

  _MAPIMP double _MAPAPI mapGetMtdFileLength(HMAP hMap,long int number);

 

  // Запросить количество точек в матрице

  // number - номер файла в цепочке

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

 

  _MAPIMP unsigned long _MAPAPI mapGetMtdPointCount(HMAP hMap,long int number);

 

  // Запросить данные о проекции матрицы

  // hMap   - идентификатор открытой основной векторной карты

  // number - номер файла в цепочке

  // mapregister - адрес структуры, в которой будут размещены

  // данные о проекции

  // Структурa MAPREGISTEREX описанa в mapcreat.h

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

 

  _MAPIMP long int _MAPAPI mapGetMtdProjectionData(HMAP hMap, long int number,

                                           MAPREGISTEREX* mapregister);

 

  // Запросить данные о проекции матрицы

  // hMap   - идентификатор открытой основной векторной карты

  // number - номер файла в цепочке

  // mapregister, datumparam, ellipsoidparam - адреса структур, в которых будут размещены

  // Структуры MAPREGISTEREX, DATUMPARAM, ELLIPSOIDPARAM описаны в mapcreat.h

  // ttype  - тип локального преобразования координат (см. TRANSFORMTYPE в mapcreat.h) или 0

  // tparm - параметры локального преобразования координат (см. mapcreat.h)

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

 

  _MAPIMP long int _MAPAPI mapGetMtdProjectionDataPro(HMAP hMap, long int number,   // 11/09/16

                                                      MAPREGISTEREX  *mapregister,

                                                      DATUMPARAM     *datumparam,

                                                      ELLIPSOIDPARAM *ellipsoidparam,

                                                      long int * ttype,

                                                      LOCALTRANSFORM * tparm);

 

  _MAPIMP long int _MAPAPI mapGetMtdProjectionDataEx(HMAP hMap, long int number,

                                                   MAPREGISTEREX  *mapregister,

                                                   DATUMPARAM     *datumparam,

                                                   ELLIPSOIDPARAM *ellipsoidparam);

 

  // Установить данные о проекции матрицы

  // number - номер файла в цепочке

  // mapregister - адрес структуры, содержащей данные о проекции

  // Структурa MAPREGISTEREX описанa в mapcreat.h

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

 

  _MAPIMP long int _MAPAPI mapSetMtdProjectionData(HMAP hMap,long int number,

                                           MAPREGISTEREX* mapregister);

 

  // Установить данные о проекции матрицы

  // hMap   - идентификатор открытой основной векторной карты

  // number - номер матрицы в цепочке.

  // mapregister, datumparam, ellipsoidparam - адреса структур, содержащих данные о проекции

  // Структуры MAPREGISTEREX, DATUMPARAM, ELLIPSOIDPARAM описаны в mapcreat.h

  // ttype  - тип локального преобразования координат (см. TRANSFORMTYPE в mapcreat.h) или 0

  // tparm - параметры локального преобразования координат (см. mapcreat.h)

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

 

_MAPIMP long int _MAPAPI mapSetMtdProjectionDataPro(HMAP hMap, long int number,       // 11/09/16

                                                    MAPREGISTEREX  *mapregister,

                                                    DATUMPARAM     *datumparam,

                                                    ELLIPSOIDPARAM *ellipsoidparam,

                                                    long int ttype,

                                                    LOCALTRANSFORM * tparm);

 

_MAPIMP long int _MAPAPI mapSetMtdProjectionDataEx(HMAP hMap, long int number,

                                                   MAPREGISTEREX  *mapregister,

                                                   DATUMPARAM     *datumparam,

                                                   ELLIPSOIDPARAM *ellipsoidparam);

                                         

  // Запросить описание файла матричных данных

  // number - номер файла в цепочке

  // describe - адрес структуры, в которой будет размещено

  // описание матрицы

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

 

  _MAPIMP long int _MAPAPI mapGetMtdDescribe(HMAP hMap,long int number,

                                     MTLDESCRIBE * describe);

  _MAPIMP long int _MAPAPI mapGetMtdDescribeUn(HMAP hMap,long int number,  // 03/04/14

                                     MTLDESCRIBEUN * describe);

  // Запросить описание файла MTD-модели

  // number - номер файла в цепочке

  // desc - адрес структуры, в которой будет размещено

  // описание MTD-модели

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

 

  _MAPIMP long int _MAPAPI mapGetMtdDesc(HMAP hMap,long int number,  // 11/04/17

                                         MTDDESC * desc);

 

  // Запросить число строк блоков матрицы

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdBlockRow(HMAP hMap,long int number);

 

  // Запросить число столбцов блоков матрицы

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdBlockColumn(HMAP hMap,long int number);

 

  // Запросить размер блока матрицы

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdBlockSize(HMAP hMap,long int number);

 

  // Запросить вертикальный размер блока матрицы в элементах

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdBlockSide(HMAP hMap,long int number);

 

  // Запросить блок матрицы по номеру строки и столбца

  // Отсчет строк и столбцов с верхнего левого блока

  // Блоки последнего ряда могут иметь усеченный размер

  // number - номер файла в цепочке

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

 

  _MAPIMP char * _MAPAPI mapGetMtdBlockAddress(HMAP hMap,long int number,

                                       long int row,

                                       long int column);

 

  // Запросить число строк элементов в матрице

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdElementRow(HMAP hMap,long int number);

 

  // Запросить число столбцов элементов в матрице

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdElementColumn(HMAP hMap,long int number);

 

  // Запросить масштаб матрицы

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdScale(HMAP hMap,long int number);

 

  // Установить масштаб матрицы

  // number - номер файла в цепочке

  // scale  - знаменатель масштаба

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

 

  _MAPIMP long int _MAPAPI mapSetMtdScale(HMAP hMap,long int number,double scale);

 

  // Выбор значения абсолютной высоты в заданной точке.

  // Координаты точки (x,y) задаются в метрах в системе координат

  // векторной карты. Возвращает значение высоты в метрах.

  // В случае ошибки при выборе высоты и в случае необеспеченности

  // заданной точки матричными данными возвращает ERRORHEIGHT.

 

  _MAPIMP double _MAPAPI mapGetMtdElementHeight(HMAP hMap,double x,double y);

 

  // Вычисление значения абсолютной высоты в заданной точке

  // с использованием всех MTD-моделей цепочки.

  // Координаты точки (x,y) задаются в метрах в системе координат

  // векторной карты. Возвращает значение высоты в метрах.

  // В случае ошибки при выборе высоты и в случае необеспеченности

  // заданной точки матричными данными возвращает ERRORHEIGHT.

 

  _MAPIMP double _MAPAPI mapGetMtdHeight(HMAP hMap,double x,double y);  // 26/02/14

 

  // Выбор значения абсолютной высоты в заданной точке из матрицы

  // с номером number в цепочке.

  // number - номер матрицы в цепочке.

  // Координаты точки (x,y) задаются в метрах в системе координат

  // векторной карты. Возвращает значение высоты в метрах.

  // В случае ошибки при выборе высоты и в случае необеспеченности

  // заданной точки матричными данными возвращает ERRORHEIGHT.

 

  _MAPIMP double _MAPAPI mapGetElementHeightOfMtd(HMAP hMap,long int number,double x,double y);

 

  // Запросить значения масштаба нижней и верхней границ видимости матрицы

  // number - номер файла в цепочке

  // По адресу bottomScale записывается знаменатель масштаба нижней границы видимости матрицы

  // По адресу topScale записывается знаменатель масштаба верхней границы видимости матрицы

  // При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapGetMtdRangeScaleVisible(HMAP hMap, long int number, long int *bottomScale, long int *topScale);

 

  // Установить значения масштаба нижней и верхней границ видимости матрицы

  // number     - номер файла в цепочке

  // bottomScale   - знаменатель масштаба нижней границы видимости матрицы

  // topScale   - знаменатель масштаба верхней границы видимости матрицы

  //              bottomScale <= topScale, иначе возвращает 0

  // При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapSetMtdRangeScaleVisible(HMAP hMap, long int number, long int bottomScale, long int topScale);

 

  // Установка значения цвета слоя layernumber.

  // number - номер матрицы в цепочке

  // В случае ошибки возвращает ноль.

 

  _MAPIMP long int _MAPAPI mapSetMtdLayerColor(HMAP hMap,long int number,

                                       long int layernumber,

                                       COLORREF layercolor);

 

  // Установка значения цвета кода точек codenumber.

  // number - номер матрицы в цепочке

  // В случае ошибки возвращает ноль.

 

  _MAPIMP long int _MAPAPI mapSetMtdCodeColor(HMAP hMap,long int number,

                                      long int codenumber,

                                      COLORREF codecolor);

 

  // Установка количества точек кода codenumber.

  // number - номер матрицы в цепочке

  // В случае ошибки возвращает ноль.

 

  _MAPIMP long int _MAPAPI mapSetMtdCodePointCount(HMAP hMap,long int number,

                                           long int codenumber,

                                           long int pointcount);

 

  // Установка значения флага кода точек codenumber.

  // number - номер матрицы в цепочке

  // В случае ошибки возвращает ноль.

 

  _MAPIMP long int _MAPAPI mapSetMtdCodeFlag(HMAP hMap,long int number,

                                     long int codenumber,

                                     long int codeflag);

 

  // Установка имени codename кода точек codenumber.

  // number - номер матрицы в цепочке

  // В случае ошибки возвращает ноль.

 

  _MAPIMP char* _MAPAPI mapSetMtdCodeName(HMAP hMap,long int number,

                                     long int codenumber,

                                     char* codename);

 

 // Запросить формат точки MTD-модели (внутреннее представление в блоке файла)

  // number - номер файла в цепочке

  // Возвращаемые значения:  0 - структура точки MTDXYHC (16 байт)

  //                         1 - структура точки MTDXYHCLAS (24 байта)

  //                         2 - структура точки LASPOINT (20 байт)

  //                         3 - структура точки LASPOINT_GPS (28 байт)

  //                         4 - структура точки LASPOINT_RGB (26 байт)

  //                         5 - структура точки LASPOINT_GPSRGB (34 байта)

  // Структуры MTDXYHC, MTDXYHCLAS, LASPOINT описаны в данном файле

  // При ошибке возвращает -1

 

  _MAPIMP long int _MAPAPI mapGetMtdPointFormat(HMAP hMap, long int number);  // 02/04/13

 

  // Запросить число строк блоков точек MTD-модели

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdPointBlockRow(HMAP hMap, long int number);  // 02/04/13

 

  // Запросить число столбцов блоков точек MTD-модели

  // number - номер файла в цепочке

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

 

  _MAPIMP long int _MAPAPI mapGetMtdPointBlockColumn(HMAP hMap, long int number);  // 02/04/13

 

  // Запросить из MTD-модели блок точек формата MTDXYHC по номеру строки и столбца блока

  // Отсчет строк и столбцов с верхнего левого блока

  // number - номер файла в цепочке

  // Возвращает адрес массива структур точек MTDXYHC

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

 

  _MAPIMP MTDXYHC * _MAPAPI mapGetMtdPointBlockAddress(HMAP hMap, long int number,  // 02/04/13

                                               long int row,

                                               long int column);

 

  // Запросить из MTD-модели блок точек формата MTDXYHCLAS по номеру строки и столбца блока

  // Отсчет строк и столбцов с верхнего левого блока

  // number - номер файла в цепочке

  // Возвращает адрес массива структур точек MTDXYHCLAS

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

 

  _MAPIMP MTDXYHCLAS * _MAPAPI mapGetMtdPointBlockLasAddress(HMAP hMap, long int number,  // 02/04/13

                                                     long int row,

                                                     long int column);

 

  // Создать объект фрагмента MTD-модели

  // hMap - идентификатор открытого документа

  // number - номер файла MTD-модели в цепочке

  // frame - адрес структуры, содержащей координаты прямоугольного

  //         фрагмента MTD-модели в метрах

  // center3Dmap - координаты центра 3D-модели

  // Возвращает идентификатор объекта фрагмента MTD-модели

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

 

  _MAPIMP HMTD _MAPAPI mtdCreateFrame(HMAP hMap, long int number,  // 11/04/17

                                      DFRAME * frame, XYHDOUBLE * center3Dmap);

 

  // Освободить объект фрагмента MTD-модели

  //   hmtd - идентификатор объекта фрагмента MTD-модели

 

  _MAPIMP void _MAPAPI mtdFreeFrame(HMTD hmtd);                    // 11/04/17

 

  // Запросить количество точек фрагмента MTD-модели

  //   hmtd - идентификатор объекта фрагмента MTD-модели

  // Возвращает число точек фрагмента

 

  _MAPIMP long int _MAPAPI mtdGetFramePointCount(HMTD hmtd);       // 11/04/17

 

  // Установить шаг запроса (разрежения) точек фрагмента

  //   hmtd - идентификатор объекта фрагмента MTD-модели

  //   pointRequestStep - шаг увеличения индекса запрашиваемой точки

  //                      в пределах фрагмента, значение должно быть больше или равно 1,

  //                      используется в mtdGetNextFramePart, mtdGetNextFrameBlock

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

 

  _MAPIMP long int _MAPAPI mtdSetPointRequestStep(HMTD hmtd,       // 26/05/17

                                                  long int pointRequestStep);

 

  // Установить шаг пропуска при запросе точек фрагмента

  //   hmtd - идентификатор объекта фрагмента MTD-модели

  //   pointSkipStep - значение должно быть больше 1, при запросе пропускаются

  //   точки, индексы которых кратны pointSkipStep,

  //   используется в mtdGetNextFramePart, mtdGetNextFrameBlock

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

 

  _MAPIMP long int _MAPAPI mtdSetPointSkipStep(HMTD hmtd,          // 09/06/17

                                               long int pointSkipStep);

 

  // Запросить очередную часть массива точек фрагмента MTD-модели

  // (вызывать после mtdCreateFrame в цикле до тех пор, пока не вернет 0)

  //   hmtd - идентификатор объекта фрагмента MTD-модели

  //   pointArray - массив точек части фрагмента

  //   colorArray - массив цветов точек части фрагмента

  //   pointCount - максимальное количество точек, которое можно

  //                записать в массивы pointArray, colorArray

  //                (pointCount должно быть не менее MTDDESC.MaxBlockPointCount)

  // Возвращает количество точек, записанных в pointArray, colorArray

 

  _MAPIMP long int _MAPAPI mtdGetNextFramePart(HMTD hmtd,          // 11/04/17

                                               IMG3DPOINT * pointArray,

                                               IMG3DRGBA * colorArray,

                                               long int pointCount);

 

  // Запросить массив точек очередного блока в пределах фрагмента MTD-модели

  // (вызывать после mtdCreateFrame в цикле до тех пор, пока не вернет -1)

  //   hmtd - идентификатор объекта фрагмента MTD-модели

  //   pointArray - массив точек части фрагмента

  //   colorArray - массив цветов точек части фрагмента

  //   pointCount - максимальное количество точек, которое можно

  //                записать в массивы pointArray, colorArray

  //                (pointCount должно быть не менее MTDDESC.MaxBlockPointCount)

  // Возвращает количество точек, записанных в pointArray, colorArray

 

  _MAPIMP long int _MAPAPI mtdGetNextFrameBlock(HMTD hmtd,         // 05/05/17

                                                IMG3DPOINT * pointArray,

                                                IMG3DRGBA * colorArray,

                                                long int pointCount);

 

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

  *                                                        *

  *        УПРАВЛЕНИЕ ОТОБРАЖЕНИЕМ МАТРИЦЫ ТОЧЕК           *

  *                                                        *

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

 

  // Запросить/Установить степень видимости матрицы

  //  number - номер файла в цепочке

  //  view = 0 - не виден

  //  view = 1 - полная

  //  view = 2 - насыщенная

  //  view = 3 - полупрозрачная

  //  view = 4 - средняя

  //  view = 5 - прозрачная

  // При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapGetMtdView(HMAP hMap,long int number);

  _MAPIMP long int _MAPAPI mapSetMtdView(HMAP hMap,long int number,

                                           long int view);

 

  // Запросить/Установить порядок отображения матрицы

  //  (0 - под картой, 1 - над картой)

  // При ошибке возвращает 0

  

  _MAPIMP long int _MAPAPI mapGetMtdViewOrder(HMAP hMap, long int number);

  _MAPIMP  long int _MAPAPI mapSetMtdViewOrder(HMAP hMap, long int number,long int order);

 

  // Определение способа отображения матрицы(относительно рамки)

  // Возвращает 1 - при отображении матрицы по рамке

  //            0 - при отображении матрицы без учета рамки

  // При ошибке возвращает -1

 

  _MAPIMP long int _MAPAPI mapCheckShowMtdByBorder(HMAP hMap,long int number);

 

  // Поменять очередность отображения матриц в цепочке

  //   oldNumber - номер файла в цепочке

  //   newNumber - устанавливаемый номер файла в цепочке

  //  При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapChangeOrderMtdShow(HMAP hMap, long int oldNumber,

                                        long int newNumber);

 

  // Запросить габариты модели в районе (метры)                                     

  //  При ошибке возвращает 0

 

  _MAPIMP long int _MAPAPI mapGetMtdFrame(HMAP hMap, long int number, DFRAME * dframe); 

 

  // Запрос минимального и максимального значения высоты поверхности (метры)

  //  При ошибке возвращает 0

   

  _MAPIMP long int _MAPAPI mapGetMtdHeightValue(HMAP hMap, long int number,

                                                double * minvalue, double * maxvalue);                                       

 

}

 

#endif // MTDAPI_H

 

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