В начале месяца я обещал выложить инструкцию, как рисовать круги. И вот я наконец разродился статьей
Для рисования потребуется приложения AutoHotkey и специальный скрипт для него. Приложение предназначено для выполения макросов и привязки их к сочетаниям клавиш.
Автором подхода и скрипта является Falcon. Я переработал скрипт, чтобы его можно было применять без масштабирования и переноса полученного круга. Что позволило рисовать дороги и избавило от проблемы, когда перестало работать масштабирование с сохранением пропорций.
Предварительные шаги:
1) Скачать и установить приложения AutoHotkey
2) Скачать скрипт.
Не могу гарантировать долговременное хранение скрипта в общем доступе, поэтому прикладываю его код здесь. Достаточно сохранить этот код в текстовом файле с расширением .ahk
3) Включить скрипт в AutoHotkey, запустив файл скрипта. Убедитесь, что при этом включена английская раскладка, иначе получите сообщения об ошибке. (это решение на коленке, просьба не судить за подобные дурацкие нюансы)
Запущенный скрипт ожидает определённые сочетания клавиш, чтобы начать свою работу. Сочетания клавиш срабатывают, если активна вкладка в браузере с Народной картой.
Как нарисовать круг (многоугольник)
Круг рисуется по трём точкам. В процессе нужно будет указать три точки на окружности, по которым дальше скрипт построит полный круг. Этот алгоритм подходит как для отрисовки зданий и территорий, так и для дорог, и сложных контуров.
Далее по пунктам:
1) Открыть на карте место, где нужно нарисовать круг. Круглый объект должен полностью вмещаться на экране. Элементы интерфейса не должны его заслонять. Чем больше будет масштаб, тем более детально и плавнее можно нарисовать круг.
2) В меню Создать выбрать контур или линию, которые надо нарисовать. По сути, скрипт будет просто ставить точки за вас.
3) Отключить Режим залипания. Если его оставить включенным, скрипт может попортить форму круга, пытаясь автоматически подровнять углы.
4) Навести курсор на любую точку на окружности, которую предстоит описать, и нажать сочетание клавишь Alt+R. Скрипт запомнит первую точку окружности. Важно после этого не двигать карту.
5) Скрипт предложит указать вторую точку. Навести курсор на любую вторую точку на окружности (но лучше на некотором расстоянии от первой) и нажать Enter. Кликать мышкой не надо.
6) Скрипт запросит указать третью точку. Поступаем аналогично. Я стараюсь указывать три точки равномерно, как если бы они формировали почти равносторонний вписанный треугольник в круге.
Скрипт запомнил все три точки. Теперь он предложит указать количество вершин. Можно указать конкретное количество вершин, чтобы создать правильный многоугольник. Чем больше количество вершин, тем плавнее будет круг. Чем больше размер круга на карте, тем больше можно указать вершин. Однако, если переборщить с количеством вершин, скрипт может накосячить.
7) Ввести число вершин, нажать и нажать OК или Enter. Скрипт начнёт рисовать круг. Важно ему не мешать, а именно не трогать мышку и клавиатуру.
8) Дождаться, когда скрипт расставит все точки. Иногда скрипт пропускает последнюю вершину. Лекарство от этого - отрисовать с меньшим количеством вершин. Однако, в большинстве случае достаточно самостоятельно на глаз поставить последнюю точку. Так быстрее. Если создавали новый сложный контур, замкнуть его нужно самостоятельно. Дорогу замкнуть не получиться. Последний сегмент надо дорисовать после того как полученная линия будет поделена как минимум на две части.
9) Сохранить объект.
Пара дополнительных возможностей скрипта:
- По Alt+P запускается первоначальный алгоритм, который написал Falcon. Для него достаточно задать количество вершин, фигура будет нарисована посередине экрана с фиксированным диаметром.
- При нажатом Alt один клик левой кнопки мыши работает как двойной клик. Я это использую, когда нужно удалить много точек за раз. Немного упрощает задачу
Нюансы и потенциальные косяки:
- Если при запуске файла со скриптом валяться ошибки типа "hotkey doesn't exist in current keyboard layout", убедитесь, что включена английская раскладка
- Код скрипта ориентируется на название окна с Народной картой, чтобы не срабатывать в других приложениях и на других сайтах. Если Яндекс поменяет название страницы, нужно будет заменить его везде в скрипте, чтобы он снова заработал.
- Точки контура намеренно расставляются с задержкой, чтобы Народная карта успевала корректно отрабатывать нажатия. Однако, если компьютер не столь шустрый или занят параллельно более важными делами, возможно, потребуется увеличить задержку. Найдите в коде строку "sleep, 150" и увеличьте значение задержки.
- Первоначальный алгоритм по Alt+P заточен на размер окна и разрешение экрана 1920х1080. Если у вас иное разрешение экрана или нестандартный размер окна, придётся подправить скрипт в этом месте (250 - радиус окружности, 860 и 540 - центр окружности по горизонтали и вертикали соответственно)r = 250
InputBox, n, Количество вершин
DrawCircle(860, 540, r, n)