[general]
name=Isoliner - грид и изолинии
qgisMinimumVersion=3.16
qgisMaximumVersion=4.99
description=2D kriging (GSLIB KB2D) and isoline / contour-polygon generation in QGIS. Кригинг 2D (GSLIB KB2D) и построение изолиний/контурных полигонов в QGIS.
about=A Processing toolset for point-data interpolation and isolines: 2D kriging (points to raster, GSLIB KB2D core), experimental variogram with model fitting, leave-one-out cross-validation, optional trend removal (regression kriging), isolines and contour polygons whose boundaries coincide with the lines, reusable processing profiles, and a sample-data generator. Suitable for roof elevations, thicknesses, geomechanical properties, chemistry and any numeric attribute. Bilingual (EN/RU) user manual (PDF) is bundled, opened by the language of the QGIS interface. Developed with the support of Inform++ LLC (www.informpp.ru).
    .
    Группа команд Processing для интерполяции точечных данных и построения изолиний: 2D Kriging (точки в растр, ядро GSLIB KB2D), экспериментальная вариограмма с подбором модели, кросс-валидация (leave-one-out), опциональное снятие тренда (регрессия-кригинг), изолинии и контурные полигоны с совпадающими границами, профили обработки и генератор учебных данных. Подходит для отметок пласта, мощностей, ФМС, химии и любых числовых атрибутов. Двуязычное руководство пользователя (PDF, EN/RU) в комплекте, открывается по языку интерфейса QGIS. Разработано при поддержке ООО «Информ++» (www.informpp.ru).
version=4.47.0
author=ООО «Информ++»
email=xbbster@gmail.com
homepage=https://github.com/Valery35/qgis-isoliner
tracker=https://github.com/Valery35/qgis-isoliner/issues
repository=https://github.com/Valery35/qgis-isoliner
tags=kriging,geostatistics,variogram,interpolation,minimum curvature,cross-validation,contour,contours,isolines,hydrogeology,geology,gslib,raster,dem,terrain,topography,hydrology,watershed,flow accumulation,river network,slope,aspect,anudem,topo2raster,copernicus,gedtm30,openstreetmap
category=Analysis
icon=icon.svg
experimental=False
deprecated=False
hasProcessingProvider=yes
changelog=4.47.0
    - Топографический сценарий перестал ходить по кругу. ЦМР в 2.20 стала
      необязательной: спуск по склону отвечал на единственный вопрос, где
      низ, а когда у линий есть свои отметки (выход 2.22), ответ уже в
      данных - подошвой считается ближайшая линия, лежащая ниже бровки.
      Раньше приходилось делать черновой проход 2.03 по одним
      горизонталям, зная, что внутри карьера он неверен, лишь бы было по
      чему спускаться.
    - Порядок стал прямым: 2.22 даёт отметки, 2.20 без ЦМР собирает пары,
      2.03 строит поверхность. С ЦМР работает прежний спуск, он точнее на
      кривом борту с узкими бермами, где ближайшая подошва часто
      принадлежит соседнему уступу.
    - Плоские линии без Z в режиме без ЦМР пропускаются с явным
      сообщением: собрать пару по отметкам, которых нет, нельзя.
    4.46.0
    - 2.20 читает поле вида терпимо. Раньше ожидались только brow и toe,
      как их пишет 2.19, а в сдаточном комплекте стоит «Бровка откоса,
      насыпи, выемки укреплённая» или код 62350400. Теперь понимаются
      значения 2.19, коды бровок из классификаторов и названия со словами
      «бровка» и «подошва».
    - Угадывание не оставлено молчаливым: в журнал печатается таблица, как
      прочитано каждое значение поля, а неузнанные перечисляются отдельно
      и пропускаются. На первом живом слое видно решение, а не «доверьтесь».
    - Отдельного кода подошвы нет ни в одном классификаторе - она проходит
      нижней горизонталью или линией основания, поэтому список кодов
      односторонний, и это не упущение.
    - Руководства RU (117 стр) и EN (114 стр) получили раздел 2.22 и
      описание веса измеренных отметок в 2.03.
    4.45.0
    - 2.03: параметр «Вес измеренных отметок». Точки высот и вершины
      уплотнённых изолиний идут одним потоком жёстких узлов, и при
      совпадении в одной ячейке простое среднее уравнивало их в правах.
      Измеренная отметка снята прибором, а вершина горизонтали нарисована
      по линии сечения и врёт в пределах половины сечения. Вес больше
      единицы отдаёт ячейку измерению. Схема релаксации не тронута:
      меняется только число в узле.
    - Умолчание единица, старые прогоны воспроизводятся. Массив точек без
      столбца веса работает как прежде. Ноль, отрицательный вес и NaN
      считаются единицей, а не портят ячейку.
    4.44.0
    - 2.22 «Отметки с примыкающих горизонталей»: даёт немым линиям профиль
      по горизонталям, доведённым до них узловыми точками. Берутся
      пересечения насквозь и концы горизонталей в допуске, между точками
      отметка интерполируется по дуге линии, за крайними держится
      постоянной. Выход - LineStringZ, готовая сторона формы для 2.03.
    - Вместе с 2.20 это закрывает площадные карьеры, выемки, насыпи и
      отвалы в топопланах: горизонтали внутри них по нормативу не
      описываются, и бровки с подошвами - единственный источник рельефа.
      Немые линии уходят в отдельный слой с причиной, число опорных точек
      пишется в атрибут n_samples и в журнал.
    4.43.0
    - Ядро поверхности между структурными линиями (topo_form) закрыто
      тестами по всему списку проверок постановки: прямой откос строго
      линейчат, отметки на линиях воспроизводятся точно, конус ямы имеет
      вершину ровно в точке, канава распадается на зеркальные половины,
      сходящаяся промоина не рождает NaN, а разведённые отметки в точке
      схождения дают ненулевое расхождение. Точность преобразования
      расстояний сверена с прямым перебором.
    - Маска тела строится переносом местной ширины от ближайшего
      источника: одна формула вместо разбора случаев, и она закрывает
      откос, конус, кольцо и сходящуюся промоину. Интеграционный тест
      гоняет настоящий Topo2Raster: жёсткие узлы формы держатся до
      машинного нуля, схема релаксации не тронута.
    - Переведены на английский строки входов форм и границы области
      построения: они были в интерфейсе без перевода.
    - Найден и запущен тест, который никогда не работал: в наборе по
      фракталам две функции звались одинаково, и первая молча затенялась.
      Добавлен сторож на затенённые тесты по всем наборам.
    - В словаре переводов убран дубль ключа границы области построения.
    - Руководства RU и EN получили раздел о поверхности между
      структурными линиями и описание новых входов 2.03.
    4.42.0
    - В демо-карьер добавлена насыпь с поворотом гребня на прямой угол и
      переменной отметкой вдоль него. Она нужна для двух чисел цены
      метода расстояний в построении поверхности между линиями: у поворота
      с внутренней стороны возникает медиальная ось (залом), с внешней
      веер от угловой вершины. Оба эффекта проявляются только при
      переменной отметке, поэтому остальные формы демо их не показывали.
      Мерить их на реальной съёмке нельзя: они считаются против
      аналитического эталона, а у съёмки его нет.
    - Пороги гистерезиса в 2.19 пересчитаны. Прежняя привязка к максимуму
      признака делала порог заложником одного самого резкого объекта на
      растре: появление насыпи с острым гребнем выбило из выдачи все
      уступы карьера. Теперь квантиль по гребням, но не ниже физического
      пола: излом обязан поворачивать склон хотя бы на пять градусов на
      ячейку. Один квантиль без пола пропускал ровную наклонную плоскость.
    - Справка 2.20 переписана: у инструмента два сценария, и второй важнее
      первого. Линии бровок и подошв часто уже есть в топографическом
      комплекте, где они описываются обязательно и своими кодами, детектор
      там не нужен вовсе, а связь всё равно надо собирать. Руководства и
      шпаргалка приведены в соответствие.
    4.41.0
    - Чистка по замечаниям линтера. Двусмысленное имя переменной l (E741)
      в algorithms.py и трёх тестах заменено на осмысленное.
    - Найден и устранён настоящий дефект: в словаре переводов ключ
      «подошва» стоял дважды с разными значениями. Геологическая подошва
      пласта и подошва уступа - омонимы, а словарь различает значения по
      самой строке, поэтому в легенде кандидатов по-английски печаталось
      bottom вместо toe. Подписи разведены: «бровка уступа» и «подошва
      уступа».
    - Там же убран второй дубль, «Вероятность %%s · %%s» с двумя разными
      разделителями в переводе.
    - Тест переводов теперь валится на ключе, у которого два разных
      перевода. Повтор с тем же значением безвреден и только считается.
    - Убраны мёртвые переменные в demo_pit.
    4.40.0
    - 2.20 перешёл с пар один-к-одному на формы. На прогоне по демо 20 пар
      опирались всего на 13 подошв: трассировка режет длинную бровку на
      куски, и все куски честно спускаются к той же подошве. Пары
      выписывали её по разу на каждую бровку, и в слое Низ появлялись
      дубликаты геометрии.
    - Теперь результат группируется по подошве: форма это одна подошва и
      множество бровок при ней с общим полем связи. Подошва пишется один
      раз. Это тот же взгляд, что в постановке про поверхность между
      структурными линиями, где стороны - множества, а не отдельные линии.
    - В журнале печатается число форм, подошв и бровок при них.
    4.39.0
    - Раскраска кандидатов 2.19 стала осмысленной. Четыре класса по
      квантилям на карьере с одинаковыми уступами рубили шум, и в легенде
      стояло «бровка 10-10». Теперь при разбросе перепада меньше 15
      процентов остаётся один класс на вид, насыщенным цветом, а классы
      появляются, когда уступы действительно разной высоты.
    - Точность подписи считается от размаха: метры с десятыми на борту,
      сантиметры на колеях и бордюрах. Округления до «10-10» больше нет.
    4.38.0
    - 2.21: охват теперь только кладёт демо на место и НЕ меняет его
      размер. Раньше размер грида считался из охвата, и заданный по
      шахтному полю охват растягивал карьер до километров: уступ в 10 м
      при откосе 7 м превращался в чёрный блин, на котором детектору
      нечего искать. Размер задают «Ширина» и «Высота» в ячейках, демо
      ложится серединой в середину охвата.
    - Если охват задан в другой системе координат, в журнал уходит
      предупреждение. При местной или неизвестной СК проекта пересчёт
      охвата в UTM даёт бессмыслицу, и в справке сказано прямо: выбирайте
      в «СК выхода» систему своего проекта.
    - Тест ядра держит физичность форм: на гриде вдвое шире глубина
      карьера обязана остаться прежней.
    4.37.0
    - Найдена настоящая причина, почему кандидаты 2.19 выходили
      однотонными, и она не в QML. У слоя пост-процессор один, а
      сворачивание узла дерева вешает свой: группировка молча затирала
      стилевой. Диагноз про data-defined цвет в 4.36.0 был неверным.
    - Выходы 2.19 и 2.20 группируются без сворачивания, стиль доживает до
      карты. Проверка добавлена сторожевым тестом: он ищет в коде пары
      «стиль на слой, потом группировка со сворачиванием» и валится.
    - Рендерер правилами из 4.36.0 оставлен: он не зависит от выражений в
      свойствах символа и берёт границы классов из самих данных.
    4.36.0
    - Раскраска кандидатов 2.19 переехала из QML в код. Data-defined цвет
      на живом QGIS 4 не срабатывает: сначала это вылезло на полосах
      разреза, теперь повторилось здесь, линии выходили однотонными.
      Рендерер строится правилами, границы классов - квантили самого слоя,
      бровки тёплые, подошвы холодные, толщина растёт с перепадом.
    - База замера перепада в 2.19 поднята с 3 ячеек до 8. Перепад меряется
      в базе, и при трёх ячейках десятиметровый уступ читался как три
      метра. Теперь на демо-карьере drop показывает настоящие 10 м.
      В журнал печатается база в метрах, в справку добавлена оговорка.
    - Отсечка шума в 2.19 поднята с 0.2 до 0.5 м, предел пути спуска в
      2.20 снижен с 200 до 50 м. Прежние 200 м на карьере с бермами
      позволяли бровке добежать до подошвы соседнего уступа и составить
      с ней ложную пару, вместо того чтобы честно уйти в непарные.
    - Выходы 2.20 получили простую раскраску: Верх тёплым, Низ холодным.
    4.35.0
    - 2.20 «Бровки и подошвы в работу»: вторая половина пары к 2.19. Снимает
      отметки с ЦМР, собирает пары бровка-подошва и раскладывает их по двум
      слоям, Верх и Низ, с общим полем связи. Выход подаётся дальше как есть.
    - Пары собираются спуском по склону, а не по близости. От пробных вершин
      бровки идёт спуск по направлениям стока до подошвы, подошвы голосуют.
      Это физика уступа: вода с бровки скатывается к его подошве. На кривом
      борту с узкими бермами ближайшая по расстоянию подошва часто чужая, и
      выбор по близости ошибается там, где спуск прав.
    - Непарные линии не пропадают молча, а уходят в третий слой с причиной:
      спуск не дошёл до подошвы либо разошёлся по разным подошвам.
    - Отсечка по перепаду повторяет фильтр 2.19, поэтому можно подавать весь
      слой кандидатов, не заводя отфильтрованный.
    4.34.0
    - Два новых инструмента топографии, задел ветки структурных линий.
    - 2.19 «Кандидаты бровок и подошв» находит места, где уклон меняется
      быстрее всего, и трассирует их в линии с атрибутами: перепад
      поперёк, длина, средний уклон сторон, вид (бровка или подошва по
      знаку кривизны). Слой приходит с раскраской по перепаду, порог
      значимости остаётся человеку: фильтр слоя по полю drop, глядя на
      карту, без пересчёта. Процентили перепада печатаются в журнал.
      Работает на плотной съёмке: шум гасится сглаживанием и правилом
      «излом без перепада не излом».
    - 2.21 «Создать пример карьера (демо)» строит карьер с уступами,
      съездом, отвалом и сходящейся канавой и отдаёт истинные линии с
      трёхмерными вершинами и полем связи. Пара растр-линии - эталон
      для 2.19 (полнота и точность меряются числом), вход для
      построения поверхности и учебный пример без закрытых данных.
    - Связка закреплена безголовым тестом: детектор прогоняется по
      демо-карьеру и обязан находить истинные линии.
    4.33.0
    - В 4.05 две галочки по просьбе Василия Швалева: «Сохранять имя
      исходного слоя» и «Сохранять стиль исходного слоя». Работают, когда
      подан один слой. Обе по умолчанию выключены, прежние прогоны
      воспроизводятся.
    - Имя выхода идёт от источника: слой геологии даёт «Геология на
      разрезе» вместо «Полосы зон на разрезе». Если один слой родил
      несколько видов объектов, к имени добавляется вид, иначе слои в
      дереве назывались бы одинаково.
    - Стиль берётся у самого слоя. Вместе с переносом атрибутов из 4.29.0
      это снимает ручную работу: категорийная раскраска геологии по полю
      ложится на полосы как есть. Стиль переносится при совпадении типа
      геометрии, линия с Z даёт точку и остаётся со штатным стилем.
    - Отдельно этим закрыт вопрос стратиграфической палитры: таблица
      код-цвет от геологов не нужна, у них слои уже раскрашены в проекте.
    4.32.0
    - У 3.01 «Категориальный индикаторный кригинг» появился параметр «Доля
      самородка». Пусто оставляет автоподбор, ноль делает оценку гладкой у
      данных, и скважина удерживает свой класс в своей ячейке. Общая
      дисперсия при переносе доли сохраняется, меняется только гладкость.
    - Подобранные самородок и радиус по каждому классу печатаются в журнал.
      Раньше модель подбиралась молча, и понять, почему карта расходится с
      фактами, было не по чему.
    - Причина, ради которой это сделано: ровно в точке замера кригинг точен
      при любом самородке, но узел сетки почти никогда не садится на устье.
      При самородке 0.5 в пяти метрах от одиночной скважины вероятность
      падает до 0.47, то есть под порог 0.5, а при нулевом остаётся 0.97.
      Скважина опасного класса оказывалась вне опасной зоны.
    - В руководства добавлен раздел «Когда скважина не попала в свою зону»:
      самородок, размер ячейки и сдвиг границы полигона сглаживанием.
    4.31.0
    - 4.05 обрезает зоны и разломы снизу по линии низа с чертежа. Пара к
      верхней обрезке из 4.30.0: подаётся слой подошвы, почвы пласта или
      любой нижней поверхности, и низ полос и вертикалей ложится по ней.
      Линии нет, низ остаётся по рамке, как раньше.
    - Слой из нескольких поверхностей годится как есть: сверху обрезка идёт
      по верхней огибающей, снизу по нижней. Нужна одна поверхность,
      подаётся слой, отфильтрованный по полю name.
    - Кромки считаются в одних и тех же станциях. Узлы обеих ломаных
      сводятся в общий набор, иначе кромки пересекались бы между узлами и
      кольцо завязалось бы бантиком вместо полосы.
    - Низ не поднимается выше верха. Где линия низа прошла над рельефом,
      полоса схлопывается и объект не выдаётся, число срезанных целиком
      печатается в журнал. Вывернутой геометрии с самопересечением на
      чертеже не появляется.
    - Обе линии обрезки запоминаются между запусками, как остальные входы:
      чертёж выбирается один раз, а не при каждом прогоне.
    - С 4.07 «Проекция объектов на разрез» и 4.08 «Спроецировать с
      разреза» снята метка «бета». Инструменты проверены на реальных
      данных: зоны минерализации и геологию выносят пересечением, точки
      отбора проекцией, вопросов к проекции не осталось. Развёртка стенки
      ствола 4.09 пока помечена, её пробовать не на чем.
    4.30.0
    - 4.05 обрезает зоны и разломы сверху по линии рельефа с чертежа.
      Вторая просьба Василия Швалева. Подаётся слой линий рельефа из 4.01,
      верх объектов ложится по рельефу, кромка полосы повторяет его
      переломы. Обрезка идёт по линии с чертежа, а не по растру ЦМР:
      разрез мог строиться по другой поверхности, и тогда растр с
      чертежом разойдутся, а обрезать надо по тому, что человек видит.
      Разрезы сопоставляются по полю sec_id.
    - Появилось поле нижней отметки полос и вертикалей: низ берётся из
      атрибута объекта, а не из рамки, поэтому зоны рисуются своей
      глубины. Значение читается как абсолютная отметка, флажок в
      дополнительных параметрах переключает его на глубину от верха.
      Ниже рамки низ не опускается.
    4.29.0
    - 4.05 «Пересечение векторов с разрезом» переносит атрибуты объектов на
      чертёж. По просьбе Василия Швалева: границы на разрез выносились, а
      покрасить их по возрасту было нечем, в выходе стояло только имя слоя.
      Теперь полосы и вертикали красятся и подписываются по своим полям
      без ручного связывания с исходным слоем.
    - Слоёв подаётся несколько и схемы у них разные, поэтому колонки
      сводятся в один общий набор: поле, которого у слоя нет, остаётся
      пустым, одинаковое имя в разных слоях считается одной колонкой.
      Имена, совпадающие со служебными (sec, src, label, d, z, d1, d2),
      переименовываются с суффиксом. Это не косметика: колонка d несёт
      расстояние вдоль разреза, и атрибут объекта с тем же именем молча
      подменил бы координату.
    - Флажок «Переносить атрибуты объектов на разрез» включён по умолчанию,
      число собранных колонок печатается в журнал.
    4.28.0
    - Тальвеги в 2.03 могут нести отметки. Раньше тальвег был только
      условием падения вниз по течению, а высоту дна решал интерполятор
      по окружающим данным. Теперь отметки вершин трёхмерной линии
      становятся жёсткими узлами, и промер по руслу задаёт дно.
    - Отметки один раз приводятся к падающим вниз по течению. Это не
      аккуратность, а условие работоспособности: измерения шумят,
      вершина, ушедшая вверх, спорила бы с принуждением падения каждую
      итерацию. Правка идёт только вниз, наибольшая величина печатается
      в журнал. После приведения принуждение становится пустой операцией.
    - Ячейки, где отметка тальвега расходится с другим узлом больше чем
      на пять сантиметров, считаются и выводятся предупреждением: обычно
      это пересечение русла с горизонталью, и там побеждает тальвег.
      Молча такой спор не решается.
    - Линия без отметок ведёт себя как прежде, разнотипный слой
      разбирается по объектам, как урез воды.
    4.27.0
    - Демо 4.10 выдаёт свой справочник пластов. Интервалы демо размечены
      кодами Q, В1, Пр1, В2, Пр2, В3, а поставляемый справочник из 4.11
      собран по Верхнекамскому месторождению и этих кодов не знает,
      поэтому колонки скважин на демо оставались без цвета. Справочник
      собирается из того же списка кодов, которым размечаются интервалы,
      и разъехаться с данными не может. Полосы пластов в 4.01 он не
      красит: там пласт ищется по именам слоёв кровли и подошвы, а
      поверхности демо названы номерами и кода пласта не несут. На своих
      данных, где слои названы кодами, тот же справочник красит и полосы.
    4.26.1
    - Демо-скважины стало видно. Пара слоёв модели бурения collar и interval
      выдаётся инструментом 4.10 давно, но была упомянута в середине абзаца
      справки, а руководство описывало ещё старый широкий формат h1...h6.
      За сутки двое спросили, есть ли интервалы опробования, хотя они есть
      и есть демо к ним. Теперь скважины вынесены отдельным разделом в
      справке 4.10, в руководствах RU и EN и в README: 4.10, затем 4.01,
      затем 4.02 - весь путь пробуется без своих данных.
    4.26.0
    - У 2.03 Topo2Raster появилась граница области построения: полигон
      ограничивает поверхность, как outer boundary в САПР, за границей
      nodata. Маска накладывается ПОСЛЕ интерполяции, а не отсечением
      входа: данные снаружи продолжают формировать поверхность у самой
      границы, и края не заворачиваются. Слой границы принимается в любой
      СК, геометрия переводится сама. В журнал печатается доля ячеек
      внутри, при нулевом пересечении расчёт прерывается с указанием
      проверить СК.
    4.25.0
    - 2.18 получил два выхода по просьбе Василия Швалева. Слой «Участки с
      объёмами»: те же полигоны с объёмами в атрибутах (fill_vol, cut_vol,
      net_vol, площади, наибольшие отметки, число ячеек, вердикт). Ведомость
      HTML нужна для согласования, а подписать участки на карте можно только
      атрибутами.
    - Флажок «Обрезать растр разности по участкам»: за контуром работ
      разность складывается из шума съёмки, и растянутая на неё цветовая
      шкала прячет то, ради чего растр и смотрят. На числа обрезка не
      влияет, статистика считается до неё, в ведомости остаются оба итога.
    4.24.0
    - Каталожный релиз. Собраны изменения ночных сборок 4.18-4.23: новый
      инструмент 2.18 «Насыпи и выемки», разрез 4.01 по одной поверхности
      с низом рамки и слоем линий поверхностей, демо-пара поверхностей в
      2.10, проверка живости запомненных ссылок на слои, переименование
      2.16, удаление 2.17. Руководство и шпаргалка приведены в
      соответствие с составом модуля.
    4.23.1
    - Разрез по одной поверхности не создаёт пустых слоёв. Пластов нет,
      значит полосам взяться неоткуда, и чертёж полос вместе с забором 3D
      выходили пустыми слоями в дереве. Пустой слой в проекте выглядит
      поломкой, хотя построено всё верно, поэтому теперь они в проект не
      добавляются, а в журнале сказано, где смотреть рельеф.
    4.23.0
    - Разрез по одной поверхности доведён до рабочего вида. В 4.22.0 было
      снято требование двух поверхностей, но ниже по коду остались две
      проверки, считавшие пустой список пластов признаком того, что линия
      прошла мимо данных. На одной поверхности пластов нет по определению,
      и расчёт прерывался при полностью валидном профиле. Теперь причины
      разведены: пластов нет при одной поверхности это норма, при
      нескольких это по-прежнему ошибка.
    - Новый выход 4.01 «Линии поверхностей на чертеже». Раньше на чертёж
      шли только полосы пластов, то есть разрез по одной поверхности вышел
      бы рамкой без рельефа. Теперь каждая поверхность даётся отдельной
      линией с полями sec, sec_id, num и name, разрывы по отсутствию
      данных сохраняются. Выход полезен и с пластами: линию кровли можно
      подписать и оформить отдельно от полос.
    4.22.1
    - Память слоёв: закрыт второй вход. Проверка живости ссылки, добавленная
      в 4.18.3, стояла только на _restore_layer_defaults, а часть параметров
      подставляет память прямо в объявлении и стража миновала. Так падал
      справочник пластов в 4.01 и входы модели бурения в 4.02: слой из
      прошлого проекта удалён, комбо пустое, а запуск сообщает о
      некорректном значении. Теперь оба входа проходят одну проверку,
      сторожевой тест следит, чтобы незащищённых не осталось.
    4.22.0
    - Разрез 4.01 строится по одной поверхности. Раньше требовалось
      минимум две, кровля и подошва, и самый частый начальный случай был
      недоступен: у человека есть только ЦМР, а нужен профиль рельефа,
      чтобы наносить на него пересечения и рисовать геологию вручную.
      Теперь одна поверхность даёт линию рельефа, рамку, оси, угловые
      точки и определение разреза, а список пластов остаётся пустым.
    - В дополнительных параметрах 4.01 появился «Низ рамки, отметка».
      Без него рамка обжимает данные, и под рельефом не остаётся места
      для рисования. Отметка учитывается до расчёта вертикального
      масштаба, поэтому в режиме отношения габаритов чертёж выходит в
      масштабе той рамки, которую человек увидит. Отметка выше данных
      игнорируется: это низ рамки, а не обрезка.
    4.21.2
    - В ведомости 2.18 убрана группировка разрядов там, где она мешала:
      начало сетки, шаг ячейки и мёртвая зона. Координата это не сумма,
      и пара координат с разделёнными разрядами читалась как четыре
      числа вместо двух. X и Y теперь разделены запятой.
    4.21.1
    - Ведомость 2.18 и журнал печатают числа человеческим видом:
      701 224 863 вместо 7.01225e+08, разряды разделены неразрывным
      пробелом. Экспоненциальная запись годится для отладки и не годится
      в документе, который несут согласовывать.
    - Площади в ведомости переведены в гектары: девятизначное число
      квадратных метров глазом не читается.
    - В таблице по участкам появилась строка «итого». Сумма по участкам
      и общий итог теперь сверяются в одном взгляде, а не в уме.
    4.21.0
    - Демо-рельеф 2.10 научился выдавать пару поверхностей для 2.18: два
      необязательных выхода, проектная площадка и полигоны участков
      работ. По умолчанию оба выключены, у тех, кому нужен один рельеф,
      ничего не изменилось.
    - Отметка площадки берётся средним рельефа внутри области работ.
      Это точный ответ, а не вкусовщина: объём есть сумма разностей, и
      нетто обращается в ноль ровно при отметке, равной среднему.
      Медиана делит пополам ячейки, а не кубометры, и баланс при ней не
      сходится. Демо сразу даёт сошедшийся баланс, а сдвиг отметки в
      дополнительных параметрах уводит его в привозной или вывозной
      грунт, так что все три вердикта 2.18 проверяются в два щелчка.
    4.20.0
    - Новый инструмент 2.18 «Насыпи и выемки (объёмы работ)». Считает
      объём между двумя поверхностями: разность отметок по ячейкам на
      площадь ячейки. Знак «стало минус было», насыпь положительна.
      Поверхность сравнения задаётся растром или одной отметкой числом.
    - Сетки приводятся автоматически: хозяином берётся первая матрица,
      вторая приводится билинейно. Ближайший сосед не используется, он
      возвращает ступени. За краем данных объём не считается, высоты не
      экстраполируются.
    - В журнал печатаются начало сетки, шаг и число ячеек обеих матриц.
      Это не украшение: расхождения объёмов с другими программами почти
      всегда даёт состав ячеек, а не формула. Билинейное приведение
      объём сохраняет, и это закреплено тестом.
    - Мёртвая зона по высоте отсекает фоновый шум двух поверхностей,
      который иначе раздувает и насыпь, и выемку, не меняя нетто.
    - Участки работ считаются отдельно по полигонам, с полем названия.
      Вердикт по балансу смотрит на долю нетто в обороте, а не на его
      величину. Выход: растр разности и ведомость HTML.
    - Линия нулевых работ отдельным инструментом не делается: это
      изолиния нуля по растру разности обычным инструментом изолиний.
    4.19.1
    - Инструмент 2.16 переименован в «Водосбор. Линии и контуры (канавы,
      карьеры)». Прежнее название читалось как водосбор одной линии, а
      инструмент с 4.16 принимает и полигоны.
    4.19.0
    - Инструмент 2.17 «Сгущение горизонталей секущими» убран из модуля.
      Приём проверен измерением: по одному набору горизонталей построены
      две матрицы 2.03 Topo2Raster с одинаковой рамкой и ячейкой, без
      точек сгущения и с ними, обе проверены 2.13. Притяжение отметок к
      уровням выросло с 1.09 до 1.14, средний модуль вертикальной
      кривизны с 9.31e-05 до 1.08e-04, заполнение понижений подняло 7498
      ячеек против 9018. Ухудшение по всем показателям сразу.
    - Причина в выборе пациента, а не в приёме. Мультисеточная схема 2.03
      сама наращивает данные от грубой сетки к тонкой и террасинга не
      даёт: отношение 1.09 на голых горизонталях это уже здоровая
      поверхность, лечить было нечего. Редкие выведенные точки ложились
      поверх неё жёсткими узлами, и вокруг каждой получалась лунка.
    - Держать инструмент, соседний номер которого подсказывает вредную
      связку, ни к чему. Код остаётся в истории репозитория.
    4.18.3
    - Память входных слоёв больше не подставляет мёртвые ссылки. Раньше,
      если запомненный слой удалён из проекта или проект другой, id
      подставлялся значением по умолчанию: комбо выглядело пустым, а
      запуск падал с сообщением «некорректное значение» без видимой
      причины. Теперь перед подстановкой ссылка проверяется: id должен
      находиться в текущем проекте, либо строка указывать на существующий
      файл. Мёртвая ссылка молча отбрасывается, диалог возвращается к
      обычному автоподбору. Списки слоёв чистятся пословно.
    4.18.2
    - Убран диагональный муар на рельефе после 2.17. Причина была в
      соотношении шагов: по умолчанию шаг вдоль секущей брался вчетверо
      мельче расстояния между секущими, точки ложились густыми полосами
      вдоль направления секущих и редко поперёк, и интерполятор эту
      анизотропию отрисовывал гребёнкой. Теперь шаги по умолчанию равны,
      облако выходит изотропным.
    - Выход прореживается решёткой с шагом сгущения: одна точка на
      ячейку, сколько бы секущих там ни пересеклось. Берётся ближайшая к
      центру ячейки, чтобы облако не сползало к её краям.
    - Предупреждение, когда шаг сгущения задан заметно мельче расстояния
      между секущими: это рецепт муара.
    4.18.1
    - Исправлено падение 2.17 на первом же прогоне: метод ndarray.ptp()
      убран в NumPy 2, а QGIS 4 идёт именно с ним. Добавлен сторож
      tests/test_numpy2_rules.py - он читает исходники и ловит вызовы,
      убранные в NumPy 2. Обычные тесты такое поймать не могли: строка
      живёт в теле алгоритма QGIS, куда безголовый прогон не заходит.
    4.18.0
    - Новый инструмент 2.17 «Сгущение горизонталей секущими» (приём Ивана
      Иванова). Набирает промежуточные отметки между горизонталями до
      построения рельефа, чтобы террасе неоткуда было взяться. Семейства
      параллельных секущих под несколькими азимутами, одномерный профиль
      по пересечениям, сгущение монотонной кубикой Фрича-Карлсона.
      Монотонность взята не ради красоты: обычный сплайн между двумя
      горизонталями уходит выше верхней и изобретает вершину, которой в
      данных нет.
    - Точки выходят с весом меньше единицы (они выведенные, а не
      измеренные) и с азимутом секущей в атрибутах. Вес читают
      инструменты с полем весов, 2.03 Topo2Raster пока нет.
    4.17.0
    - Пре-релизный проход. Руководства RU и EN дополнены разделом про
      инструмент 4.11, подписи параметров в них выправлены под новые
      («Справочник пластов (таблица)»), PDF пересобраны.
    4.16.1
    - В образец справочника пластов возвращён составной пласт КрIIIа+б,
      сумма КрIIIа, КрIIIа-б и КрIIIб. Он стоит выше КрIIIб-в, строк стало
      37. В исходной палитре месторождения есть только составной код, а
      части в образце появились при переносе - теперь есть и то, и другое,
      разрез строится на обеих гранулярностях.
    - Составные тела (конгломераты) в образце красятся серым #969696 -
      тем же, каким плагин помечает неопознанное. Цвет конгломерата из
      цветов его частей не выводится, его ставит человек. Правило
      записано на листе «Как заполнять».
    4.16.0
    - Новый инструмент 4.11 «Образец справочника пластов»: кладёт
      поставляемый шаблон прямо в проект. Раньше справочник лежал файлом
      в каталоге плагина, куда пользователь не ходит, и в 4.01 по ошибке
      подавали первую попавшуюся таблицу.
    - Список справочника в 4.01 и 4.02 ограничен таблицами без геометрии,
      слои карты в него больше не попадают.
    - Из подписей параметров убрано слово «необязательно»: пометку
      квадратными скобками дописывает сам QGIS, и она задваивалась. 17
      подписей в русском интерфейсе и столько же в английском.
    4.15.0
    - Из поставки убрана папка palettes и весь код чтения и записи палитр
      Leapfrog. Источник цвета в разрезах теперь один - справочник пластов,
      палитра из инструментов 4.01 и 4.02 убрана ещё раньше, а её
      машинерия оставалась мёртвым грузом. Правила сопоставления кодов
      (приведение написания, разбор имён поверхностей вида KpII_top)
      сохранены полностью: от смены источника цвета написание кодов в
      данных не изменилось.
    4.14.0
    - В поставку добавлен образец справочника пластов: папка templates,
      файлы plast_reference_vkmks.xlsx и .csv. 36 строк Верхнекамского
      месторождения от покровных отложений до нижней каменной соли, с
      цветами, порядком залегания и телами. Берётся за основу и правится
      под своё месторождение.
    - Руководства RU и EN: разделы про цвет в 4.01 и 4.02 переписаны со
      справочника пластов. Прежние разделы описывали палитру Leapfrog,
      которой в этих инструментах больше нет.
    4.13.0
    - Врезка в 2.16 получила профиль «жёлоб с уклоном к стоку» (приём
      Ивана Иванова из обсуждения водосборов). Постоянная глубина на
      волнистом рельефе даёт дно, которое местами поднимается по ходу
      трассы, и вода переваливает через борт. Жёлоб делает дно монотонно
      падающим в сторону нижнего конца трассы с заданным продольным
      уклоном. По умолчанию профиль прежний, постоянная глубина. Полигоны
      при любом профиле врезаются постоянной глубиной.
    4.12.0
    - 2.09 переименован в «Вершины и ямы» и ищет всегда оба знака: ямы
      находятся тем же алгоритмом на обращённом рельефе. В атрибуты
      добавлено поле kind (peak или pit), у ямы drop это положительная
      глубина. Отметка всегда пишется в Z геометрии (PointZ) - пикеты
      выгружаются в DXF вместе с горизонталями и закрывают плоские шапки
      поверхности на замкнутых горизонталях. Вершинная половина в
      точности совпадает с прежней.
    4.11.1
    - Терминология приведена к одному виду в подсказках, отчёте и
      руководстве: у 2.16 везде «приёмник», жаргонная «затравка» из
      пользовательских текстов убрана. Имена полей не менялись.
    - Руководства RU и EN дополнены разделами о полигонной затравке 2.16,
      значении в Z геометрии 1.04, разборе наггета 1.05 и векторных
      границах по вероятностям 3.01.
    4.11.0
    - Полосы вероятности в 3.01 получили текстовое поле band вида
      «0.25 - 0.5» и готовую категориальную раскраску от зелёного к
      красному по возрастанию вероятности. Раньше легенду приходилось
      строить по одной границе, и категорий выходило больше, чем полос:
      полоса, разбитая рельефом на несколько кусков, добавляла лишнюю
      строку. Теперь категорий ровно столько, сколько полос.
    4.10.1
    - Векторные выходы 3.01 очищены от служебных полей. Слияние слоёв
      дописывало layer и path - имя и URI временного слоя-источника, в
      готовом слое это мусор, класс и так лежит в поле class.
    - Границы полос вероятности переименованы из ELEV_MIN и ELEV_MAX в
      P_MIN и P_MAX и зажаты в диапазон от 0 до 1. Прежние имена пришли из
      машинерии изолиний, где поле всегда отметка, а крайние полосы
      выходили за диапазон и показывали отрицательную вероятность.
    4.10.0
    - В 3.01 появились векторные границы по вероятностям: линии уровней и
      полосы-полигоны между ними. Уровни задаются параметром, по умолчанию
      0.25, 0.5 и 0.75, то есть уверенно нет, спорная полоса и уверенно да.
      Полигон несёт имя класса и сразу раскрашивается категориальным
      отрисовщиком. Оба выхода необязательны и по умолчанию выключены.
    - Границы строятся по каналу вероятностей, а не по карте зон. Карта зон
      хранит только победителя в ячейке, положение границы внутри ячейки в
      ней потеряно, и контур по ней идёт ступенями по краям ячеек.
    - Сглаживание границ - существующие бикубическое сгущение и Чайкин,
      теми же параметрами, что и в 1.04.
    4.9.0
    - Разбор наггета в 1.05. В журнал выводится первый лаг (расстояние,
      число пар, гамма против дисперсии данных) и поимённо самые тяжёлые
      пары внутри него: расстояние, оба значения, вклад и координаты. В
      разреженной сети наггет обычно задают единицы пар близких точек с
      несопоставимыми значениями, и раньше найти их можно было только
      вручную.
    - Предупреждение о негодном подборе вариограммы: жёлтым, когда R²
      ниже 0.1 либо доля наггета выше половины суммарного порога. Обе
      беды тихие, расчёт при них проходит без ошибок и даёт ровное поле
      около среднего.
    4.8.2
    - Переключатель стороны в 1.04 разворачивает теперь и подписи, а не
      одни бергштрихи. Подпись отсчитывает верх текста от направления
      линии, поэтому раньше команда «перевернуть» меняла сторону штрихов,
      а подписи оставались как были. Параметр назван «Сторона
      бергштрихов и подписей».
    - Переворот применяется ровно один раз: разворот линий сам меняет
      знак стороны склона, и повторный переворот вернул бы штрихи на
      прежнее место.
    4.8.1
    - Исправлен флажок «Записать значение в Z геометрии» в 1.04. Слой с
      Z записывался отдельным файлом рядом с выходом, а Processing
      грузил в проект исходный плоский файл, потому что отложенная
      загрузка была зарегистрирована на старый путь. По той же причине
      не вставали имя слоя и стиль. Теперь загрузка перевешивается на
      слой с Z.
    - Там же сохраняется многочастность: изолиния одного уровня
      остаётся одним объектом со всеми ветвями, а не рассыпается на
      отдельные объекты с дублированием атрибутов и подписей.
    4.8.0
    - 2.16 Водосбор теперь принимает не только линии, но и полигоны:
      контур карьера, борта, любой замкнутый приёмник. Полигон
      затравливается всей внутренностью вместе с контуром - внутри
      залитой депрессии направления стока условны, и затравка
      внутренностью снимает зависимость от них, дырки полигона входят в
      затравку тоже. Линейный путь не изменился, старые прогоны
      воспроизводятся. В атрибуты и отчёт добавлена площадь затравки,
      инструмент переименован в «Водосбор линии и контура».
    - Оговорка о границах применимости в 2.15 и 2.16: водосборы строятся
      по топологии рельефа, на плоских поймах, при гидравлических
      перетоках и подпорах результат следует проверять
      гидродинамическим моделированием.
    - 1.04 Изолинии из растра: флажок «Записать значение в Z геометрии».
      Изолиния это линия равного уровня, поэтому Z у всех её вершин один
      и равен уровню. Такой слой при экспорте в DXF доносит высоту в
      АвтоКАД и Кредо без ручного «задать Z». По умолчанию выключен,
      плоский слой остаётся поведением по умолчанию. Имя поля значения и
      этот флажок подняты в списке параметров к самим уровням.
    - Разрез 4.01: полосы опознаются как пласты и межпластья по парам
      поверхностей, подписи берутся каноническими из палитры. Тело без
      цвета в палитре (например, межпластье вне соляной толщи) остаётся
      серым - плагин не выдумывает цвет, а показывает, что не знает его.
      Источник цвета каждой полосы печатается в журнал.
    - Из демо разреза убран старый генератор скважин широкого формата,
      инструмент 4.11 удалён как избыточный.
    4.7.1
    - Чтение палитры Leapfrog переведено на собственный разбор без
      модулей xml. Сканер безопасности каталога считает стандартный
      разборщик уязвимым к раздутым сущностям и внешним ссылкам, а
      defusedxml в поставке QGIS нет. Формат палитры плоский, поэтому
      применяется свой сканер полей Entry: объявления DOCTYPE и ссылки
      на сущности не раскрываются, у входного файла есть предел размера.
      Поведение не изменилось, на настоящих палитрах результат тот же.
      Запрет закрыт тестом, читающим исходники.
    4.7.0
    - Палитра кодов Leapfrog (.lfc) как необязательный вход в 4.01 и 4.02.
      Найденные коды красятся цветами легенды, порядок категорий идёт по
      палитре, коды вне палитры сохраняют прежний детерминированный цвет.
      Поиск терпимый: регистр, хвост роли (_top, _bottom, _кровля,
      _подошва), латинские двойники букв и апострофы, поэтому имя слоя
      «KpII_top» находит код пласта «КрII», а «A'Б_top» находит «АБ».
      Строгие совпадения проверяются первыми. В журнал печатается, сколько
      кодов взято из палитры и каких в ней нет. Плохой файл прогон не
      роняет.
    - Новый инструмент 2.16 «Водосбор линии (канавы)»: площадь водосбора
      нагорной канавы, лотка, кювета. Трасса растеризуется в ячейки, все
      они берутся приёмниками, водосбор это множество ячеек, чей путь
      стока приходит в трассу. Врезка трассы в рельеф вынесена в
      отдельную галочку с глубиной и по умолчанию выключена, так как
      меняет гидрологию. Выход: полигоны с атрибутами и HTML-отчёт.
    - Демо-рельеф 2.10 выдаёт две демо-трассы канав поперёк тальвегов,
      готовые для 2.16.
    - Читатель модели бурения считает разрывы между соседними
      интервалами и печатает их в сводке. Дыра в колонке на чертеже это
      отсутствие строк в таблице интервалов, инструмент ничего не
      додумывает.
    - Из демо разреза 4.10 убран старый генератор скважин широкого
      формата h1...h6: его не ест ни один инструмент, а лишний точечный
      слой перехватывал автоподбор входа collar в 4.02.
    4.6.1
    - Совместимость с Qt6 по проверке каталога: категория-ловушка
      раскраски получала пустой QVariant, теперь берётся NULL из
      qgis.core. Проверка каталога считала это ошибкой и блокировала
      версию. Запрет закрыт тестом, читающим исходники.
    - Из поставки убран служебный кэш pytest. Сканер секретов каталога
      принимал метку кэша за случайную строку с высокой энтропией и
      блокировал версию. Гигиена архива закрыта тестом: служебные папки
      и файлы в поставке недопустимы.
    4.6.0
    - Новый инструмент 2.15 «Отчёт по створу»: морфометрия водосбора от
      точки замыкания на водотоке. Точка притягивается к ячейке
      наибольшей аккумуляции в радиусе, от неё собирается полный
      водосбор и считаются площадь, средняя, минимальная и максимальная
      высота, средний уклон бассейна (Horn), отметка створа, длина
      главного водотока от створа до истока, падение и средний уклон
      водотока в промилле. Главный водоток трассируется вверх по
      наибольшей аккумуляции до ячейки без притоков. Водосборы соседних
      створов на одном водотоке вкладываются друг в друга: каждый створ
      получает свой полный бассейн, а не остаток после вышележащего.
      Выход: полигоны с атрибутами, HTML-отчёт по каждому створу,
      ключевые цифры в журнале. Новых зависимостей нет.
    - Демо-рельеф 2.10 выдаёт три точки створов у самых сильных
      тальвегов, разнесённых по гриду и нарочно сдвинутых в сторону от
      водотока: полный демо-цикл для 2.15 в два шага и наглядная
      проверка притяжки. Точки детерминированы зерном рельефа.
    - Демо-рельеф без заданного охвата ложится к слоям проекта, а не в
      условное место. В местных системах координат условное место
      уводило демо за десятки километров от рабочих данных.
    - Исправлено падение QGIS при загрузке нескольких выходных слоёв за
      один прогон. Постпроцессор дерева слоёв раздавался общим
      экземпляром, а QGIS забирает такой объект во владение и удаляет
      после обработки слоя: второй слой получал уже удалённый объект.
      Теперь на каждый слой создаётся свой экземпляр, у векторных
      выходов лишний постпроцессор не назначается вовсе.
    4.5.0
    - 4.02: обрезка по чертежу вместо линий кровли и подошвы. Один
      необязательный вход принимает полигоны полос из 4.01, колонки
      режутся по верхней и нижней огибающей полос в своей позиции -
      скважины не вылезают за чертёж, без промежуточного прогона 4.04.
      Четыре параметра линий из 4.4.0 убраны. Рамка zmin и zmax осталась
      страховкой на торцах и без чертежа. Допуск действует.
    4.4.0
    - 4.02: обрезка колонок линиями чертежа. Необязательные входы кровля
      и подошва принимают линии из 4.04 «Пересечение поверхностей с
      разрезом»: каждая колонка зажимается высотой линии в своей позиции,
      как срез по верхнему пласту, а не общей рамкой. Колонка за краем
      линии этой линией не режется. Если слой несёт несколько
      поверхностей, нужная выбирается именем поля surface в
      дополнительных параметрах. Допуск обрезки действует и на линии.
      Рамка zmin и zmax остаётся страховкой поверх.
    4.3.0
    - 4.02: обрезка колонок по рамке чертежа zmin и zmax из определения,
      включена по умолчанию. Интервал на кромке подрезается, интервал
      целиком за рамкой пропускается, ствол и подпись зажимаются рамкой,
      скважина целиком за рамкой выпадает из чертежа. Допуск в
      дополнительных параметрах расширяет рамку, галочка выключает
      обрезку. В атрибутах ztop и zbot остаются настоящие отметки,
      обрезается только геометрия. Сводка обрезки печатается по каждому
      разрезу. Для определений прежних версий без zmin и zmax поведение
      прежнее, без обрезки.
    4.2.0
    - 4.02: подпись устья на чертеже берётся из поля number слоя collar
      (синонимы name, label), а без него из hole_id, как раньше. Поле
      можно указать в дополнительных параметрах. hole_id остаётся в
      атрибутах для стыковки, подпись едет отдельной колонкой label в
      слоях стволов и подписей.
    4.1.1
    - Исправление 4.02: устья переводятся в систему координат определения
      разреза при чтении. Раньше слой collar в другой рабочей системе давал
      «вне коридора» для всех скважин, хотя на карте слои лежали вместе:
      канва преобразует координаты сама, а расчёт сравнивал сырые числа.
    - Диагностика на экран по протоколу удалённой машины: система координат
      устьев и определения, первое устье после перевода, а при пустом
      коридоре ближайшее устье в единицах карты. По этим числам с одного
      скриншота видно, узок коридор или слои живут в разных системах.
    4.1.0
    - Полосы пластов в 4.01 красятся тем же механизмом, что скважины:
      категория на пласт по имени кровли, детерминированный цвет, тонкий
      чёрный контур, легенда в дереве слоёв. Пласт, названный тем же кодом,
      что в таблице интервалов, совпадает по цвету с колонками скважин.
      Колонки скважин получили тонкий чёрный контур, вместе с полосами
      читаются как один чертёж.
    - Новая модель данных бурения collar и interval по образцу горных
      пакетов (Leapfrog, Micromine, Datamine, Surpac): устья точками
      (hole_id, z, eoh), интервалы таблицей (hole_id, from, to, code),
      глубины по стволу от устья, вниз положительные. Прочие колонки
      таблицы интервалов едут в атрибуты как есть.
    - Инструмент 4.02 «Скважины на разрезе (модель бурения)» написан
      заново: пакетный по всем разрезам определения, поля обеих таблиц
      находит сам по контрактным именам и синонимам, глубины переводит в
      отметки вычитанием из отметки устья. Читатель терпимый: пустые
      глубины пропускаются, перепутанные from и to переставляются,
      перехлёсты и интервалы за забоем рисуются как есть, всё пропущенное
      считается и выводится сводкой в журнал.
    - Слой интервалов выходит раскрашенным по кодам с легендой «код -
      цвет»: категория на каждый код в порядке первого появления сверху
      вниз, цвет детерминирован от самого кода и не меняется между
      прогонами и машинами. Серая категория «прочее» ловит всё
      несопоставившееся, ничего не исчезает молча. Стволы и подписи
      устий оформляются сразу.
    - Прежний инструмент 4.02 на широких полях h1...h6 удалён. Скважины
      такого вида остаются в демо как задел под будущий конвертер.
    - Демо 4.10 дополнительно выдаёт пару collar и interval вдоль всех
      трёх линий: два условных рудничных поля с повторяющимися номерами
      (зачем нужен составной hole_id), неглубокие скважины, содержание
      kcl на промышленных интервалах, устья PointZ с прицелом на 3D.
    - 4.02 запоминает выбранные слои и коридор, следующий запуск в том же
      проекте открывается с уже подставленными входами.
    - Необязательный 3D-выход 4.02: интервалы LineStringZ в реальных
      координатах, глубина в Z напрямую, для модуля Isoliner 3D.
    4.0.5
    - Исправлено: крупные водоёмы не приходили из OpenStreetMap (2.02). В
      запросе спрашивались только одиночные контуры way, а озёра,
      водохранилища и широкие реки в OSM почти всегда нарисованы
      отношениями-мультиполигонами. Теперь отношения запрашиваются, а их
      внешняя граница сшивается из кусков в замкнутое кольцо. Внутренние
      кольца (острова) пока пропускаются.
    - Подписи изолиний ставятся на линию и разрывают её, как на топокарте,
      а не над линией.
    - Подписи изолиний теперь без приставки единиц, только отметка, как на
      топокарте.
    - Исправлено: подписи изолиний не рисовались вовсе. В выражении подписи
      строки склеивались знаком «и», а в QGIS оператор склейки это две
      вертикальные черты. Выражение не разбиралось, правило подсвечивалось
      красным. Держалось незамеченным, потому что у депрессионного стиля
      подписей не было, а на карте работали настройки слоя пользователя.
    - Исправлено, главное про подписи: разворот линий не давал никакого
      эффекта, потому что в настройках подписей стояло «никогда не
      показывать перевёрнутые», и QGIS сам доворачивал текст ради
      читаемости. Топографическая подпись по определению бывает
      перевёрнутой: на склоне, обращённом на юг, цифра читается вверх
      ногами. Теперь в обоих стилях изолиний показ перевёрнутых подписей
      разрешён, а депрессионный стиль получил свои подписи, которых у него
      не было вовсе.
    - Исправлено: топографические подписи вставали в сторону убывания.
      Предполагалось, что верх подписи смотрит туда, где высокая сторона
      слева от направления линии. Проверка на QGIS 4.0.3 показала
      обратное, условие развёрнуто. Поле переименовано в up_side, потому
      что прежнее имя up_left стало неверным по смыслу.
    - Исправлено, главное: бергштрихи не слушали сторону склона вовсе. В
      файле стиля смещение было задано выражением с «собакой» перед
      именем поля, а в QGIS это означает переменную, а не поле слоя.
      Выражение молча давало NULL, и штрихи всегда брали запасное
      постоянное смещение, то есть смотрели в одну сторону независимо от
      рельефа. Теперь стиль ссылается на поле dn_sign, и сторона считается
      по данным.
    - Исправлено: бергштрихи ложились вверх по склону. Код переворачивал
      сторону смещения по номеру версии QGIS, считая что в четвёртой она
      изменилась. Проверка на QGIS 4.0.3 показала обратное, переворот
      убран. В дополнительных параметрах 1.04 появился переключатель
      «Сторона бергштрихов» на случай других сборок, а выбранная сторона
      и версия печатаются в журнал.
    - Исправлено: демо-рельеф (2.10) клался в зашитое условное место, и в
      местных системах координат, например рудничных, оказывался далеко
      от рабочих данных. Появился необязательный параметр «Куда положить
      (охват)»: если он задан, демо ложится туда, а размер грида
      считается от охвата и размера ячейки. Без охвата поведение
      прежнее, но инструмент предупреждает об этом в журнале.
    - Новый инструмент 2.14 «Убрать ступени (сглаживание с ограничением)».
      Лечит террасинг, не сдвигая горизонтали: поверхность сглаживается
      итеративно, но каждой точке запрещено уходить от исходного значения
      дальше заданной доли сечения, по умолчанию половины. Это ровно
      ошибка квантования, поэтому метод не выдумывает форм тоньше
      исходного сечения и не может перекинуть точку через горизонталь.
      На эталоне индекс притяжения падает с 5.00 до 1.13, а ошибка
      против истинной поверхности с 1.25 м до 0.12 м.
    - У 2.14 отчёт HTML до и после: таблица чисел, две гистограммы фазы
      рядом и разбор. Индекс притяжения считается до и после лечения и
      печатается на экран, поэтому правка самопроверяемая.
    - Вердикт 2.13 при найденном террасинге называет средство лечения.
    - Группа переименована в «2. Топография: диагностика и правка», раз в
      ней теперь и проверка, и исправление.
    - Расход памяти диагностики и сглаживания снижен вдвое, скорость
      выросла втрое и вшестеро. Счёт переведён на float32 с
      предварительным центрированием массива, буферы переиспользуются.
      На матрице в 16.5 млн ячеек диагностика занимала 1.45 ГБ и 6.4
      секунды, стало 776 МБ и 2.3 секунды, сглаживание занимало 1.9 ГБ и
      55 секунд, стало 869 МБ и 6.9 секунды. Результаты не изменились.
      Центрирование на результат не влияет, производные не зависят от
      постоянного слагаемого.

    4.0.4
    - Новый инструмент 2.13 «Диагностика террасинга ЦМР»: ищет ступени на
      склоне, которыми оборачивается построение рельефа по горизонталям.
      Два независимых признака - растр вертикальной кривизны (на нём
      террасинг виден глазами) и притяжение отметок к уровням числом.
      Около единицы признаков нет, два и выше террасинг. Отчёт HTML с
      гистограммой фазы.
    - Инструмент 2.10 «Демо-рельеф» получил флажок «Овражно-балочная
      сеть»: тальвеги с крутыми бортами и отвершками. Узкий врез между
      соседними горизонталями - самое тяжёлое место для интерполяции,
      поэтому такой рельеф нужен как проверочный набор для 2.11 и 2.12.
    - Инструмент 1.04 «Изолинии из растра» получил флажок «Подписи
      по-топографски»: линии разворачиваются так, чтобы высокая сторона
      склона была слева, и верх подписи смотрит вверх по склону, как на
      топокарте. Поворот текста задавать не нужно, стиль прежний. В слое
      остаётся поле up_left.
    - Шпаргалка по проверке рельефа на двух языках в manual: полный
      прогон на демо-данных за десять минут, что означают числа и куда
      смотреть, когда они плохие.
    - Новый инструмент 2.12 «Невязка горизонталей против ЦМР»: измеряет,
      насколько построенный рельеф воспроизводит исходные горизонтали.
      Смещение, разброс, медиана и максимум модуля, доля точек мимо
      больше чем на половину сечения рельефа. Сечение определяется по
      набору отметок. На выходе точечный слой невязок и отчёт HTML с
      гистограммой, разбросом по отметкам и разбором чисел.
    - Новый инструмент 2.11 «Разделить горизонтали для проверки»: делит
      набор по отметкам, каждая N-я уходит в проверочный набор целиком.
      Крайние отметки всегда остаются в построении. Оба выхода несут поле
      hold, и 2.12 узнаёт его сам, печатая отдельно воспроизведение входа
      и предсказание на отложенных горизонталях. Невязка на тех же
      горизонталях, что подавались в построение, измеряет воспроизведение
      входа, а не точность предсказания, и инструмент об этом
      предупреждает.
    - Новый инструмент 2.13 «Диагностика террасинга ЦМР»: ищет ступени
      на склонах, которыми болеет рельеф, построенный по горизонталям.
      Два независимых признака. Растр вертикальной кривизны, на котором
      террасинг виден глазами полосами по рисунку горизонталей. И
      притяжение отметок к уровням: у здоровой поверхности отношение
      около единицы, полтора это повод присмотреться, два и выше
      означает террасинг. Отчёт HTML с гистограммой фазы.
    - Инструмент 2.10 «Демо-рельеф» получил флажок «Овражно-балочная
      сеть»: врезает тальвеги с крутыми бортами и отвершками под острым
      углом. Это самая тяжёлая проверка для построения рельефа по
      горизонталям, узкий врез между соседними горизонталями срезается.
      Проверочные данные теперь едут в поставке и воспроизводимы.
    - Исправлено: при одновременно включённых депрессионном стиле и
      топографических подписях бергштрихи у части горизонталей ложились
      вверх по склону. Сторона склона вычислялась до разворота линий, а
      разворот меняет местами лево и право. Теперь разворот идёт первым.
    - Расчёт валидации вынесен в отдельный модуль validate_core: чистая
      математика без QGIS, с безголовыми тестами.
    - Инструменты проверки вынесены в отдельную группу «2. Топография:
      диагностика». Подгрупп в Processing нет, поэтому ветка сделана
      именем группы, которое встаёт сразу за топографией. Нумерация
      сквозная, номера 2.11, 2.12 и 2.13 не менялись. Демо-генератор
      снова последний в рабочей группе.
    - В индекс притяжения к уровням (2.13) больше не идут ячейки с
      околонулевым уклоном. Порог задаётся долей сечения. Без отсева
      водоём перекашивал статистику: на матрице, где гладь занимала
      44.5 процента площади, индекс давал 0.50 вместо 0.97.
    - Новое в 1.04: предупреждение о плоских уровнях. Если уровень
      сечения попадает в площадку с околонулевым уклоном, в журнал
      уходят уровень, число задетых ячеек и доля данных. Изолиния там
      рассыпается на мелкие кольца и выглядит утолщённой.
    - Новое в 1.04: параметр «Уверенность горизонталей». Перепад высот
      на ячейку сравнивается с долей сечения. Три положения: не считать,
      только поля drop_min и drop_mean, поля и разрыв на подозрительных
      участках. Рвутся только серии от трёх слабых вершин подряд, куски
      делят граничную вершину. Ничего не удаляется, слабое помечается
      полем lowconf. По умолчанию выключено.
    - Флажок топографических подписей в 1.04 переименован в
      «Топографические подписи».
    - Шпаргалка по проверке рельефа на двух языках в manual.

    4.0.3
    - Расчёт разреза вынесен в отдельный модуль section_core: чистая
      математика и геометрия, без QGIS и Qt. Инструмент 4.01 «Разрез по
      линии» теперь только перекладывает результат в слои. Поведение
      сверено с прошлой версией на случайных сценах, расхождений нет.
    - Исправлена экранная диагностика разреза. Из-за обращения к системе
      координат линии до её определения весь блок диагностики молча не
      печатался, поэтому в панели «Журнал» не было ни СК, ни числа точек,
      ни предупреждения о том, что все пробы высот пустые. Теперь
      печатается.
    - Исправлен порядок слоёв в дереве для разреза и для генератора
      примера. Порядок загрузки выходов в Processing не определён, из-за
      чего шесть поверхностей примера ложились в дерево вперемешку. Так
      как 4.01 по умолчанию читает порядок поверхностей из дерева, пласты
      строились между не теми парами и на чертеже вместо пяти пластов
      оставалось два. Теперь порядок задаётся явно и восстанавливается
      после загрузки каждого слоя. Перестановка вставляет копии узлов до
      удаления оригиналов, иначе реестровый мост QGIS счёл бы слои
      исчезнувшими из дерева и удалил бы их из проекта.
    - Генератор примера выдаёт три линии разрезов вместо одной, с именами
      в поле name. Разрез по линии по-прежнему строится по первой,
      остальные пригодятся для пакетной генерации.
    - 4.01 «Разрез по линии» строит разрез по каждой линии слоя. Все
      разрезы попадают в один комплект слоёв и различаются полями sec и
      sec_id, поэтому подписи и фильтры делаются выражением по полю, а
      стили не назначаются заново. Имя берётся из поля линии, если оно
      задано. Работает и выборка «только выделенные объекты».
    - Раскладка нескольких разрезов в общей чертёжной системе координат:
      стопкой, в ряд или сеткой. Шаг решётки берётся от самого крупного
      габарита плюс зазор, поэтому чертежи не пересекаются по построению.
      Вертикальный масштаб один на весь прогон, иначе разрезы были бы
      несопоставимы. Забор 3D раскладкой не смещается, он остаётся в
      реальных координатах.
    - Добавлен режим вертикального масштаба «отношение масштабов Г:В
      (1:N)», привычная для чертежа запись. Есть во всех инструментах
      разреза, где задаётся масштаб.
    - Слой определения разреза несёт имя, номер и смещение раскладки.
      Инструменты 4.04 «Пересечение поверхностей», 4.05 «Пересечение
      векторов» и 4.06 «Пересечение TIN» обрабатывают все разрезы слоя
      определения, кладут результат в свой слот раскладки и переносят имя
      разреза в поля sec и sec_id. Инструменты 4.02, 4.03, 4.07 и 4.08
      пока работают по одному разрезу, их переведём отдельно.
    - Слои определения от прежних версий читаются по-старому: новых полей
      в них нет, имя выходит пустым, смещение нулевым, поведение прежнее.
    - Тесты разреза работают с настоящим кодом плагина, а не с копиями
      помощников. Добавлен набор тестов ядра. Исправлена точка входа в
      тестах разреза: вызов запуска стоял в середине файла, и часть
      классов не выполнялась.

    4.0.2
    - Исправлен вывод разреза (группа 4): слои чертежа (разрез, состав
      пласта, скважины, пересечения, развёртка ствола) создавались с
      пустой СК, подхватывали СК проекта и на реальных данных в местных
      СК уходили за кадр карты - объекты с атрибутами создавались, но на
      карте было пусто, изредка рисуясь при случайном совпадении. Теперь
      чертёж получает инженерную (местную) СК, которую QGIS не
      перепроецирует на подложку, и рисуется независимо от СК проекта.
    - 4.01 «Разрез по линии»: порядок поверхностей по умолчанию берётся
      из дерева слоёв проекта (сверху вниз), совпадая с панелью слоёв.
      Ручной порядок отметками в списке остаётся - снять галочку
      «Порядок поверхностей из дерева слоёв проекта».
    - Разрез и загрузка ЦМР пишут в панель «Журнал» окна инструмента
      компактную диагностику (СК, origin, порядок осей, доля валидных
      проб) для проверки на машинах без доступа к файлам. Вырожденные
      полигоны чертежа (пустые или нулевой площади) больше не попадают в
      слой как объекты без видимой геометрии, а пропускаются с отметкой в
      журнале.
    4.0.1
    - Исправлена геопривязка ЦМР в 2.01 для СК с осями в порядке
      север-восток (GSK-2011 и другие Гаусс-Крюгер, Крассовский). Раньше
      при выборе такой целевой СК растр записывался с переставленными
      X и Y, уезжал в зеркальную точку, и «Приблизить к слою» вело в
      пустоту. UTM этим не страдал. Габарит рамки теперь берётся по
      периметру, а не по четырём углам (страховка для края зоны и
      больших рамок).
    4.0.0
    - Трёхмерная часть вынесена из плагина в отдельный модуль Isoliner 3D
      (готовится к публикации): 3D-просмотр поверхностей, группа
      «5. Пласт и блочная модель» (инструменты 5.01-5.07, включая экспорт
      мешей 2DM и полиэдры) и встроенные библиотеки pyqtgraph/PyOpenGL.
      Пакет стал легче примерно на порядок. Кому нужна прежняя
      функциональность целиком - версия 3.2.0 остаётся в каталоге.
    - Группа «Фрактальный анализ» перенумерована из шестой в пятую
      (5.01-5.05 вместо 6.01-6.05). Внутренние идентификаторы группы и
      инструментов не менялись, модели пользователей работают без правок.
    - Исправлена загрузка GEDTM30 в 2.01: translate -unscale теперь
      читает только окно по рамке (с полем), а не весь глобальный COG.
      Раньше инструмент падал по свободному месту на диске (GDAL
      требовал терабайты под развёрнутую планету). Сетевые и оконные
      ошибки COG показываются внятным сообщением.
    - 2.01 «Загрузка ЦМР»: в дополнительные параметры выведены три
      настройки сглаживания FPDEMS (окно нормалей, порог различия,
      число проходов) - те же, что в 2.04. Раньше сглаживание в 2.01
      работало на скрытых значениях по умолчанию. Поведение по
      умолчанию не изменилось.
    - Руководство: скриншоты диалоговых окон заменены таблицами
      параметров единого формата. У всех инструментов теперь сплошной
      параметрический справочник, включая группу «Топография» и
      инструменты разреза, где таблиц не было. Демо-генераторы ссылаются
      на приложение с полями выходных слоёв. PDF стал легче примерно
      вдвое, обзорный вид панели инструментов сохранён.
    - Остальные группы (кригинг, топография, разрезы, плотность) не
      изменились, номера и идентификаторы инструментов прежние.
    3.2.0
    - Закрыты оба замечания Qt6-проверки каталога: обращения к enum
      переведены на полный путь через промежуточный класс
      (QgsColorRampShader.Type, Qgis.MessageLevel), совместимо с
      QGIS 3 и 4.
    - Инструмент 2.03 Topo2Raster научился переменному урезу воды. Высота
      уреза выбирается по трём приоритетам на каждый объект: у полигона
      с трёхмерными вершинами урез интерполируется по их отметкам и
      наклоняется вдоль русла (падение уровня реки), у полигона с
      отметкой в поле держится плоскостью, без того и другого берётся по
      минимуму берега. Разнотипные объекты в одном слое разбираются
      каждый своей веткой.
    - Инструмент 2.04 переработан в «Подготовку рельефа»: помимо
      заполнения понижений добавлено сглаживание рельефа FPDEMS (метод
      Линдсея и др. 2019), сохраняющее бровки, стенки террас и берега
      рек, в отличие от среднего и гауссова фильтров. Обе модификации
      включаются независимыми флажками. Та же галочка сглаживания
      добавлена в загрузку ЦМР (2.01).
    3.1.1
    - Исправлен масштаб высот GEDTM30: значения были вдесятеро меньше
      реальных. COG хранит высоту целыми со scale-метаданными, теперь
      источник читается через translate с флагом unscale, затем
      перепроецируется. Высоты в настоящих метрах.
    3.1.0
    - Инструмент 2.01 получил выбор источника рельефа. Помимо Copernicus
      GLO-30 (модель поверхности, DSM) добавлен GEDTM30 - глобальная модель
      рельефа (DTM, CC BY 4.0) от OpenGeoHub: лес и постройки сняты машинным
      обучением по ICESat-2 и GEDI. Под пологом леса GEDTM30 заметно точнее
      GLO-30, что важно для лесистых территорий. Единый глобальный COG,
      без регистрации и ключей.
    3.0.4
    - Совместимость со сканером безопасности каталога plugins.qgis.org:
      узкие типы исключений вместо широкого except с тихим pass/continue
      в инструментах группы Топография, диагностика уходит в журнал Isoliner.
    3.0.3
    - Исправлен сбой Topo2Raster на QGIS 4 при одиночных геометриях
      (Point geometry cannot be converted to a multipoint): точки, линии
      и полигоны читаются с фолбэком на одиночный тип.
    3.0.2
    - Выходные слои топографии добавляются в дерево свёрнутыми: длинные
      легенды растров не распахиваются на всю панель слоёв.
    3.0.1
    - Обкатка на QGIS 4: инструменты 2.01 и 2.10 принимают пользовательские
      метрические СК без кода EPSG (локальные шахтные сетки) - целевая СК
      уходит в перепроецирование строкой WKT.
    - Все выходные слои группы "2. Топография" складываются в группу
      "Топография" дерева слоёв (QGIS 3.24 и новее, на старых сборках
      слои добавляются как раньше).
    - В справку каждого инструмента группы добавлено описание выходных
      файлов: формат, тип, nodata, поля.
    - В руководство добавлен урок "Topo2Raster: рельеф из горизонталей,
      шаг за шагом" (приложение с уроками, RU и EN).
    3.0.0
    - Большой релиз: новая группа "2. Топография", десять инструментов работы
      с рельефом из открытых данных на чистом NumPy, без внешних зависимостей.
    - 2.01 Загрузка ЦМР по рамке: Copernicus DEM GLO-30 из открытого хранилища
      без регистрации и ключей, мозаика без швов, перепроецирование в
      метрическую СК, гидрокоррекция флажком.
    - 2.02 Загрузка топоосновы по рамке: водотоки OSM (готовые тальвеги),
      водоёмы, вершины с отметками, обрывы и насыпи, береговая линия.
    - 2.03 Topo2Raster: рельеф из точек, изолиний, тальвегов, обрывов и озёр
      мультисеточной интерполяцией по мотивам ANUDEM. Мембранный каркас
      плюс полировка минимальной кривизны, дренаж вдоль тальвегов.
    - 2.04 Заполнение понижений методом Планшона-Дарбу с настраиваемым epsilon.
    - 2.05 Сток и аккумуляция D8 (коды ArcGIS, векторизованный обход),
      2.06 Речная сеть с порядком Стралера, 2.07 Бассейны и водоразделы,
      2.08 Уклон и экспозиция Horn 3x3, 2.09 Вершины, 2.10 Демо-рельеф.
    - Ярлыки прежних групп сдвинуты: дополнительные инструменты теперь
      группа 3, разрез 4, пласт 5, фракталы 6. Идентификаторы инструментов
      не менялись, сохранённые модели Processing продолжают работать.
    - Руководство (RU и EN) дополнено главой о топографии с иллюстрациями
      и перенумеровано под новые группы.
    2.66.2
    - Окно «Карта плотности»: изолинии теперь строятся с шагом, подобранным по
      диапазону плотности (раньше при мелких значениях линий не выходило).
      Слой эффективной сигмы одевается псевдоцветом, при постоянной точности
      выводится понятное сообщение вместо серого растра.
    2.66.1
    - Кнопка «Журнал» убрана с панели инструментов: журнал открывается из меню
      и из окна «О плагине». На панели остались карта плотности, 3D-просмотр и
      «О плагине».
    2.66.0
    - Новое окно «Карта плотности» на панели Isoliner: живой предпросмотр
      инструмента 2.07 на грубой сетке (сигма и ячейка меняют картинку сразу),
      постоянно видимый инвариант массы, кнопка «Демо». Полный расчёт идёт тем
      же алгоритмом 2.07, результат кладётся на карту одетым (псевдоцвет с
      прозрачными нулями, изолинии плотности, слой эффективной сигмы).
    2.65.4
    - Совместимость с QGIS 4 (Qt6) доведена до конца: устранены замечания в
      сторонней библиотеке pyqtgraph (импорты через importlib, вызов exec
      через getattr). Поведение не менялось.
    2.65.3
    - Совместимость с QGIS 4 (Qt6): перечисления записаны полными именами
      (QgsProcessingParameterNumber.Type.Double, QgsProcessing.SourceType.*,
      QgsWkbTypes.Type.* и др.). Форма работает и в QGIS 3.16+, и в QGIS 4.
      Логика не менялась.
    2.65.2
    - Проверка безопасности каталога QGIS: ложные срабатывания bandit (assert,
      try/except/pass, импорты в сторонних библиотеках) помечены # nosec.
      Логика не менялась. Для загрузки в каталог собирается отдельный архив
      без папки tests.
    2.65.1
    - Кнопка «Журнал» вынесена на панель инструментов и в окно «О плагине»
      (с иконкой), открывает isoliner.log.
    2.65.0
    - Журнал работы: файл isoliner.log рядом с профилем QGIS. Заголовок сеанса
      (версии плагина, QGIS, NumPy, GDAL), имя инструмента, параметры, время,
      при сбое трейсбек. Открывается через меню и панель инструментов.
    - Панель инструментов Isoliner с кнопками 3D-просмотра и «О плагине»,
      добавлена иконка 3D.
    2.64.1
    - Руководство: добавлено пошаговое приложение «Плотность переменной опоры»
      (2.08 демо -> 2.07 по каждому типу -> дописывание -> эффективная сигма, с
      разбором параметров) и поля демо-слоёв 2.08 в приложение «Поля
      демо-слоёв».
    2.64.0
    - Новые инструменты 2.07 «Плотность по замерам (переменная опора)» и 2.08
      демо к ней. Замер размазывается по носителю (точка+сигма, линия-коридор,
      полигон), масса сохраняется (инвариант в логе), выход трёхканальный для
      дописывания и карты эффективной сигмы, дазиметрия для полигонов.
      Попутно: поправлены устаревшие ссылки на фрактальные инструменты в
      справке демо 5.05.
    2.63.5
    - Руководство: заголовок 1.10 не попадал в оглавление PDF из-за пропущенной
      пустой строки перед ним. Исправлено, закладка восстановлена.
    2.63.4
    - Врезка «кригинг или минимальная кривизна» в 1.11 усилена примером
      оседаний: мульду сдвижения кригинг раскатывает в ленту, минимальная
      кривизна восстанавливает воронку.
    2.63.3
    - Исправлен сбой кригинга при отсутствующем поле Z: вместо KeyError теперь
      понятное сообщение с просьбой выбрать поле значения. Добавлено
      приложение «Поля демо-слоёв» в руководство (все генераторы, с единицами).
    2.63.2
    - Адаптивные имена слоёв при генерации: 1.11 называет слой по режиму,
      демо-скважины разреза отличаются по имени от 1.10. Логика не менялась.
    2.63.1
    - Оседания (1.11): ограничены двумя метрами, единый знак на выбор (вниз
      или величина), строгие нули по краям (шум гаснет к краю мульды).
    2.63.0
    - Инструмент 1.11 расширен: два режима - электроразведка (добавлены
      ВП, отметка z, истинное значение rho_true) и оседания (мульда по
      турам: tour, settle, settle_true). Аномалия - компактное пятно, а не
      полоса, профили не синхронны.
    2.62.0
    - Новый инструмент 1.11 «Создать пример геофизических профилей (демо)»:
      параллельные профили электроразведки с пикетами, кажущимся
      сопротивлением ρк (Ом·м) и потенциалом ЕП (мВ). Заложена низкоомная
      аномалия (обводнение/замещение) для демонстрации интерполяции и
      изолиний. Поля profile, picket_m, pk, rho_k, sp.
    2.61.0
    - Фрактальные инструменты вынесены в отдельную группу «5. Фрактальный
      анализ» (было в группе 2). Перенумерованы 5.01-5.05: размерность,
      box-counting, линии и границы, Минковский, демо. Логика не менялась.
      Руководство: фрактальные разделы переписаны и перенесены в группу 5.
    2.60.0
    - Веса декластеризации (поле wt из 1.01) расширены ещё на три инструмента.
      Кросс-валидации 1.07 и 1.08: метрики ME/MAE/RMSE/MSDR/R считаются
      взвешенно, плотный куст не доминирует в оценке качества. Индикаторный
      кригинг 2.01: индикатор класса кригуется к декластеризованной доле, а не
      к нулю. Без весов поведение всех трёх прежнее.
    2.59.0
    - Веса декластеризации (поле wt из 1.01) теперь принимают вариограммные
      инструменты 1.05 «Вариограмма» и 1.06 «Вариограммная карта»: пара
      берётся с весом произведения весов концов, скопления не раздувают
      ближние лаги. Счётчик пар остаётся сырым, γ считается взвешенно.
    2.58.1
    - Группа 1 упорядочена и переведена на двузначную нумерацию (1.01…1.10)
      для правильной сортировки в тулбоксе. Порядок по смыслу: подготовка
      данных, интерполяция, изолинии, вариограммы, кросс-валидации рядом,
      сервис и демо в конце. Логика инструментов не менялась.
    2.58.0
    - Новый инструмент 1.0 «Декластеризация (веса)»: ячеистая
      декластеризация (порт GSLIB declus), веса обратно локальной плотности
      и представительное декластеризованное среднее для подсчёта запасов и
      среднего простого кригинга. Автоподбор размера ячейки или ручной,
      слой точек с полем wt и HTML-отчёт.
    - Гауссова симуляция (2.06): необязательное поле весов декластеризации -
      гистограмма (нормально-балльное преобразование) строится взвешенно.
    2.57.0
    - HTML-отчёт кросс-валидации (инструменты 1.5 и 1.9): на графике оценка/
      факт теперь две линии - серая диагональ 1:1 (идеал) и синяя линия
      регрессии Best Fit. В метрики добавлены наклон, сдвиг и угол Best Fit -
      индикатор условного смещения по диапазону (наклон меньше 1 - занижение
      высоких значений, регрессия к среднему у сглаживающих методов).
    2.56.1
    - Из встроенной копии pyqtgraph убраны неиспользуемые подпакеты (console,
      flowchart, multiprocess, exporters, configfile). 3D-просмотр использует
      только pyqtgraph.opengl. Снимает предупреждения сканера безопасности
      plugins.qgis.org (eval, exec, pickle, subprocess, xml) и уменьшает вес.
    2.56.0
    - Новый инструмент 1.9 «Кросс-валидация метода (LOO)»: скользящий
      контроль для кригинга и минимальной кривизны по образцу Surfer.
      Случайная выборка N точек, фильтр области (охват и Z), буфер
      исключения соседей по X/Y. Выходы - слой ошибок и HTML-отчёт (график
      оценка/факт, гистограмма, метрики ME/MAE/RMSE/R, для кригинга MSDR).
    2.55.0
    - Новый инструмент 1.8 «Минимальная кривизна (точки → растр)»:
      гридирование бигармонией с натяжением (SOR обходом девятью цветами),
      детерминированная альтернатива кригингу без вариограммы. Натяжение,
      граничное натяжение, анизотропия, порог невязки и лимит итераций.
      Часто применяется для карт геофизических полей. Faults/breaklines -
      задел на будущее.
    2.54.0
    - 4.07: отдельный пример «Складчатый пласт» убран, складчатость осталась
      в свите. Свита теперь грузится отдельными слоями по пласту (Свита:
      пласт k) для управления видимостью, складки положе и глаже.
    2.53.0
    - 4.07: свита теперь из складчатых пластов, каждый пласт отдельным
      объектом (поле bed) и своим цветом в 3D. Имя выходного слоя
      подстраивается под пример (Пласт, Складчатый пласт, Свита x3, Куб,
      Тетраэдр).
    - 3D-просмотр: каждый объект тела красится отдельно (свита разноцветная);
      кадрирование учитывает преувеличенную высоту, чтобы высокое тело при
      большом вертикальном преувеличении не выходило за кадр.
    2.52.0
    - 3D-просмотр: контур сечения тел плоскостью разреза. Где вертикальная
      штора вдоль линии режет тело, рисуется яркий след (как по
      поверхностям).
    - 3D-просмотр: скважины стволами-цилиндрами, интервалы между отметками
      окрашены по стратиграфическому положению (литология).
    2.51.0
    - 4.07: два новых примера - «Складчатый пласт» (кровля-фолд-трейн из
      антиклиналей и синклиналей) и «Свита» (стопка водонепроницаемых
      пластов, число пластов задаётся). Оба смотрятся во вкладке «Тела».
    2.50.1
    - 3D-просмотр: исправлен сбой при показе тел и поверхностей без
      плоскости разреза (локальная переменная затеняла функцию перевода).
    - 3D-просмотр: опрос сцены кликом больше не пишет ошибку в журнал на
      новых сборках pyqtgraph (QGIS 4). Выбор своего цвета слоя не падает
      на пустом источнике растра.
    2.50.0
    - 4.07: размещение и размер примера берутся из охвата (окна вида),
      как у остальных генераторов. Добавлены параметры «Мощность» и
      «Отметка залегания (подошва)», диапазон Z печатается в журнал.
    - 3D-просмотр поверхностей: новая вкладка «Тела». Показывает
      полигональные слои с Z (полиэдр, TIN, MultiPolygon Z) объёмными
      телами рядом с поверхностями и телами пластов.
    2.49.0
    - Новый инструмент «4.07 Создать пример полиэдра (бета)»: демонстрация
      полиэдральной поверхности (тело пласта, куб, тетраэдр) как нативный
      PolyhedralSurface Z (QGIS 3.40 и новее) или TIN Z. На более старых
      сборках вывод деградирует до MultiPolygon Z с предупреждением.
    - Новый модуль polyhedral.py (чистый NumPy, сборка WKT и аудит
      замкнутости оболочки), headless-тесты.
    2.48.5
    - Группа «4. Пласт и блочная модель» вышла из беты (4.01-4.04),
      конвейер списания протестирован на демо.
    - Руководство: новое приложение «Уроки и самопроверка» с пошаговым
      тестом списания запасов (домены, деление колонки, разность). Раздел
      будет пополняться уроками и тестами.
    2.48.4
    - 4.03: плотность руды добавлена отдельным полем dens в блочную
      модель (ore_t = vol * dens поячеечно).
    - Выбор канала растра переведён на выпадающие списки и в оставшихся
      местах: канал плотности (4.03), каналы оценки и ошибки (2.03).
    2.48.3
    - [BUG-FIX] Параметр «Канал плотности» по ошибке регистрировался в
      калькуляторе 4.02 (AttributeError при загрузке). Перенесён в 4.03,
      куда и относится.
    2.48.2
    - [BUG-FIX] 4.03: деление по вертикали падало с NameError (параметр
      nz по ошибке читался в чужом методе). Исправлено.
    - 4.03: плотность руды можно брать из канала грида поячеечно (параметр
      «Канал плотности») - для переменной по площади плотности.
    2.48.1
    - Домены. Новый инструмент «4.05 Домены в канал пласта»: полигоны
      зон растеризуются в канал domain грида (код из поля или по порядку).
    - Новый инструмент «4.06 Разность запасов (списание)»: разность двух
      блочных моделей по совпадающим ячейкам, сумма delta - списанный
      тоннаж. Прямой путь оперативного списания запасов.
    2.48.0
    - 3D-просмотр: след разреза - линия пересечения секущей плоскости с
      каждой поверхностью рисуется яркой нитью по кровле и подошве.
    - 4.03: параметр «Слоёв по вертикали» делит колонку центроидов на N
      блоков между кровлей и подошвой (поля z_from, z_to, lay, доля
      объёма и тоннажа). Заготовка настоящей 3D-модели.
    2.47.7
    - [BUG-FIX] 3D: клик по плашке «Свой цвет» падал с RuntimeError, если
      параметры слоя ещё не создавались (дефолт строился от пустого пути).
      Дефолт теперь берётся от настоящего источника слоя.
    2.47.6
    - 3D-просмотр: в «Окраске» появился пункт «Свой цвет» - рядом с
      выпадающим списком плашка текущего цвета, клик по ней открывает
      выбор цвета. Цвет свой у каждого слоя, живёт в его параметрах.
    2.47.5
    - 3D-просмотр: подписи скважин прореживаются - текст не ставится,
      если рядом уже есть подписанная скважина (порог 4.5 процента размаха
      сцены). Кучные фонды больше не превращают подписи в кашу.
    2.47.4
    - Руководство: исправлен битый блок картинки во введении (след старой
      панели инструментов), скрин панели заменён свежим деревом четырёх
      групп. Семь иллюстраций из цикла статей встали в главы: SK с ложным
      средним, OK против тренда, точечный против блочного (обзорная глава),
      вероятность класса (2.01), карта превышения (2.03), карта D (2.07),
      эталоны Серпинского и Коха (2.08).
    2.47.3
    - Руководство: девять новых скриншотов - дерево инструментов, вкладки
      3D-просмотра с параметрами слоя и списком каналов, отчёт калькулятора,
      блочная модель на 40 тысяч центроидов, окно и демо-реки Минковского.
    2.47.2
    - Руководство: глава 3D-просмотра переписана под текущий интерфейс
      (вкладки Слои и Векторы, персональные параметры слоя, единая
      Окраска, фильтр набора, подписи скважин, опрос кликом). Добавлены
      заметка о канальных списках во введении и раздел «Предприятиям».
    2.47.1
    - Приглашение в подвале справок ведёт на страницу «Предприятиям»
      сайта Информ++ (доработки, поддержка с гарантией, внедрение).
    2.47.0
    - 2.10: полный набор параметров метода Минковского - K ступеней
      лесенки (по умолчанию 8), случайные сдвиги сетки с минимальным
      покрытием (3), фактор уплотнения выборки (0.5); к каждому объекту
      дописывается D_r2 - качество лог-лог аппроксимации, при R² ниже
      0.85 выдаётся предупреждение. В справке - про выбор K: слишком
      большое K занижает D к 1 ниже масштаба детальности линии.
    2.46.1
    - Терминология: в подписях параметров и справках «число» заменено на
      «количество» там, где считаются штуки (лаги, точки, пары, соседи,
      реализации, размеры сетки); «число» осталось только в значении
      математической величины и как тип поля.
    2.46.0
    - Группа 2 перенумерована в формат 2.01-2.11: инструменты в панели
      сортируются по порядку (раньше 2.10 и 2.11 вставали между 2.1 и
      2.2). Перекрёстные ссылки в справках и руководстве обновлены.
    2.45.0
    - Выбор канала растра всюду переведён на выпадающие списки с именами
      каналов (штатный параметр Band, 14 параметров в девяти инструментах:
      изолинии, дрейф, гидравлика, состав на разрезе, сборка и калькулятор
      пласта, фракталы). Канал содержания в 4.02 стал необязательным:
      пусто - считать без металла. Исключение - 4.04 с пачкой растров,
      там канал остаётся числом.
    2.44.0
    - Новый инструмент «2.10 Размерность Минковского (векторы)»: box-
      counting прямо по линиям и границам полигонов, D_mink каждому
      объекту и D слоя целиком (размерность речной сети); эталон Коха
      1.264.
    - Новый генератор «2.11 Создать пример для фракталов (демо)»: речная
      сеть с порядками притоков, водосбор с изрезанной границей, берег.
    - 2.9 принимает полигоны: меряется внешнее кольцо границы.
    2.43.0
    - 2.7-2.9 обкатаны на реальных данных: пометки «бета» сняты.
    - Руководство: главы 2.7-2.9 расширены - чтение карты D и выбор окна,
      рабочие циклы «кровля - D - изолинии» и диагностики сглаживания,
      источники масок для box-counting.
    2.42.1
    - 2.7: по умолчанию одноканальный грид D - сразу подаётся в «1.2
      Изолинии из растра» для изолиний размерности; H записывается вторым
      каналом по галке в дополнительных. Подсказка про изолинии - в журнал.
    2.42.0
    - Два новых фрактальных инструмента: «2.8 Box-counting маски» - одна
      размерность D на бинарную маску (порог по растру, таблица счётов в
      журнале); «2.9 Размерность линий» - D каждой линии методом циркуля,
      диагностика пересглаживания изолиний. Эталоны: ковёр Серпинского
      1.8928, кривая Коха 1.262.
    2.41.0
    - Новый инструмент «2.7 Фрактальная размерность»: карта D = 3 - H
      вариограммным методом в скользящем окне (чистый NumPy, лог-лог
      наклон по лагам); выход двухканальный (D и H), глобальные значения
      в журнале. Перепады D подчёркивают нарушения и границы блоков.
    2.40.2
    - Руководство: обзорная глава «Виды кригинга: какой выбрать» перед
      группой разрезов - навигатор по SK/OK/тренду/дрейфу/блочному/
      индикаторному со шпаргалкой; PDF пересобраны.
    2.40.1
    - В подвал справки каждого инструмента (рядом с номером версии)
      добавлено приглашение: Isoliner развивается на задачах реальных
      предприятий - нужна функция, напишите на www.informpp.ru.
    2.40.0
    - Наведён порядок в инструментах: новая группа «4. Пласт и блочная
      модель» (4.01 сборка грида пласта, 4.02 калькулятор, 4.03 блочная
      модель, 4.04 меши - все с пометкой «бета»); генераторы демо стали
      последними в группах (1.6 профили, 1.7 пример скважин). Руководство
      перенумеровано и переупорядочено.
    2.39.0
    - Новый инструмент «3.14 Грид пласта в блочную модель»: центроид на
      каждую ячейку с атрибутами top/bot/thick/vol/ore_t и всеми каналами
      параметров по именам; выгрузка по контуру. Модель наращивается
      атрибутами - фильтры, join, калькулятор полей.
    2.38.0
    - 3D-просмотр: опрос блочной модели кликом. Клик без перетаскивания
      пускает луч, находит ближайшую поверхность или тело и выводит
      значения всех каналов в точке (для пласта - и мощность); попадание
      помечается красным шариком.
    2.37.0
    - Новый инструмент «3.13 Калькулятор пласта»: мощность, объём, тоннаж
      руды и металла, средневзвешенное содержание по гриду пласта; сводка
      по всей площади или внутри контура (с дырками), HTML-отчёт; каналы
      «мощность» и «запасы руды» дописываются в грид пласта.
    2.36.1
    - 3D-просмотр: подписи скважин над мачтами (поле подписи выбирается на
      вкладке «Векторы», name/well угадываются; до 500 подписей).
    2.36.0
    - 3D-просмотр: единое поле «Окраска» у слоя - палитра, собственные
      каналы по именам или внешний растр проекта (тогда доступен канал
      атрибута); отдельные «Канал окраски» и «Внешний атрибут» упразднены.
    2.35.1
    - 3D-просмотр: кнопки «Все»/«Ничего» падали после перехода на
      персональные настройки слоёв; вызов удалённого метода убран.
    2.35.0
    - 3D-просмотр: персональные параметры каждого слоя. Левая панель на
      вкладках «Слои» и «Векторы»; у выбранного слоя свой режим
      (авто/поверхность/тело пласта), канал высот, канал окраски и внешний
      атрибутный растр с каналом. Глобальные переключатели тел и каналов
      упразднены; шкала окраски общая на сцену.
    2.34.0
    - Новый инструмент «3.12 Собрать грид пласта»: кровля, подошва и пачка
      параметров собираются в многоканальный грид по конвенции; входы
      приводятся к сетке кровли, имена каналов пишутся в описания.
    - 3D-просмотр: фильтр списка слоёв с кнопками «Все»/«Ничего» для
      ручной сборки набора; каналы высот, параметра и атрибута -
      выпадающими списками с именами каналов.
    2.33.1
    - Руководство: таблицы атрибутов сгенерированных слоёв - демо-скважины
      (1.6), выходы 3.01 (определение, 3D-забор, угловые точки, оси,
      таблица углов) и все слои демо 3.10 с их полями; PDF пересобраны.
    2.33.0
    - Руководство (RU/EN): главы «3.11 Поверхности в 3D (меши)» и «3D-просмотр
      поверхностей» со скриншотами сцены, схема конвенции многоканального
      грида пласта, обновлён раздел 3.10; PDF пересобраны. Описание плагина
      дополнено 3D-просмотром и экспортом 2DM.
    2.32.4
    - 3D-просмотр: мачта над устьем скважины (2 процента размаха сцены) -
      штанга видна всегда, даже когда целиком уходит внутрь тела пласта.
    2.32.3
    - 3D-просмотр: плоскость разреза падала на QGIS 4 (asMultiPolyline
      бросает TypeError на одиночной LineString); чтение линии с fallback.
    2.32.2
    - 3.01: вершины ломаной принудительно включаются в пикетаж. Раньше
      равномерная сетка пикетов не попадала в изломы, и профиль, полосы
      чертежа и 3D-забор срезали каждый угол хордой до полушага.
    2.32.1
    - Демо 3.10: разлом смещён с середины створа (0.62 длины) - раньше он
      рождался на изломе линии и выглядел как срезанный угол определения.
    2.32.0
    - 3D-просмотр: плоскость разреза. Линия определения из 3.01 рисуется
      вертикальной полупрозрачной лентой с контуром между zmin и zmax из
      полей определения (без полей - по размаху сцены); ломаные и несколько
      линий поддерживаются.
    2.31.0
    - 3D-просмотр: логика окраски по природе слоя. Тело пласта красится
      собственным каналом параметра (по умолчанию 3; 0 - палитра), внешний
      атрибутный растр применяется только к одноканальным поверхностям;
      выбор «Применить окраску к» упразднён, шкала общая.
    2.30.0
    - 3D-просмотр: режим «Тела пластов» - для многоканальных гридов канал 1
      и канал 2 рисуются кровлей и подошвой, объём замыкается боковой юбкой
      по границе данных (водонепроницаемое тело). Одноканальные гриды в том
      же списке остаются поверхностями. Первый шаг к каркасной и блочной
      моделям массива.
    2.29.1
    - Конвенция грида пласта: канал 1 кровля, канал 2 подошва, каналы 3+
      параметры (пласт как блочная модель, поверхности первичны). Демо 3.10
      выдаёт четырёхканальные гриды пластов; один файл кормит 3.03
      (каналы 1/2/3) и 3D-просмотр.
    2.29.0
    - Многоканальные гриды пластов. Демо 3.10 выдаёт по трёхканальному
      гриду на промышленный пласт (кровля, содержание, минтип - независимые
      стохастические поля с подписями каналов); отдельные плоские гриды
      состава убраны. 3.03 получил выбор канала кровли/подошвы/состава,
      3.11 - канал высот, 3D-просмотр - канал высот и канал атрибута.
    2.28.0
    - Демо 3.10: у каждого промышленного пласта свой состав - независимые
      стохастические поля содержания (крупное + мелкая пятнистость, свои
      тренды) и свой минтип; выходы «Состав 1-го/2-го пром.».
    - 3D-просмотр: легенда цветовой шкалы с диапазоном, прозрачность
      поверхностей, кнопки «Сверху»/«Сбоку», снимок сцены в PNG.
    2.27.5
    - Релиз в основной канал: снят флаг experimental. Функционально
      идентична 2.27.4.
    2.27.4
    - Вложенные pyqtgraph/PyOpenGL зачищены под сканер plugins.qgis.org:
      удалены неиспользуемые console, flowchart, multiprocess, exporters и
      configfile, точечно отключены загрузка .ui и pickle-restore; Bandit
      находит только LOW. 3D-просмотр снова в публикуемом пакете.
    2.27.3
    - Без pyqtgraph/PyOpenGL пункт 3D-просмотра просто не показывается в
      меню: никаких подсказок про pip, публичная сборка выглядит цельной.
    2.27.2
    - Публикуемый пакет собирается без вложенных pyqtgraph/PyOpenGL
      (сканер репозитория QGIS блокирует чужой код); при их отсутствии
      3D-просмотр показывает подсказку установки. Ветка 2.27.x помечена
      экспериментальной до стабилизации.
    2.27.1
    - 3D-просмотр: выбор «Применить окраску к» - атрибут красит одну
      конкретную поверхность или все; шкала считается по цели окраски.
    2.27.0
    - 3D-просмотр: окраска поверхностей атрибутным гридом. Выбранный растр
      (содержание, мощность, ошибка) билинейно выбирается в вершинах мешей,
      цвет по общей шкале, диапазон в строке состояния; нет данных - серый.
    2.26.4
    - Меню «Модули - Isoliner»: 3D-просмотр первым пунктом; отдельный пункт
      «Руководство (PDF)» убран (кнопка осталась в окне «О плагине»).
    2.26.3
    - 3D-просмотр: маркеры устьев скважин теперь круглые шарики вместо
      квадратных спрайтов (при более 500 скважин - круглые спрайты).
    2.26.2
    - 3D-просмотр: камера охватывает и поверхности, и скважины (раньше
      скважины вне экстента мешей оставались за кадром).
    2.26.1
    - 3D-просмотр: список скважин был пуст в QGIS 4 (Qgis.GeometryType
      вместо QgsWkbTypes.PointGeometry); детект точечных слоёв с fallback.
    2.26.0
    - 3D-просмотр: скважины. Точечный слой и числовые поля отметок (h1...h6
      отмечаются сами) рисуются вертикальными штангами с маркером устья.
    - 3.11 переосмыслен как экспорт в стандартный mesh-формат 2DM (MDAL):
      профильный инструмент, mesh-калькулятор, сторонние программы.
    2.25.2
    - 3D-просмотр: исправлено падение на Qt6 (QGIS 4) из-за плоских
      enum-имён Qt; все enum'ы диалога теперь с fallback Qt5/Qt6.
    2.25.1
    - pyqtgraph и PyOpenGL идут в комплекте плагина (папка libs, без
      GLES/примеров): 3D-просмотр работает из коробки, pip не нужен;
      системные копии пакетов, если стоят, имеют приоритет.
    2.25.0
    - Собственный «3D-просмотр поверхностей (бета)» в меню «Модули -
      Isoliner»: растры проекта рисуются мешами на pyqtgraph.opengl, каждый
      горизонт своим цветом, вертикальное преувеличение и разнос по Z
      настраиваются в окне; не зависит от штатного 3D-вида (Qt3D). Нужны
      пакеты pyqtgraph и PyOpenGL (pip install pyqtgraph PyOpenGL).
    2.24.1
    - 3.11: параметр «Разнос по Z» - каждый следующий грид смещается на шаг
      вниз, слипшаяся стопка горизонтов раскрывается в этажерку.
    2.24.0
    - Новый инструмент «3.11 Поверхности в 3D (меши)»: пачка гридов
      переводится в mesh-слои 2DM для штатного 3D-вида QGIS, с вертикальным
      преобразованием Z (масштаб и смещение) и прореживанием узлов.
    2.23.0
    - Меню «Модули - Isoliner»: «О плагине» (версия, ссылки, история
      изменений из metadata.txt) и «Руководство (PDF)» по языку интерфейса.
    2.22.7
    - Руководство: номера панели в заголовках; скрины окон и таблицы полей
      для 2.5, 2.6 и инструментов разреза; пересобраны оба PDF.
    2.22.6
    - Демо-TIN: финальный размер складки (компактная локальная складка).
    2.22.5
    - Демо-TIN: складка ещё уменьшена (компактная локальная складка).
    2.22.4
    - Демо-TIN: складка уменьшена (компактнее), форма и заворот сохранены.
    2.22.3
    - Демо-TIN: складка переделана в гладкую лежачую (синусоида в наклонной
      раме по падению пластов) - длинные крылья, плавный заворот без острых
      углов, малый размах по высоте.
    2.22.2
    - Демо-TIN: складка из замкнутой линзы переделана в открытую лежачую
      шпильку (нижнее крыло, замок сбоку, перевёрнутое верхнее крыло) -
      читается как опрокинутая складка, а не кольцо.
    2.22.1
    - Демо-TIN переделана в реалистичную лежачую опрокинутую складку:
      замкнутая линза со сдвигом (наклон), мощность слоя, посажена в
      середину пачки пластов, шире поперёк разреза.
    2.22.0
    - Новый инструмент «3.06 Пересечение TIN с разрезом»: TIN из 3D-граней
      (PolygonZ) и/или меш режется разрезом. В отличие от грида берёт
      нависающее и опрокинутое - над одной станцией несколько отметок,
      трасса заворачивается. Ядро на чистом NumPy. Номера инструментов
      разреза стали двузначными (3.01-3.10); в демо добавлена опрокинутая
      TIN-складка.
    2.21.2
    - «3.5 Пересечение векторов» принимает список слоёв за один прогон
      (линии и полигоны вперемешку), в выходах поле src хранит слой-
      источник каждой метки.
    2.21.1
    - «3.5 Пересечение векторов»: определение разреза теперь несёт высоту
      рамки (zmin/zmax из «Разрез по линии»), для объектов без Z больше не
      нужно подавать чертёж или диапазон Z. Пустые выходы не создаются.
    2.21.0
    - Новый инструмент «3.5 Пересечение векторов с разрезом»: линии и
      полигоны наносятся на разрез по точному пересечению. Линия без Z -
      вертикаль на всю высоту, линия с Z - точка на отметке, полигон -
      полоса на интервале зоны. Беты сдвинуты на 3.6-3.8, демо на 3.9; в
      демо добавлены разлом, маркер с Z и зона замещения.
    2.20.1
    - Восстановлена кнопка «Справка» в диалоге инструмента «2.6 Гауссова
      симуляция (SGS)» (отсутствовал helpUrl).
    2.20.0
    - Новый инструмент «2.6 Гауссова симуляция (SGS)»: ансамбль равновероятных
      реализаций вместо одной сглаженной оценки. Даёт неопределённость -
      среднее (E-type), стандартное отклонение, квантили P10/P50/P90 и карту
      вероятности превышения порога. Вариограмма баллов подбирается авто.
      Чистый NumPy поверх ядра кригинга, без зависимостей.
    2.19.1
    - Подписи горизонтальных осей вынесены слева от линии (через позицию,
      вычисляемую от геометрии) - прежняя привязка в QGIS 4 не срабатывала.
    2.19.0
    - «Скважины на разрезе» и «Состав пласта на разрезе» получили
      необязательный вход «Определение разреза»: масштаб vex берётся из него,
      и колонки и состав точно совпадают с разрезом по вертикали.
    - Инструменты переименованы в «...на разрезе». Инструменты 3.5-3.7
      (проекция, обратная проекция, развёртка ствола) помечены «(бета)».
    - В руководство добавлена схема оформления разреза.
    2.18.6
    - Подписи горизонтальных осей привязаны к началу линии (слева).
    2.18.5
    - Таблица углов переделана: ячейки между угловыми точками (границы под
      вертикалями), две строки - длина и азимут отрезка между соседними
      углами, заливка белая, без строки-шапки.
    2.18.4
    - Откат флага «Дополнительно» с выходных слоёв: в стоковом диалоге
      Processing выходы нельзя убрать в эту секцию (флаг работает только для
      входных), и QGIS сваливал туда все выходы, включая главные. Выходы
      снова в обычном порядке, оформительские - по-прежнему опциональны.
    2.18.3
    - Оформительские выходы «Разреза по линии» (угловые точки, вертикали,
      горизонтальные оси, таблица углов) и число отметок убраны в секцию
      «Дополнительно». На виду остаются чертёж 2D, забор 3D и определение.
    2.18.2
    - Новый опциональный выход «Разреза по линии» - таблица углов: слой
      полигонов-ячеек под разрезом (колонка на угол, строки имя, азимут,
      расстояние, подпись по центру). Рисуется прямо в окне вида.
    2.18.1
    - Угловые точки: подпись внизу только X и Y (азимут и расстояние
      остаются полями для таблицы). Стиль: треугольник вершиной вверх и
      меньше, полка меньше и симметричная. Количество отметок высоты на осях
      теперь точнее совпадает с заданным (шаг из ряда 1-2-2.5-5-10), сам
      параметр перенесён в дополнительные. 
    2.18.0
    - Угловые точки разреза доработаны: точки сверху и снизу, поля номер,
      имя УГ-N, сторона, расстояние, плановые X и Y, азимут, готовая
      подпись (округление до сотых). Стиль: треугольник сверху, полка снизу.
      Новый выход - горизонтальные оси с отметками высот (по умолчанию 5,
      хорошее округление). Поля чертежа на 5%% шире вверх и вниз. Демо-линия
      теперь ломаная с двумя изломами.
    2.17.0
    - «Разрез по линии» по запросу выдаёт угловые точки и угловые вертикали
      на узлах ломаной (в осях чертежа), с номером узла и азимутом отрезка.
      Вертикали на всю высоту разреза. Оба выхода опциональны.
    2.16.0
    - Растровые выходы создаются со свёрнутым узлом в дереве (стопка гридов
      больше не раздувает панель слоёв). На каждый слой пишется история
      создания (версия плагина, инструмент, дата) - видна в свойствах слоя
      и переносится с проектом и QLR. Существующие стили и порядок слоёв
      сохранены.
    2.15.1
    - Многослойные инструменты складывают выходные слои в фиксированную
      группу дерева (Разрез, Кригинг, Изолинии и т.д.). Повторный запуск
      добавляет в ту же группу, новую не плодит. Семейство разреза идёт в
      одну группу «Разрез» - удобно копировать в другой проект (например
      через QLR).
    2.15.0
    - Линейка инструментов разреза на общем определении разреза (линия и
      vex, выдаётся «Разрез по линии»). Новое: «Пересечение поверхностей с
      разрезом» (3.4), «Проекция объектов на разрез» (3.5), «Спроецировать
      с разреза» (3.6, обратная проекция в 3D), «Развёртка стенки ствола»
      (3.7, цилиндрический разрез). Разрез обрезает выклинивания. Демо
      получило выклинивание пласта. Демо-генератор стал 3.8.
    2.14.1
    - Группа «Дополнительные инструменты» переименована в «Дополнительные
      инструменты анализа». В группе «Разрез» наведён порядок: 3.1 разрез,
      3.2 скважины, 3.3 состав, 3.4 пример (демо в конце). Идентификаторы
      алгоритмов не менялись.
    2.14.0
    - Вертикальный масштаб разреза задаётся отношением Г:В (ширина:высота),
      множитель считается сам по длине линии и размаху высот; режим
      «множитель» сохранён. Фактический множитель печатается в журнал.
      Добавлено в «Разрез по линии», «Скважины на разрез» и «Состав пласта
      на разрез». По умолчанию Г:В 10:1.
    2.13.2
    - Демо разреза: усилена структура (падение, пологая складка, клинья
      промышленных пластов) для наглядности; демо-скважины прижаты вплотную
      к линии, чтобы их колонки совпадали с полосами разреза.
    2.13.1
    - Исправлено: в «Создать пример для разреза» слой скважин не
      создавался (двойное обращение к параметру вывода). Теперь скважины
      генерируются корректно.
    2.13.0
    - Новый инструмент «Состав пласта на разрез» (группа «Разрез», 3.4).
      Красит полосу пласта по гриду состава вдоль линии. Режим
      «непрерывное» режет полосу на срезы под градиент (KCl, HO), режим
      «категориальное» сливает смежные срезы в фациальные зоны (минтип,
      зоны замещения). По одному пласту за раз, выходы 2D и 3D. Генератор
      «Создать пример для разреза» теперь выдаёт и гриды состава
      промышленных пластов (содержание и минтип с зоной замещения).
    2.12.1
    - Генератор «Создать пример для разреза» расширен до шести поверхностей:
      пять пластов в переслаивании (три вмещающих и два промышленных,
      тонкие). Скважины несут отметки h1...h6.
    2.12.0
    - Новый инструмент «Скважины на разрез» (группа «Разрез», 3.3).
      Проецирует скважины на линию разреза и рисует их колонками интервалов
      пластов в осях расстояние-высота, поверх чертежа. Границы пластов -
      из выбранных полей-отметок (сортируются по убыванию), отсев дальних
      коридором, номер скважины подписью. Генератор «Создать пример для
      разреза» теперь выдаёт и скважины вдоль линии с полями h1, h2, h3.
    2.11.1
    - Инструменты разреза вынесены в отдельную группу «Разрез»:
      «Разрез по линии» теперь 3.1, «Создать пример для разреза» 3.2.
      Группы «Грид и изолинии» (1.1-1.7) и «Дополнительные инструменты»
      (2.1-2.5) вернулись к прежнему составу.
    2.11.0
    - Новый инструмент «Создать пример для разреза» (группа «Грид и
      изолинии», 1.8). Готовит три стопкой поверхности (две залежи) с
      падением и переменной мощностью и линию, чтобы сразу попробовать
      «Разрез по линии» без кригинга реальных данных.
    2.10.0
    - Новый инструмент «Разрез по линии» (группа «Дополнительные
      инструменты», 2.6). По линии и упорядоченному сверху вниз набору
      поверхностей строит геологический разрез: пласты как полосы между
      соседними поверхностями. Два выхода - чертёж в осях расстояние×высота
      (с вертикальным преувеличением, для макета) и 3D-забор PolygonZ в
      реальных координатах (для 3D Map View). Несколько пластов сразу.
    2.9.3
    - «2D Kriging»: список «Преобразование значения» (ln) перенесён из
      «Дополнительно» прямо под поле значения Z - так его проще найти тем,
      кому он нужен (лог-нормальные K, T).
    2.9.2
    - Бергштрихи (изолинии впадин, стиль «со штрихами вниз»): исправлено
      направление штрихов в QGIS 4. В QGIS 4 трактовка знака смещения линии
      изменилась относительно QGIS 3, из-за чего штрихи смотрели вверх по
      склону. Знак dn_sign теперь переворачивается для QGIS 4+, в QGIS 3
      поведение прежнее.
    2.9.1
    - Демо-генерация K приведена к реалистичному диапазону: поле ln(K)
      нормируется и подрезается до ±2.5σ, K ≈ 0.006…4 м/сут (раньше пики
      гладкого поля давали единичные выбросы в сотни). T = K·мощность.
    2.9.0
    - «2D Kriging»: опциональное логарифмирование значения (преобразование
      ln). Кригуется ln(Z), оценка возвращается через exp (медиана),
      стандартная ошибка пересчитывается в исходные единицы дельта-методом.
      Кригинг лог-нормальных величин (K, T, скошенные содержания) без ручного
      создания поля ln.
    - Инструменты 2.3 и 2.4 поменяны местами: 2.3 теперь «Карта вероятности
      превышения», 2.4 «Гидравлический градиент», чтобы гидрогеология
      (градиент 2.4 и удельный расход 2.5) шла рядом.
    2.8.0
    - Новый инструмент «Удельный расход (закон Дарси)» (группа
      «Дополнительные инструменты», 2.5). По растру напора и растрам свойств
      пласта (коэффициент фильтрации K, водопроводимость T) считает скорость
      фильтрации q = K·|∇h| (м/сут) и расход через ширину Q = T·|∇h| (м²/сут),
      плюс направление и стрелки. Свой кригинг не делает - растры K и T берёт
      готовыми (рекомендуется лог-кригинг). Гидрогеология теперь с
      проницаемостью, а не только геометрия градиента.
      Генератор «Создать пример скважин» получил галку «Добавить поля
      K и T и напор»: лог-нормальное K и T = K·мощность, чтобы инструмент
      Дарси можно было освоить на демо-данных.
    2.7.1
    - В руководство (RU и EN) добавлены иллюстрации для «Карты вероятности
      превышения»: окно инструмента и пример карты с расходящейся шкалой.
    2.7.0
    - Новый инструмент «Карта вероятности превышения» (группа
      «Дополнительные инструменты», 2.4). По растрам оценки и стандартной
      ошибки кригинга строит P(Z>порог) = Φ((оценка−порог)/ошибка) при
      нормальном локальном распределении. Свой кригинг не выполняет, окно
      «2D Kriging» не меняет - отдельный постпроцессор, как градиент потока.
      Применение: бортовые содержания, зоны риска по любому порогу.
    2.6.1
    - Группы инструментов пронумерованы: «1. Грид и изолинии» и
      «2. Дополнительные инструменты». Так порядок групп в дереве Processing
      одинаков в русской и английской локалях (раньше группы сортировались
      по алфавиту имени и на разных языках шли в разном порядке).
    - В руководство добавлены иллюстрации (RU и EN): окно инструмента «Кригинг
      с внешним дрейфом», обновлённое дерево инструментов с нумерацией групп и
      сравнение обычного кригинга с кригингом по внешнему дрейфу.
    2.6.0
    - Новый инструмент «Кригинг с внешним дрейфом (External Drift)»
      (группа «Дополнительные инструменты»). Оценка по точкам, когда поле
      закономерно связано со сторонней величиной, известной всюду в виде
      растра: структурная поверхность соседнего пласта, грубая региональная
      модель, сейсмический атрибут. Дрейф снимается регрессией значения на
      растр, кригуются остатки, дрейф возвращается к оценке из того же растра.
      Та же схема регрессия-кригинг, что и у снятия полиномиального тренда,
      только дрейф здесь не функция координат, а функция внешнего значения.
      Степень дрейфа 1 (линейный) или 2 (квадратичный); поиск, анизотропия,
      обрезка и стандартная ошибка - как у «2D Kriging». Ячейки вне покрытия
      растра дрейфа остаются пустыми. Растр дрейфа и точки в одной CRS.
    - Составная нумерация инструментов по группам: «Грид и изолинии» 1.1-1.7,
      «Дополнительные инструменты» 2.1-2.3. Прежняя сквозная нумерация 1-10
      сортировалась как строки, и «10» вставал перед «8» и «9». Номер теперь
      сразу показывает группу.
    - Демо-генератор скважин умеет выдавать поверхность дрейфа (отдельный растр)
      и связанное с ней поле dz - готовая пара для проверки кригинга с внешним
      дрейфом.
    2.5.0
    - Новый инструмент «Гидравлический градиент и направление потока»
      (гидрогеология). По растру напора строит гидравлический градиент i = |∇h|
      (безразмерный, м/м), азимут направления потока (компасный, вниз по
      градиенту) и точечный слой векторов потока, который автоматически
      оформляется стрелками (пресет flow_arrows.qml: поворот по азимуту,
      размер по градиенту).
      Это геометрия поля напора без проницаемости: скорость по Дарси (минус K
      на градиент) требует коэффициента фильтрации и здесь не считается.
      Опционально сглаживание напора перед расчётом (градиент усиливает шум).
    - Демо-генератор скважин: опция добавить поле напора (head) с региональным
      уклоном - сквозной учебный цикл «демо → кригинг напора → градиент потока».
    - Инструменты разнесены по двум группам Processing: «Грид и изолинии»
      (основной поток) и «Дополнительные инструменты» (категориальный
      индикаторный кригинг и гидравлический градиент).
    2.4.0
    - В инструменте «2D Kriging» появился блочный кригинг (галка «Блочный
      кригинг» и поле «Дискретизация блока, N×N на ячейку», по умолчанию 4×4).
      Оценивается среднее по ячейке грида, а не значение в её центре: ячейка
      разбивается на N×N точек дискретизации, правые ковариации усредняются
      по блоку, дисперсионный член - блок-блок ковариация (схема GSLIB KB2D).
      Поверхность глаже, стандартная ошибка кригинга ниже точечной - подходит
      для оценки запасов и содержаний по блоку. Пробы в узлах при этом не
      воспроизводятся точно. По умолчанию выключено: обычный точечный кригинг.
    - Снятие тренда и блочный кригинг работают вместе: кригуются остатки по
      блоку, тренд добавляется обратно к оценке.
    2.3.0
    - Новый инструмент «Категориальный индикаторный кригинг». По категориальному
      полю (минтип, литотип, класс) строит на каждый класс индикатор 0/1,
      кригует ядром KB2D, нормирует вероятности к сумме 1. Выход: многополосный
      растр вероятностей (полоса на класс), карта зон (самый вероятный класс) и
      растр уверенности. Кодом класса не кригует, у категорий нет порядка.
    - Демо-генератор скважин: опция добавить категориальное поле минтипа
      (фон сильвинита с очагами замещения) для обучения и проверки нового
      инструмента.
    2.2.0
    - Инструмент «Изолинии из растра»: выбор «Стиль изолиний» с двумя
      встроенными пресетами (папка styles) - структурный (по умолчанию) и
      депрессионный со штрихами вниз. Стиль накладывается на слой
      автоматически.
    - Депрессионный стиль сам включает расчёт стороны склона: линии получают
      поле dn_sign сэмплированием исходного растра по обе стороны линии, и по
      нему штрихи на главных изолиниях ложатся в сторону склона вниз.
      Отдельной галки нет, всё решает выбор стиля.
    - Выбор языка интерфейса: русский только при русской локали QGIS,
      английский для всех остальных локалей и при неопределённой локали.
      Раньше английский включался лишь при ровно английской локали, а прочие
      языки получали русский.
    2.1.1
    - Тихие удобства. Выбранный профиль обработки запоминается между
      сессиями и подставляется при следующем открытии «2D Kriging» и
      «Кросс-валидации».
    - Параметры запуска сохраняются только при успешном завершении, поэтому
      ошибочный или прерванный запуск больше не затирает рабочие значения.
    - Предупреждения о плохой кондиционности данных в Журнал: мало точек,
      совпадающие координаты (риск вырожденной матрицы), одинаковые значения.
      Расчёт при этом не останавливается.
    2.1.0
    - Снятие тренда (регрессия-кригинг) в «2D Kriging» и «Кросс-валидации»:
      галка «Снять полиномиальный тренд» и поле «Степень тренда» (плоскость
      или квадратичная). Региональный тренд снимается методом наименьших
      квадратов перед кригингом, кригуются остатки, тренд возвращается к
      оценке. Полезно для отметок пласта и мощностей с общим падением в
      пределах участка; вариограмму после снятия тренда задают по остаткам.
      В кросс-валидации тренд переподбирается на каждом шаге leave-one-out,
      поэтому выигрыш виден прямо по RMSE. По умолчанию выключено.
    - «Вариограммная карта»: поле «Записать анизотропию в профиль». Оценённые
      азимут, коэффициент анизотропии и радиус главной оси дописываются в
      выбранный профиль поверх модели и наггета. При загрузке профиля в
      «2D Kriging» они подставляются и показываются в подписи. Если радиус
      упёрся в макс. лаг, обновляются только азимут и коэффициент.
    - Руководство дополнено разделами про снятие тренда и запись анизотропии
      в профиль; PDF (RU и EN) пересобраны.
    2.0.0
    - Полное двуязычие плагина (русский/английский): язык интерфейса
      определяется по локали QGIS. Переведены меню, диалоги, варианты
      выпадающих списков, подсказки и панели справки.
    - Переведены логи, предупреждения, исключения и HTML-отчёты
      (кросс-валидация, вариограмма, вариограммная карта), имена
      выходных слоёв и псевдонимы полей слоя остатков.
    - Двуязычное руководство пользователя: Isoliner.pdf (RU) и
      Isoliner_en.pdf (EN). Кнопка «Справка» открывает PDF по языку
      интерфейса.
    - Движок переводов - словарный слой i18n с тестами покрытия
      и импорта.
    1.9.1
    - Изолинии: бикубическое сглаживание (сгущение грида ×2..×4 перед
      контурингом, по умолчанию выкл.) - гладкие изолинии без
      «октагонов» от грубой сетки. Чистый NumPy, совместимо с QGIS 4.
      Работает и для линий, и для контурных полигонов; границы поясов
      совпадают с изолиниями.
    - Полигонизация поясов переведена на прямые вызовы GEOS
      (unaryUnion + polygonize) вместо native:splitwithlines, который
      на густой сети терял часть граней (покрытие падало вдвое).
    1.9.0
    - Новый инструмент «Вариограммная карта (анизотропия)»: поверхность
      гамма(h_x, h_y) - хитмап с эллипсом анизотропии; оценка азимута главной
      оси, коэффициента анизотропии и радиуса для подстановки в кригинг.
      Если радиус упирается в макс. лаг (гамма не вышла на полку) - в
      Журнале и отчёте предупреждение, что это нижняя оценка.
    1.8.3
    - Совместимость с QGIS 4 (qgisMaximumVersion=4.99); проверено в 4.0.
    - Гауссова модель вариограммы: принудительный минимальный наггет для
      численной устойчивости (убирает осцилляции и отрицательные веса).
    - Полигоны: устойчивое построение в QGIS 4 / GEOS 3.14 - концы открытых
      изолиний продлеваются за контур (овершут), стык нодируется чисто;
      убраны дыры в поясах.
    - Руководство: уточнены формулировки (полувариограмма, радиус, выбор
      модели, режим под тип данных, ураганные пробы, кросс-валидация).
    1.8.2
    - Двуязычное описание плагина (английский и русский) в каталоге QGIS
      и английский README для международной аудитории.
    1.8.1
    - В справку каждого инструмента добавлена ссылка на страницу плагина
      на сайте www.informpp.ru.
    1.8.0
    - Профили обработки: именованные наборы «вариограмма (наггет, тип, порог,
      радиус, азимут, оси) + отсев ураганных проб», хранятся глобально, между
      проектами. «Вариограмма» и «Кросс-валидация» получили поле «Сохранить
      профиль под именем» и «Загрузить профиль обработки», «2D Kriging» -
      «Загрузить профиль обработки» (подставляет профиль поверх полей).
      Прежняя галка «Подставить последнюю рекомендованную модель» убрана.
    - Новый шестой инструмент «Профили обработки»: показать список, сохранить
      вручную, удалить, очистить.
    - Под списком профиля показываются его параметры строкой ниже, а в
      «2D Kriging» и «Кросс-валидации» - напоминание, что расчёт пойдёт по
      профилю, а не по полям диалога (как живой показ размера грида; на QGIS
      без старого API виджетов - обычный список).
    - Структуры 2 и 3 вариограммы убраны (использовались редко) - осталась
      одна структура с азимутом и анизотропией.
    - Порядок параметров везде единый: сначала вариограмма, отсев ураганных
      проб - в самом конце.
    - Формулировка: «изотропная» вместо «всенаправленная» экспериментальная
      вариограмма.
    1.7.4
    - «2D Kriging»: галка «Подставить последнюю рекомендованную модель»
      перенесена из «Дополнительно» в основные параметры - её видно сразу,
      без разворачивания дополнительного раздела. Поведение прежнее:
      подобранная в «Вариограмме» или «Кросс-валидации» модель подставляется
      при запуске, подстановка отмечается строкой в Журнале.
    - Руководство: добавлена таблица всех параметров инструмента
      «Вариограмма» и описание полей выходной таблицы (series, lag, gamma,
      npairs). PDF пересобран. Изменений в расчётах нет.
    1.7.3
    - Номер версии модуля теперь виден в трёх местах: строкой «Isoliner
      X.Y.Z» в начале выполнения любого инструмента (Журнал), подвалом в
      HTML-отчётах (вариограмма и кросс-валидация) и в конце встроенной
      справки каждого инструмента. Версия читается из metadata.txt, отдельно
      нигде не дублируется.
    1.7.2
    - Руководство дополнено разделом про инструмент «Вариограмма
      (экспериментальная)»: зачем нужен предпросмотр, группировка по виду
      разведки, выбор максимального расстояния по выходу кривой на плато и
      рабочий цикл с кросс-валидацией. В раздел кросс-валидации добавлена
      поясняющая схема «оценка против факта». PDF пересобран. Изменений в
      коде нет.
    1.7.1
    - Инструменты пронумерованы в названиях (1-5), чтобы задать порядок в
      панели Processing (она сортирует по алфавиту имени): 1 Кригинг,
      2 Изолинии, 3 Вариограмма, 4 Кросс-валидация, 5 Демо-скважины.
    - «Вариограмма»: предупреждение, когда радиус подобранной модели
      достигает края окна (максимального расстояния) - кривая не вышла
      на плато, порог получен экстраполяцией, радиус считать нижней
      оценкой. Сообщение разведено по случаям: окно мало (увеличить),
      окно перешагивает тренд или безрудную зону (уменьшить).
    - «Вариограмма»: у поля максимального расстояния указаны единицы
      слоя, добавлено предупреждение, когда оно меньше типичного шага
      между точками (значение задаётся в метрах, не в километрах).
    - «Вариограмма»: минимум точек в группе - параметр в процентах от
      выборки (по умолчанию 2) с нижним полом 30 точек. Малочисленные
      группы пропускаются и перечисляются в журнале, общая кривая
      строится всегда.
    - Порог предупреждения о гауссовой модели с почти нулевым наггетом
      («бычьи глаза») сделан относительным (наггет менее 5 процентов от суммарного
      порога).
    - «Кросс-валидация»: рекомендация по MSDR теперь даёт точный приём -
      умножить (или разделить) наггет и вклады на MSDR, не трогая радиус
      и модель. Оценки не меняются, поправляется только карта ошибки.
    - Перенос модели в «2D Kriging»: «Вариограмма» и «Кросс-валидация»
      запоминают подобранную/проверенную модель, а в «2D Kriging»
      появилась галка «Подставить последнюю рекомендованную модель»
      (по умолчанию выключена) - числа подставляются осознанно, после
      просмотра отчёта, а не вслепую.
    - «Вариограмма»: в описании - «всенаправленная» вместо кальки
      «омнинаправленная».
    1.7.0
    - Новый инструмент «Вариограмма (экспериментальная)»: строит
      экспериментальную вариограмму по точкам и выдаёт HTML-отчёт с
      графиком. Поверх облака накладывается текущая модель, по желанию
      рассчитывается рекомендованная модель (наггет, порог, ранг) на
      чистом numpy, без сторонних зависимостей. Есть поле группировки
      (напр. вид разведки) - на каждое значение строится отдельная
      вариограмма, чтобы увидеть, общая ли структура у поверхностной и
      подземной сети при разной плотности наблюдений. Подбор не
      применяет декластеризацию, поэтому смещение по плотности отбора
      остаётся видимым, а не замаскированным. Рекомендованные числа
      переносятся в «2D Kriging» вручную.
    1.6.0
    - Гауссово сглаживание поля перенесено из «Изолинии из растра» в
      «2D Kriging»: опция «Сгладить грид (Гаусс)», по умолчанию выключена.
      Изолинии строятся ровно по видимому растру, без скрытого сужения
      диапазона уровней. Скругление линий (Chaikin) осталось в изолиниях
      отдельной опцией.
    - Руководство переработано: темы каждого инструмента собраны в его
      подразделы (вариограмма, отсев, стандартная ошибка - под 2D Kriging;
      сглаживание, полигоны, оформление, типичные ситуации - под Изолинии).
      Заголовки переведены на автоматическую нумерацию, оформление выверено.
    1.5.1
    - Руководство: разделы переставлены по порядку инструментов модуля
      (2D Kriging и его темы -> Изолинии и его темы -> Кросс-валидация ->
      Демо -> Типичные ситуации). Добавлены скриншоты окон всех четырёх
      инструментов и панели «Обработка».
    1.5.0
    - Отчёт кросс-валидации: QQ-график ошибок (по форме - z-оценка, для
      проверки нормальности и поиска второй популяции), дисперсия данных
      в таблице метрик, номера скважин в подсказках на графике
      «оценка vs факт», подписи восьми худших остатков.
    - Руководство дополнено схемами для новичков: процесс (точки → грид →
      изолинии), веса кригинга, радиус поиска, наггет крупным планом,
      анизотропия, отсев проб (до/после). Карта стандартной ошибки -
      на сгенерированном примере. В отчёт добавлен блок «Параметры
      кригинга» (только отличные от стандартных). Обновлён README.
    1.4.2
    - Обновлено руководство пользователя (формулировки) и README.
    1.4.1
    - Обновлён контактный email сопровождающего.
    1.4.0
    - Новый инструмент «Создать пример скважин (демо)»: генерация учебного
      точечного слоя с полями кровли (абс. отметка), мощности и содержания
      абстрактного компонента, имеющими пространственную структуру (диапазоны
      кровли/мощности - по образцу пласта КрII). Для обучения и проверки без
      реальных данных. Псевдонимы на демо-слое не ставятся, чтобы не было
      предупреждений при подаче слоя в кригинг/кросс-валидацию.
    1.3.0
    - Кросс-валидация: необязательный HTML-отчёт (по умолчанию) -
      интерактивный график «оценка vs факт» + гистограмма ошибок и
      таблица метрик (plotly); без plotly - отчёт с метриками текстом.
    - Кросс-валидация: в отчёт и Журнал добавлен блок рекомендаций
      (авто-интерпретация ME/MSDR/R: утвердить параметры или как
      поправить наггет/силл/радиус).
    - Кригинг и кросс-валидация: в Журнал выводится дисперсия данных
      как ориентир для силла (наггет/силл - в абсолютных единицах).
    1.2.0
    - Кросс-валидация: добавлена кнопка «Справка» в окно инструмента.
    - Кросс-валидация: необязательное «поле номера скважины» переносится
      в слой остатков; колонка факта названа по проверяемому полю.
    - Слой остатков: поле std_error переименовано в std_resid
      (стандартизованный остаток со знаком; это не дисперсия).
    - Слой остатков: у полей заданы псевдонимы (понятные названия), слой
      автоматически называется по проверяемому полю и источнику.
    1.1.0
    - Новый инструмент «Кросс-валидация вариограммы» (leave-one-out):
      метрики ME/MAE/RMSE/MSDR/R и слой остатков для подбора вариограммы.
    - Руководство дополнено разделом о кросс-валидации.
    1.0.0
    - Первый стабильный релиз (снят флаг experimental).
    - Сводно с 0.6.x-0.7.x: стандартная ошибка кригинга; отсев/срезка
      ураганных проб; журнал пропусков; руководство (PDF) и кнопка «Справка»;
      слой изолиний над полигонами; исправлена степенная модель; smoke-тесты.
    0.7.2
    - Отсев/срезка ураганных проб в 2D Kriging: границы значения Z по
      абсолюту (мин/макс) или перцентилю; режимы «удалить» и «срезать»
      (capping). В «Дополнительно».
    0.7.1
    - В журнал выводится число точек, пропущенных без значения поля
      (точки с пустым/нечисловым Z в кригинг не попадают - это уже так).
    0.7.0
    - 2D Kriging: необязательный выход «Стандартная ошибка кригинга»
      (sqrt дисперсии ошибки) - карта неопределённости оценки.
    0.6.5
    - Метаданные для публикации в репозитории QGIS (ссылки на GitHub).
    0.6.4
    - Обновлено руководство; оглавление в PDF пересчитывается автоматически.
    0.6.3
    - Исправлена степенная модель вариограммы: «радиус a» трактуется как
      показатель ω (0<ω<2), авто=max/3 к ней больше не применяется.
    - Предупреждения (pushWarning) для сомнительных параметров вариограммы.
    - Слияние совпадающих точек - относительно охвата (корректно для любых CRS).
    - Добавлен smoke-тест движка kb2d (tests/).
    0.6.2
    - Обновлён текст руководства пользователя (PDF).
    0.6.1
    - ИСПРАВЛЕНО: слой изолиний мог не появляться из-за переупорядочивания
      слоёв. Теперь переставляется только слой полигонов (под линии),
      отложенно и безопасно - узел линий не трогается.
    0.6.0
    - Руководство пользователя (PDF) в комплекте; кнопка «Справка» в обоих
      инструментах открывает его. Слой изолиний теперь над полигонами.
    0.5.3
    - Документация: заметка про обновление и перезагрузку без перезапуска
      QGIS (в т.ч. через Plugin Reloader).
    0.5.2
    - Вернул лёгкое скругление линий (Chaikin) поверх сглаженного поля -
      убирает «октагоны» от грубого грида, пересечений не создаёт.
      Отдельный параметр «Скругление линий, итераций».
    0.5.1
    - Сглаживание перенесено на уровень поля (гауссово, радиус в ячейках)
      вместо сглаживания отдельных линий: изолинии больше не пересекаются
      в густых местах и плавны на углах.
    0.5.0
    - Контурные полигоны строятся по умолчанию (во временный слой).
    - Запоминание выбранного поля Z между запусками.
    - Иконка плагина; чистка кода; расширенный README.
    0.4.4
    - Обрезка по контуру скважин без native:minimumboundinggeometry
      (dissolve + convexhull) - работает в QGIS 3.40.
    0.4.3
    - Линии и пояса из одного набора линий; границы совпадают и по краям;
      нодирование через splitwithlines.
    0.4.2
    - Переименование в Isoliner; полигоны = пояса между изолиниями (без дыр,
      без «ступенек»), диапазон пояса - выборкой растра.
