Итак. Имеем на входе 1. Видеокарту в двухмониторном режиме с двумя подключенными мониторами 2. Разрешение основного монитора (который слева FullHD 1920 х 1080 - диагональ 22") 3. Разрешение дополнительного монитора (на котором карта) - 1600х1200 (4:3 диагональ 19")
Перед открытием всех карт в секции инициализации (initialization) устанавливаю следующие параметры буфера mapSetScreenImageSize(4000, 3000)
В итоге на правом (дополнительном мониторе) все объекты становятся очень мелкими, а в масштабе 1:500 000 (1см/5км) видно территорию всего "золотого кольца" ну и карта естественно очень сильно тормозит при перемещении.
Опытным путём было вычислено, что вышеуказанная функция меняет не только размер буфера, а и размер "Диагонали" монитора по умолчанию Исходя из этого, достигается эффект отображения района карты который размещается на дисплее размером в 33" (после увеличения буфера) на мониторе с реальной диагональю 22".
По сути, функция mapSetScreenImageSizeне только устанавливает буфер экрана, а и пересчитывает "под себя" параметр которые возвращается и уста навивается функциями mapGetScreenSize / mapSetScreenSize
Чтобы достичь эффекта увеличения буфера без масштабирования карты функцию mapSetScreenImageSize использую вот так:
Цитата
int scrSize = mapGetScreenSize(); // запоминаю диагональ mapSetScreenImageSize(screen.Width*2, screen.Height*2); // расширяю буфер в два раза mapSetScreenSize (scrSize); // возвращаю диагональ
Вопрос 1: это правильное применение функции выделения буфера, или я что-то делаю не так: Вопрос 2: это правильно, что функция mapSetScreenImageSize пересчитывает параметр который возвращается функцией mapGetScreenSize ?
// Уточнить размер экрана в миллиметрах для сохранения HorPixelInMeter ScreenSize = sqrt((double)ScreenWidth * ScreenWidth + ScreenHeight * ScreenHeight) / HorPixelInMeter * 1000.0 * ScreenScale / 100.0;
Всё таки внутренний пересчёт присутствует, ОК. Вопрос: Имеется 2 разных монитора подключенных к видеокарте (1920х1080 основной и 1600х1400 резервный) Отображение карты на резервном с метрикой 4х3, у основного 16х9 (HD) При старте, ядро берёт по умолчанию метрику первого монитора (число 512) и применяет к картографии в итоге на мониторе на котором карты - в нижней части чёрная полоса высотой 1400-1080 (320 пиксель)
Чтобы "убрать" эффект" я использовал вышеуказанную функцию с коррекцией метрики монитора. То есть, запоминая исходный mapGetScreenSize в глобальную переменную (условная базовая диагональ нормального отображения карты)
устанавливаю буфер который перекроет 1400 пиксель по высоте mapSetScreenImageSize(screen.Width*2, screen.Height*2); 3840х2160и возвращаю mapSetScreenSize(512)
Чёрная полоса на втором мониторе - пропадает. Вопрос - это правильное использование памяти/функция/ядра? или я что-то делаю не так
Не тот глуп кто не знает, а тот, кто не знает где искать.