[QUOTE]LMM написал:
На каких функциях MAPAPI это можно реализовать?[/QUOTE]
1. Создаётся библиотека dll 32 разряда c двумя экспортными функциями[CODE]exports
GetInterfaceVersion name 'GetInterfaceVersion',
CallMapFunction name 'CallMapFunction';
где
function GetInterfaceVersion: longint; stdcall;
function CallMapFunction(map: HMAP; parm: PTASKPARM):longint; stdcall;[/CODE]2. внутри функции CallMapFunction выполняются все операции из сообщения, включая создания форм(ы), установка флажков, и нажатие на кнопку "Выполнить на созданной форме
3. При нажатии кнокпи "Выполнить" (фильтровать и.т.п) выполняется
- загрузить очередной SXF; [CODE] // Загрузить карту из файла SXF
// При ошибке возвращает ноль
_VECIMP long int _VECAPI LoadSxfToMap(char * namesxf, char * namemap, char * namersc, HMESSAGE handle);[/CODE]- выделить все линейные и площадные объекты; [CODE]HSELECT select= mapCreateSiteSelectContext(hMap, hMap); // создание контекста выбора
mapSelectLocal(select, OL_SQUARE | OL_LINE)
select- содержит выделенные объекты карты которые можно
// Выделить на карте объекты, удовлетворющие заданным условим
// hmap - идентификатор открытых данных
// hwnd - идентификатор окна вывода
// point - координаты верхнего левого угла окна на карте
// в соответсвующей параметру place системе координат
// select - условия отбора объектов,
// color - цвет, которым будут выделяться объекты на карте
_MAPIMP void _MAPAPI mapViewSelect(HMAP hmap, HWND hwnd, DOUBLEPOINT *point,
HSELECT select, COLORREF color,
long int place);
mapDeleteSelectContext(select); // очистка контекста выбора
[/CODE]
- запустить саму задачу фильтрации; [CODE] // Фильтрация всех объектов одного листа карты с учетом
// топологических связей с соседними объектами того же листа
// той же карты (фильтруются и соседние объекты, имеющие общие точки;
// концевые общие точки не фильтруются)
// hMap - идентификатор открытых данных
// hSite - идентификатор обрабатываемой карты
// list - номер листа
// precision - точность в метрах на местности
// (минимальное расстояние от точки до прямой,
// соединяющей предыдущую и следующую точки)
// hwnd - идентификатор окна,которое будет извещаться
// (для отмены сообщений установить идентификатор в ноль)
// Процесс посылает сообщение 0x590:
// wparm : процент обработки,
// lparm : количество обработанных объектов.
// общее количество = mapGetObjectCount(hMap, list) - для основной карты
// общее количество = mapGetSiteObjectCount(hMap, hSit) - для пользовательской
// Для завершения процесса вернуть число 0x590
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapGeneralFilterInMap(HMAP hMap, HSITE hSite,
long int list,
double precision/* = DELTANULL*/,
HWND hwnd);[/CODE]- дождаться её завершения (желательно выдать количества точек до и после например в файл);
Процесс посылает сообщение 0x590 в котором можно посчитать количество и тип обработанных объектов
- перейти на следующий SXF...
операторы цикла for do next
На каких функциях MAPAPI это можно реализовать?[/QUOTE]
1. Создаётся библиотека dll 32 разряда c двумя экспортными функциями[CODE]exports
GetInterfaceVersion name 'GetInterfaceVersion',
CallMapFunction name 'CallMapFunction';
где
function GetInterfaceVersion: longint; stdcall;
function CallMapFunction(map: HMAP; parm: PTASKPARM):longint; stdcall;[/CODE]2. внутри функции CallMapFunction выполняются все операции из сообщения, включая создания форм(ы), установка флажков, и нажатие на кнопку "Выполнить на созданной форме
3. При нажатии кнокпи "Выполнить" (фильтровать и.т.п) выполняется
- загрузить очередной SXF; [CODE] // Загрузить карту из файла SXF
// При ошибке возвращает ноль
_VECIMP long int _VECAPI LoadSxfToMap(char * namesxf, char * namemap, char * namersc, HMESSAGE handle);[/CODE]- выделить все линейные и площадные объекты; [CODE]HSELECT select= mapCreateSiteSelectContext(hMap, hMap); // создание контекста выбора
mapSelectLocal(select, OL_SQUARE | OL_LINE)
select- содержит выделенные объекты карты которые можно
// Выделить на карте объекты, удовлетворющие заданным условим
// hmap - идентификатор открытых данных
// hwnd - идентификатор окна вывода
// point - координаты верхнего левого угла окна на карте
// в соответсвующей параметру place системе координат
// select - условия отбора объектов,
// color - цвет, которым будут выделяться объекты на карте
_MAPIMP void _MAPAPI mapViewSelect(HMAP hmap, HWND hwnd, DOUBLEPOINT *point,
HSELECT select, COLORREF color,
long int place);
mapDeleteSelectContext(select); // очистка контекста выбора
[/CODE]
- запустить саму задачу фильтрации; [CODE] // Фильтрация всех объектов одного листа карты с учетом
// топологических связей с соседними объектами того же листа
// той же карты (фильтруются и соседние объекты, имеющие общие точки;
// концевые общие точки не фильтруются)
// hMap - идентификатор открытых данных
// hSite - идентификатор обрабатываемой карты
// list - номер листа
// precision - точность в метрах на местности
// (минимальное расстояние от точки до прямой,
// соединяющей предыдущую и следующую точки)
// hwnd - идентификатор окна,которое будет извещаться
// (для отмены сообщений установить идентификатор в ноль)
// Процесс посылает сообщение 0x590:
// wparm : процент обработки,
// lparm : количество обработанных объектов.
// общее количество = mapGetObjectCount(hMap, list) - для основной карты
// общее количество = mapGetSiteObjectCount(hMap, hSit) - для пользовательской
// Для завершения процесса вернуть число 0x590
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapGeneralFilterInMap(HMAP hMap, HSITE hSite,
long int list,
double precision/* = DELTANULL*/,
HWND hwnd);[/CODE]- дождаться её завершения (желательно выдать количества точек до и после например в файл);
Процесс посылает сообщение 0x590 в котором можно посчитать количество и тип обработанных объектов
- перейти на следующий SXF...
операторы цикла for do next