/2gisoffline

Библиотека обертка для написания плагинов для 2gis

Primary LanguagePascal

#Установка

Файлы исходных кодов по версиям в разделе "Файлы"

  • Получаем исходный код из репозитория (git clone https://github.com/rodnover55/2gisoffline.git);

  • Запускаем консоль (cmd);

  • Переходим в папку с библиотекой (cd path\to\2gis);

  • Создаем папку dcus (или если есть специальная папка для dcu указываем её после в команде);

  • Выполняем команду:

    for /F %i in ('dir /S /B *.pas') do dcc32 -N0.\dcus -U.\dcus -U.\Primitives -U.\Callouts -U.\Callouts\MapControllerCustomizer -U.\Include -U.\Queries -U.\Tools -U.\Controls -U.\Layers %i
    

где меняем значение -N0.\dcu на значение папки из предыдущего пункта;

Замечание: Библиотеку необходимо сохранять так, чтобы в пути не было пробелов, иначе она не откомпилируется.

  • Скопировать Resources.RES в папку .\dcu;
  • Прописываем путь к папке в Search path в Delphi

Начало работы с библиотекой

  • Создаем новый проект dll (лучше сразу создавать ActiveX Library)

  • Добавляем в исходник функцию CreateGrymPlugin. Указываем в ней контроллер, который вызовется после инициализации библиотеки

    function CreateGrymPlugin(var pPlugin: IUnknown): HRESULT; stdcall; export;
    var
      Plugin: TGrymPlugin;
    begin
      if Assigned(@pPlugin) then
      begin
        Plugin := TGrymPlugin.Create('company', 'plugin_name', 'Имя плагина', ['ru'])
          .SetRunController(TRunController.Create);
        pPlugin := Plugin;
    
        Result  := S_OK;
     end
     else
     begin
       Result := E_NOTIMPL;
     end;
    end;
    
    exports
      CreateGrymPlugin;
    
  • В контроллере инициализации уже прописываем все необходимые для загрузки плагина строки.

Хитрости при работе с 2GIS

  • При создании dll проекта на Delphi формы автоматически не создаются, поэтому можно видоизменить код созданной формы под свои нужды

    type
      TForm1 = class(TForm)
      end;
    
    function Form1: TForm; // Вместо var  Form1: TForm;
    
    implementation
    
    {$R *.dfm}
    
    
    var
      _Form1: TForm; // А саму переменную прописываем в закрытой части
    
    function Form1: TForm; // Вместо переменной наружу смотрит функция, которая при необходимости создает форму и возвращает её.
    begin
      if not Assigned(_Form1) then
      begin
        Application.CreateForm(TForm, _Form1);
      end;
    
      Result := _Form1;
    end;
    
    

Минус такого варианта, что при загрузке некоторых городов форма на все города будет единственная и, если для вызова формы используется метод Show, поведение такой формы будет не предсказуемое. Для устранения этой ошибки можно использовать класс TGrymKeeper и изменённую функцию возвращения формы.

Что нового

Изменения

03.04.2013

  • TMapInfoLayer Добавлено свойство возвращающее список ID объектов слоя;
  • TGrymMapBuildingsTable вынесен в отдельный класс;
  • TGrymMapBuildingsTable добавлен метод GetFeatureByID, возвращающие TFeature по ID;
  • Переопределен виртуальный метод TBaseGrymTable.SetRecNo;
  • Реализована оболочка для инструмента "Радиус" TGrymToolRadius;
  • TGrymPlugin добавлена перегруженная версия конструктора, в котором можно указывать организацию;
  • TGrymPlugin реализован метод GetID, который возвращает ID состоящий из названия организции, названия плагина, группы и короткого ID элемента;
  • TMapTools реализованы методы получения инструмента радиуса, поиска инструмента и проверки текущего инструмента (GetRadiusTool, IsCurrentTool, FindTool).

26.02.2013

  • Добавлен define BUGGED, который заставялет вылетать библиотеку в 80 случаях из 50000 при перерисовке слоя;
  • Исправлено добавление повторяющихся ID в MapInfoLayer;
  • Добавлены методы GetType, GetValuem IsMapBuilding в TFeature;
  • Добавлено поле Levels в TGrymMapBuilding;
  • Добавлен конструктор в TGrymMapBuilding из TFeature;
  • Добавлен метод получения даты выпуска оболочки 2GIS TGrym.GetIssueDate;
  • Добавлен класс TGrym, обертка над IGrym;
  • Изменен TInterfaceWrapper. Теперь это наследник TInterfacedObject, поэтому его не надо удялять через Free. Возможны ошибки в программах написанных с предыдущей версией библиотеки;
  • Добавлен метод TMap.CreateInfoCard.

20 февраля 2013

  • Добавлено установка иконки для вкладки в выноске объекта;
  • Добавлено свойство отображения текста под изображением в кнопке;
  • Изменен метод CopyTo в TMapInfoController (появилась возможность очищения списка, в который будут экспортироваться данные);
  • Изменен конструктор создания символа полигона;
  • При поиске дома, если город не указан, подставляется город выбранной базы;
  • Добавлен метод TLayers.GetMapInfoLayer, который возвращает информационный слой.

06 февраля 2013

  • Добавлен символ полигона;
  • Методы отрисовки символов линии и маркера вынесены в базовый класс TSymbol;
  • Добавлен метод запроса пространственного поиска по региону в слое;
  • Добавлен метод создания региона IShapeFill в TGrymObjectFactory;
  • Добавлен метод получения пути dll-плагина;
  • Исправлена ошибка проверки инициализации плагина;
  • Добавлен метод возвращающий слой зданий в TLayers.

30 января 2013

  • Добавлена обертка для TDataSet, позволяющая сохранять запись из TDataSet в произвольный объект;
  • Добавлена обертка для StoredProc позволяющая перед вызовом процедуры записывать параметры из полей объекта, и сохранять в нем результат процедуры;
  • Добавлен метод в TLayer, позволяющий получить символ по точке;
  • Добавлен метод в TDevRect, проверяющий принадлежит ли точка области;
  • Добавлен шаблон контроллера, активирующий указанный инструмент;
  • Добавлен шаблон UBaseKeeper синглтона для каждого города 2GIS, загружающий только одну копию объекта для каждого города;
  • Добавлен шаблон контроллера, отображающий состояние инструмента (включен/выключен) на кнопке;
  • Добавлен метод получения каталога справочников;
  • Реализован класс, описывающий отображение произвольного ActiveX окна в справочниках;
  • Добавлены методы, добавления/удаления/активации справочников в системе.
  • Добавлено свойство содержащее имя плагина в TGrymPlugin;
  • Добавлена функция, закрывающая выноску по тегу;
  • Исправлено задание текста выноски в функции ShowCallout.

22 января 2013

  • Разделено отображение в выносках;
  • Добавлена регистрация MapInfoControllers в класс;
  • Добавлена проверка отображения и отображение выноски на фиче;
  • Добавлен контроллер, выполняющийся при смене видимости слоя;
  • Добавлена регистрация Layer в класс;
  • Добавлено получение выделенных объектов на карте.

23 декабря 2012

  • Отображение иконки для контролов;
  • Получение идентификатора (тега) контролов;
  • В начале заголовка контролов удален пробел;
  • Добавлено изменение стилей для кнопки;
  • Реализован контрол поле ввода;
  • Добавлены значения масштабов для карты (пока в TLayers, лучше перенести в TMap;
  • Процедуры скрытия/отображения слоя;
  • Указание максимального масштаба для отображения объекта слоя;
  • Информационный слой теперь хранит в себе ID всех объектов, для которых добавлены филлеры;
  • Реализовано копирования информационного слоя в другой слой;
  • Добавлены методы добавления/удаления информационных слоев в легенду;
  • Добавлена возможность получения видимости информационного слоя;
  • Реализовано получение границ символов;
  • В слоях символов реализована фильтрация видимых объектов;
  • Добавлен метод определения пересечения двух областей TMapRect;
  • Добавлено получение ID объекта Feature;
  • Добавлен метод получения Feature при поиске дома;
  • Добавлен тип строения;
  • Добавлено получение даты выпуска 2GIS;
  • Добавлено создание растра из потока и из графического объекта;
  • Добавлено ограничение запуска плагина в городах.

19 октября 2012

  • Библиотека полностью вынесена в отдельную сущность;
  • Добалены Callout: кастомизация, отображение;
  • Добавлена возможность получения табов в риббон баре;
  • Добавлена возможность получения объектов карты через TDataSet;
  • Добавлена возможность отрисовки графических объектов;
  • Реализованы некоторые примитивы (TMapPoint, TDevPoint, TDevRect, TMapRect), которые можно передавать в 2GIS непосредственно как интерфейсы;
  • Ресурсы изображений вынесены в библиотеку;
  • Добавлены типы описывающие базовые типы координат;
  • Опеределен враппер для IFeature (Реализован только метод CenterPoint);
  • Возможно получение данных из таблиц Строения, Районы, Микрорайоны;
  • Добавлена возможность запуска оболочки из внешнего приложения;
  • Исправлено несколько досадных ошибок.

18 октября 2012

  • Изменения в классе TMapPoint. Теперь он непосредственно является наследником IMapPoint.

    MapPoint: TMapPoint;
    pMapPoint: IMapPoint;
    
    pMapPoint := MapPoint.GetInterface; // Теперь не работает. Необходимо заменить на
    pMapPoint := MapPoint;
    
  • Изменения в классе TDevPoint. Теперь он непосредственно является наследником IDevPoint.

    DevPoint: TDevPoint;
    pDevPoint: IDevPoint;
    
    pDevPoint := DevPoint.GetInterface; // Теперь не работает. Необходимо заменить на
    pDevPoint := DevPoint;