На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Exception при вызове mapPaintExampleSiteObject()

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
Exception при вызове mapPaintExampleSiteObject()
 
Для некоторых классификаторов вызов функции mapPaintExampleSiteObject() или mapPaintExampleRscObject() иногда приводит к Exception в недрах DLL.

Это происходит если область (TRect) передана небольшая, и всегда при отрисовке точечного знака (код P0000XXXXX).
Для каких-то классификаторов (знаков) ошибка возникает при высоте области меньше 33 пикселей, для каких-то меньше 40 пикселей.
Видимо, дело в размере точечного знака.

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

Пример такого классификатора в архиве приложил (Plan10000.rsc). Ошибка проявляется при запросе отрисовке изображения 32x32 пикселя (и меньше).

Ошибка проявляется и в последних версиях тулкита v.13.3.2.1 и в предыдущих (в 13.0 уже точно была).
Скорее всего версия Delphi значения не имеет, но для полноты картины: Delphi 10.4, платформа Win32.
Изменено: Илья Вдовин - 02.05.2021 18:35:47
 
Спасибо за подробное описание ошибки. Будем разбираться.
 
Цитата
Илья Вдовин написал:
Для некоторых классификаторов вызов функции mapPaintExampleSiteObject() или mapPaintExampleRscObject() иногда приводит к Exception в недрах DLL.
Уточните, пожалуйста, происходит Exception на карте или при работе с классификатором.
Просьба прислать код объекта. Проверили на тестовых данных не повторяется проблема с зависанием.
По возможности пришлите, пожалуйста, карту с указанием знака.
 
Дополнительно прошу уточнить какой тип визуализации используется: VT_SCREEN, VT_PRINT ?

см. mapapi.h
_MAPIMP long int _MAPAPI mapGetViewType(HMAP hmap);
_MAPIMP long int _MAPAPI mapSetViewType(HMAP hmap, long int type);
Изменено: Александр Кружков - 11.05.2021 12:45:13
 
Exception происходит при вызове двух указанных функций. Считается ли это работой с картой или классификатором не очень понимаю как ответить. С самой картой я ничего не делаю в этот момент.

Приложил простой тестовый пример, который работает с одной из областных картой (OpenStreet), загруженных ранее с вашего сайта. Классификатор osm.rsc.
Для этого классификатора Exception возникает для знаков с ObjectKey = "P0051671200" и "monument" при ViewType = VT_SCREEN. Для VT_PRINT, вроде, не возникает.
Карта сама большая, если хотите проверить именно на той карте, которая у меня, то можно скачать её по ссылке: https://disk.yandex.ru/d/kIzV9xwqRdaUFw (но это карта без каких-то моих изменений).
Пример карты с классификатором Plan10000.rsc прямо сейчас делать не очень удобно, но позже могу и его подготовить, там Exception происходит на десятках знаков.

Проблемы с зависанием никакой нет. Есть проблема какого-то некорректного обращения к адресу памяти внутри DLL тулкита из-за чего потом какие-то побочные проблемы вылазят при перерисовке открытой карты.
Exception "видно" только если запускать под отладчиком, сам по себе он гасится внутри DLL.
Exception.png (4.59 КБ)
 
Пример проявления ошибки при работе с классификатором plan10000.rsc.
Для демонстрации создал пустую карту, нанёс на неё несколько точечных знаков.
TMapRsc привязан к TMapView. В остальном пример аналогичен предыдущему.
Карта с исходными кодами примера в приложенном архиве

Exception возникает также только в режиме VT_SCREEN с десятками знаков.
Первые 10 кодов знаков, на которых вылетает ошибка, выписал:
P0031531100; P0051462000; P0051571000; P0051463100; P0051571100; P0031632000; P0031638000; P0031639000; P0031650000; P0032430000

Ещё раз обращаю внимание на то, что при работе приложения Exception пользователю не виден, нужно запускать пример под отладчиком в режиме Debug.
 
Цитата
Илья Вдовин написал:
Проблемы с зависанием никакой нет. Есть проблема какого-то некорректного обращения к адресу памяти внутри DLL тулкита из-за чего потом какие-то побочные проблемы вылазят при перерисовке открытой карты.Exception "видно" только если запускать под отладчиком, сам по себе он гасится внутри DLL.
В программу будут внесены изменения. В ближайшее время обновим на нашем сайте.
Дополнительно еще сообщим.

Спасибо!
Изменено: Елена Кузнецова - 12.05.2021 09:40:31
 
Цитата
Илья Вдовин написал:
Для некоторых классификаторов вызов функции mapPaintExampleSiteObject() или mapPaintExampleRscObject() иногда приводит к Exception в недрах DLL.
На нашем сайте обновили программу Инструментарий разработчика ГИС-приложений GIS ToolKit (версия 13.3.3.1, для платформ "x32" и "x64")
https://gisinfo.ru/download/?id=253 с вошедшими правками.

Спасибо!
Изменено: Елена Кузнецова - 12.05.2021 16:43:29
 
Спасибо!

Уточните, пожалуйста, на счёт файла "mapproc.inc"  - в последнем варианте тулкита он исчез, а без него код не компилируется.
Пока взял из предыдущей версии и проблема с компиляцией решилась, но, вдруг, это не правильное решение.
 
Спасибо за сообщение. В ближайшее время обновим сборку.
Страницы: 1 2 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности