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

Динамическая отрисовка линейного объекта со сплайном

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Динамическая отрисовка линейного объекта со сплайном
 
В новых версиях GTK15 изменился алгоритм отрисовки линии со сплайном?
В своей программе давно не тестировал создание сглаженных объектов, а тут понадобилось, и вижу следующую картину.
https://disk.yandex.ru/i/To5y3kOv5wdNZA
Первый сегмент всегда создается правильно (там и сглаживать нечего). То есть фактически последняя точка объекта всегда отстает от положения курсора мыши.
Алгоритм там такой. Создается объект на карте, при движении мыши удаляется последняя метрика и добавлется текущее положение мыши на карте.
Разница в коде создания не сглаженного и сглаженного объекта в 1 строчке:
Код
 if (Spline) mapSetObjectSpline(obj,50);
если не задавать рисование со сплайном, последняя точка прекрасно движется за мышью и объект создается правильно.
 
Добрый день!

Уточните, пожалуйста, значение второго параметра, передаваемого в функцию. Исходя из описания функции mapSetObjectSpline() (mapapi.h), в параметре type (тип сплайна) должно быть указано значение перечисления SPLINETYPE (maptype.h):
Код
 // Установить/Запросить способ отображения метрики объекта в виде
 // динамического сплайна
 // type - тип сплайна (SPLINETYPE_SMOOTH, SPLINETYPE_POINTS)
 // При ошибке или отмене рисования сплайна возвращает ноль

_MAPIMP long int _MAPAPI mapSetObjectSpline(HOBJ info, long int type);
_MAPIMP long int _MAPAPI mapGetObjectSpline(HOBJ info);
Код
enum SPLINETYPE           // ТИПЫ СПЛАЙНОВ
{
  SPLINETYPE_NONE   = 0,  // Ломаная линия
  SPLINETYPE_SMOOTH = 2,  // Сглаживающий сплайн (срезает углы)
  SPLINETYPE_POINTS = 4,  // Огибающий сплайн (проходит через точки)
};
 
Сейчас уже и не вспомню почему 50, может раньше там был не тип, а что-то еще.
Поставил SPLINETYPE_SMOOTH, все равно криво работает.
Только что полностью принес код с работы, там на GTK 15.1.0.0 и Windows 10 все прекрасно работает и со значеием 50.
Дома GTK 15.1.0.2 Windows 11 - криво.
Вот и непонятно что изменилось, толи GTK, толи Win.
 
Значение 50 всегда было ошибочным - раньше результат был случайным.
В GTK 15.1.0.2 добавлена защита от ошибочных флагов:  (50 & (METRIC_SMOOTHSPLINE | SPLINETYPE_POINTS)) = METRIC_SMOOTHSPLINE = 2 (работает метод "Сглаживающий сплайн")

Попробуйте использовать легальные значения: 0, 2, 4
 
0 - работает нормально, без сплайна, за мышью следует как надо
2, 4 - работает криво.
 
Установка последней версии GTK 15.1.2.0 исправила проблему.  
Страницы: 1
Читают тему (гостей: 1)



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

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