[general]
name=Isoliner3D
qgisMinimumVersion=3.16
qgisMaximumVersion=4.99
description=Standalone 3D viewer and bed/block-model toolset: surfaces, watertight bed bodies, boreholes, polyhedra, reserves. Автономный 3D-просмотр поверхностей, тел пластов, скважин и полиэдров, плюс подсчёт запасов по блочной модели.
about=A standalone 3D viewer for geological surfaces and bodies in QGIS, independent of the built-in 3D map. Renders project rasters as triangular-mesh surfaces (each horizon in its own colour, with vertical exaggeration and Z spacing), builds watertight bed bodies from multiband grids (band 1 roof, band 2 bottom), draws boreholes as coloured stems with collar masts and labels, shows a section plane with a bright section trace, and displays polyhedral / TIN / MultiPolygon Z bodies. Click-query prints layer name, coordinates, all band values and thickness. Colouring by palette, custom colour, own band, an external raster or a real map texture with shading: an orthophoto, a basemap or a styled geological map. A section drawing is draped onto the section ribbon, several sections at once. A Processing group of seven bed and block-model tools computes thickness, volume and reserves from a bed grid. PNG snapshot for reports. pyqtgraph and PyOpenGL are bundled - nothing to install. Companion to the Isoliner kriging toolset. Developed with the support of Inform++ LLC (www.informpp.ru).
    .
    Автономный 3D-просмотр геологических поверхностей и тел в QGIS, не зависящий от штатного 3D-вида. Растры проекта рисуются треугольными мешами (каждый горизонт своим цветом, с вертикальным преувеличением и разносом по Z), из многоканальных гридов строятся водонепроницаемые тела пластов (канал 1 - кровля, канал 2 - подошва), скважины показываются цветными стволами с мачтами и подписями, плоскость разреза даёт яркий след сечения, а полиэдры / TIN / MultiPolygon Z отображаются объёмными телами. Клик по сцене печатает имя слоя, координаты, значения всех каналов и мощность. Окраска палитрой, своим цветом, собственным каналом, внешним растром или настоящей текстурой карты с затенением: ортофото, подложка, геологическая карта со своей символикой. На ленту разреза накладывается чертёж, несколько разрезов сразу. Группа Processing из семи инструментов пласта и блочной модели считает мощность, объём и запасы по гриду пласта. Снимок PNG для отчётов. pyqtgraph и PyOpenGL идут в комплекте - устанавливать ничего не нужно. Спутник набора кригинга Isoliner. Разработано при поддержке ООО «Информ++» (www.informpp.ru).
version=0.16.2
author=ООО «Информ++»
email=xbbster@gmail.com
homepage=https://github.com/Valery35/qgis-isoliner3d
tracker=https://github.com/Valery35/qgis-isoliner3d/issues
repository=https://github.com/Valery35/qgis-isoliner3d
tags=3d,visualization,surfaces,geology,mesh,boreholes,cross-section,polyhedral,tin,pyqtgraph,opengl,kriging,geostatistics
category=Analysis
icon=icon.svg
experimental=False
deprecated=False
hasProcessingProvider=yes
changelog=0.16.2
    - Окно снова не открывалось: обработчик показа разметки трогал сцену,
      которой ещё нет. Сцена объявлена заранее, обработчики проверяют,
      что она уже создана.
    - Изолинии и прочие векторы теперь режутся с первой же сборки: контур
      обрезки сбрасывался после их разбора, и они резались по прошлому
      состоянию.
    - Размечать можно и в сцене без растровых поверхностей: вершина
      берётся с уровня середины сцены. Раньше на слое одних изолиний
      нарисовать линию обрезки было нечем.
    0.16.1
    - Окно не открывалось: кнопка показа разметки включается при сборке
      окна и вызывала перерисовку раньше, чем появлялось состояние сцены.
      Всё состояние теперь заводится до создания виджетов, а тест это
      стережёт.
    0.16.0
    - Обрезка режет и векторные слои, а не только растры. Линии рвутся
      там, где выходят за кусок, точки и скважины отбираются по своему
      положению, тела по центру объекта. Раньше изолинии и разломы
      торчали за краем обрезанной модели.
    - Контур обрезки считается один раз за сборку, а не на каждую
      вершину.
    0.15.1
    - Перечисления Qt берутся по имени через getattr во всех местах:
      ветвление через hasattr оставляло в коде короткое имя, и проверка
      совместимости с Qt6 на него ругалась. Вызов exec_ заменён на exec,
      взятый по имени: в Qt6 подчёркнутого варианта нет.
    0.15.0
    - Показ разметки включается и выключается кнопкой: контур и линия
      разреза нужны, пока размечаешь, и мешают, когда смотришь результат.
      Обрезка при этом продолжает работать.
    0.14.5
    - Замыкание контура больше не выворачивает обрезку наизнанку: режим
      куска мог остаться от работы с линией, а в обрезке по контуру всё,
      кроме «оставить внутри», понималось как «убрать внутри». Теперь
      контур ставит осмысленное умолчание, а вывернутым считается только
      явный вариант «убрать внутри».
    0.14.4
    - Исправлена отрисовка контура поверх модели: в опциях отрисовки
      был передан лишний ключ и функция смешивания вместе с аргументами,
      из-за чего линия не рисовалась вовсе. Набор ключей теперь повторяет
      штатный, только проверка глубины выключена.
    0.14.3
    - Нарисованный контур и линия рисуются поверх модели, не считаясь
      с глубиной: высота вершин для работы не нужна, важно плановое
      положение, а линия, спрятанная под складкой рельефа или под
      верхним пластом, мешает постоянно.
    0.14.2
    - Кнопки на панели над сценой снова отзываются на наведение
      и нажатие: стиль плашки распространялся на кнопки внутри и стирал
      у них подсветку. Нажатая кнопка режима теперь видна по заливке.
    0.14.1
    - Прежние наброски больше не висят поверх модели: они живут вне
      списка элементов сцены, и при пересборке обнулялась только ссылка,
      а сама линия оставалась в сцене.
    - Клик при рисовании попадает только по видимой части модели. Луч
      ищет пересечение по исходным гридам, поэтому вершина ставилась
      и там, где сцена уже обрезана.
    0.14.0
    - Появилась настоящая параллельная проекция и кнопка переключения
      между ней и перспективной. Вид сверху включает её сам: план
      с перспективой это не план, объекты на разной высоте смещаются
      в кадре и перестают совпадать в плане. Прежний приём со сжатием
      раствора камеры убран: он уводил камеру далеко и портил точность
      буфера глубины, отчего близкие поверхности спорили полосами.
    0.13.4
    - Убрана рябь между близкими поверхностями на виде сверху: раствор
      камеры в один градус уводил её слишком далеко, и буфер глубины
      терял точность. Теперь двенадцать градусов, перспективы почти нет,
      а глубина считается верно.
    - После обрезки сцена снова попадает в кадр: если охват изменился
      заметно, камера кадрируется заново.
    - Новая кнопка снимает обрезку и убирает наброски, возвращая сцену
      целиком.
    0.13.3
    - Вид сверху стал настоящим планом: раствор камеры сжимается почти
      до нуля, расстояние растёт так, чтобы масштаб не менялся. Раньше
      вид сверху оставался перспективным, и объекты, лежащие выше,
      уезжали в кадре к краям: нарисованная линия переставала совпадать
      с коридором, собранным из нескольких поверхностей.
    0.13.2
    - Полуширина коридора вводится прямо на панели над сценой, рядом
      с кнопкой линии, и видна только тогда, когда режут коридором.
      В свойствах сцены её никто не искал.
    0.13.1
    - В сцене рисуется не только замкнутый контур, но и линия: кнопка
      «Завершить линию» отдаёт её в обрезку коридором и сама включает
      нужный режим. Контур режет площадь, линия режет вдоль профиля.
    - Наброски показываются только пока они режут сцену: нарисованный
      контур больше не висит поверх модели, когда обрезка идёт по другому
      слою.
    0.13.0
    - Резать сцену можно и линией, не только контуром. В списке обрезки
      появились линейные слои, а в вариантах куска: слева от линии,
      справа и коридор вдоль неё с заданной полушириной. Коридор даёт
      профиль разреза вместе с данными по обе стороны, а не голую линию.
    - Сторона считается по ближайшему звену, поэтому на изломах ломаной
      она меняется там же, где меняется ближайшее звено.
    0.12.5
    - Нарисованный контур больше не расходится с моделью. Он живёт
      в координатах сцены, а центр сцены меняется вместе с данными:
      после обрезки охват уменьшался, и линия оставалась висеть
      по прежнему центру. Теперь контур перерисовывается при каждой
      сборке.
    0.12.4
    - На панель сцены вернулся вид сверху: рисовать контур по плану
      удобнее именно с него.
    0.12.3
    - Подсказка держится всё время рисования и показывает число вершин,
      а не гаснет после первого клика.
    - За курсором тянется резинка от последней вершины, поэтому видно,
      куда ляжет следующая сторона.
    - В режиме рисования правая кнопка снимает последнюю вершину: она
      отбирается у камеры только на это время.
    0.12.2
    - Вершины больше не ставятся в пустоту: поблажка на попадание
      впритирку убрана, точка берётся только при настоящем пересечении
      луча с поверхностью.
    - Снять последнюю вершину и замкнуть контур теперь можно кнопками
      рядом со значком рисования: правая кнопка и Esc в сцене заняты
      камерой и до рисовалки не доходили.
    0.12.1
    - Рисование контура стало попадать. Луч бьётся вчетверо мельче
      (4096 отсчётов вместо 512), а если пересечения нет, но луч прошёл
      впритирку к поверхности, точка берётся по ближайшему сближению
      в пределах четверти ячейки.
    - Правая кнопка снимает последнюю вершину, Esc отменяет рисование,
      Backspace тоже снимает вершину. Красный шарик опроса убирается
      при входе в режим рисования.
    0.12.0
    - Инструменты переехали на сцену маленькими значками, как на холсте
      карты: рисование контура, сохранение контура слоем, копирование
      и сохранение снимка, пересборка при снятом автообновлении. Список
      слоёв больше не тесним кнопками. Значки рисуются кодом, поэтому
      одинаково выглядят в светлой и тёмной теме.
    0.11.1
    - В режиме рисования контура отказ больше не молчит: клик мимо
      поверхности и отсутствие растровых поверхностей в сцене
      объясняются в строке состояния.
    0.11.0
    - Контур обрезки рисуется прямо по сцене. Кнопка «Рисовать контур»,
      клик по поверхности ставит вершину, двойной клик замыкает. Готовый
      контур сразу режет сцену, кнопка «Контур в слой» сохраняет его
      слоем проекта.
    0.10.0
    - Обрезка сцены по контуру. В свойствах сцены выбирается любой
      полигональный слой и что показать: кусок внутри контура или всё
      остальное. Поверхности и тела пластов режутся по границе контура,
      а не по прямоугольнику охвата, дырки контура остаются дырками.
    0.9.5
    - Кадр сцены копируется в буфер обмена кнопкой «Копировать снимок»
      или сочетанием Ctrl+C: чаще всего снимок нужен, чтобы сразу
      вставить его в письмо или в записку, а не хранить файлом.
    0.9.4
    - На время сборки сцены курсор меняется на часы, а в строке
      состояния стоит «Собираю сцену…». Полоса не годилась: сборка идёт
      в потоке интерфейса, и бегущая полоска всё равно не двигалась бы.
    - Кнопок видов больше нет, сцена крутится мышью. Внизу осталась одна
      кнопка «Сохранить снимок…». Кнопка сборки появляется только тогда,
      когда снята галка «Обновлять автоматически».
    - Из строки состояния убрана подпись о числе поверхностей.
    0.9.2
    - Исправлена рекурсия в приёмнике элементов сцены: массовая замена
      вызовов переписала и его собственное тело, поэтому сборка падала
      с maximum recursion depth exceeded. Добавлена проверка, которая
      ищет вызовы по кругу между методами окна.
    0.9.1
    - Сбой сборки сцены больше не выглядит пустым окном: причина
      выводится в строку состояния, полный след уходит в журнал
      сообщений QGIS, раздел Isoliner3D.
    0.9.0
    - Галка слоя прячет и показывает его сразу, без пересборки сцены:
      элементы уже лежат в видеопамяти, поэтому отклик мгновенный
      на сцене любой тяжести.
    - Правка свойств сама пересобирает сцену, с задержкой в четверть
      секунды после последнего изменения, чтобы кручение ползунка
      не вызывало десяток сборок подряд. В свойствах сцены есть галка
      «Обновлять автоматически» на случай тяжёлой сцены.
    - Тела, линии и точки собираются в один меш на слой, а не на всю
      сцену: иначе слой нельзя было спрятать, не пересобирая всё.
    0.8.3
    - Убраны семь конструкций except/continue, на которых сканер каталога
      QGIS отклоняет загрузку (B112). Добавлена проверка, которая ищет
      такие места и не даёт им вернуться: сканер сообщает о них только
      при отправке, поэтому ловить их надо у себя.
    0.8.2
    - Слой, свойства которого ни разу не открывали, рисуется по своим
      умолчаниям. Показ читал словарь настроек напрямую и на пустой
      записи брал контурный режим, поэтому полигоны с Z выходили
      линиями, хотя в свойствах стояло «Телом (заливка)». После
      переустановки плагина словарь пуст, отсюда линии вместо тел.
    - Полигоны в режиме призмы больше не дублируются контуром.
    0.8.1
    - Поверхность полигона с переменной Z строится триангуляцией Делоне
      с сохранением вершинных отметок. Прежде такой объект уходил на
      веерную разбивку: она рассчитана на простые грани полиэдра, а на
      поясе между изолиниями тянула лучи через фигуру и теряла
      внутренние кольца. Пояс с нижней границей на одном уровне и
      верхней на другом теперь выходит скатом, шапки вершин и днища
      впадин остаются плоскими.
    - Распознавание плоского объекта смотрит все вершины, а не первые
      4096. Обход контура идёт сначала по одной границе, поэтому пояс в
      двадцать пять тысяч вершин объявлялся плоским по своему началу и
      скат превращался в плиту.
    - Отбор объектов в сцену считает вершины, а не объекты. Слой из 1174
      поясов показывался наполовину, упираясь в потолок в пятьсот
      объектов, тогда как весит он меньше одного растра.
    - Триангуляция Делоне без ограничений (сборки без GEOS 3.11)
      отсеивает треугольники вне фигуры по центру. Раньше на вогнутом
      контуре она затягивала заливы и закрывала дыры.
    0.8.0
    - Показ полигонов призмой: контур выдавливается от поля низа до поля
      верха, получаются две крышки и вертикальные стенки. Так ступени
      рельефа, уступы карьера и подсчётные блоки с кровлей и подошвой
      становятся объёмом, а не стопкой плит.
    - Диагностика геометрии слоя: если все объекты плоские, в окно
      выводится их число, размах отметок и подсказка про призму.
    0.7.4
    - Кэш триангуляции полигонов. Разбивка повторялась на каждую сборку
      сцены, хотя геометрия не менялась: на пятистах контурах это шесть
      секунд каждый раз. Ключ считается без разбора геометрии: слой,
      объект, число вершин, охват и отметка. Потолок 128 МБ.
    0.7.3
    - Тела собираются в один меш вместо элемента на объект, цвет каждого
      хранится в вершинах. На 500 объектах это было 500 наборов буферов
      плюс нормали в двойной точности на каждый: сотни мегабайт при
      34 МБ полезных данных. Шарики на устьях скважин собраны так же.
    - Прореживание считает бюджет вершин на всю сцену, а не потолок
      на слой. Одиночная поверхность получает вдесятеро больше деталей,
      чем раньше, а тяжёлая пачка перестаёт складывать миллионы вершин.
    - В отчёт перестройки добавлена оценка занятой видеопамяти.
    0.7.2
    - Честная триангуляция подключена и к полигонам со своей высотой Z.
      Раньше она работала только при отметке из поля, а плоский контур
      с собственной Z по-прежнему разбивался веером и давал лучи через
      всю фигуру. Теперь плоский объект распознаётся по постоянной Z
      и разбивается Делоне, а настоящая поверхность с переменной Z
      идёт прежним путём: её грани простые, веер для них верен.
    0.7.1
    - После слияния списков отбор слоёв перестал фильтровать по типу:
      векторный слой уходил в чтение как растр, не открывался и попадал
      в «Пропущено», хотя рисовался телами. Отбор снова разделён.
    0.7.0
    - Вкладки убраны, список слоёв один: растры и векторы вместе, как
      в дереве QGIS, тип слоя помечен в строке. Первой строкой закреплена
      «Сцена». Фильтр действует на весь список.
    - Разрез стал свойством линейного слоя: галка «Показывать плоскостью
      разреза» и выбор чертежа в свойствах. Отдельная вкладка не нужна,
      а разрезов в сцене может быть несколько, каждый со своим чертежом.
    - Окно свойств показывает набор по типу выделенного: растру каналы
      и окраска, вектору источник высоты и цвет, линейному слою вдобавок
      разрез, «Сцене» общие настройки.
    0.6.4
    - Кольца полигона больше не склеиваются в одну ломаную. Внутри части
      геометрии кольца идут подряд, и обход всех вершин соединял конец
      внешнего кольца с началом дыры: через фигуру тянулся прямой штрих,
      а на слое контуров рельефа такие штрихи давали паутину.
    - Число линий на слой ограничено полутора тысячами, с сообщением.
    0.6.3
    - У полигонального слоя появился выбор показа: контуром или телом.
      Вложенные контуры уровней осмысленно смотреть линиями, заливка
      нужна телам пласта и полиэдрам. Слой без Z по умолчанию идёт
      контуром, слой с Z телом.
    - Предупреждения выводятся в окно, а не только в журнал: нет высоты Z,
      не выбрано поле отметки, слишком много объектов.
    - Убрана подсказка над списком векторных слоёв.
    0.6.2
    - Полигоны разбиваются триангуляцией Делоне с ограничениями. Прежняя веерная разбивка годится для выпуклых
      граней полиэдра и на вогнутом контуре с дырами давала лучи через
      всю фигуру.
    - Несовместимые параметры слоя больше не выбираются: источник высоты
      гаснет у скважин, поле отметки доступно только при высоте из поля,
      поля отметок только в режиме скважин, «Своя высота геометрии»
      недоступна слою без Z и заменяется отметкой из поля.
    0.6.1
    - Линии и точки не рисовались вовсе: высота бралась через asPolyline
      и asPoint, а они отдают точки без Z. Теперь читаются настоящие
      вершины геометрии.
    - Полигональный слой без высоты Z больше не превращает сцену в кашу:
      такой слой пропускается с записью в журнал, а число объектов
      на слой ограничено пятьюстами.
    - Пустая сцена без объяснений заменена записью в журнал: не выбрано
      поле отметки, нет Z, слишком много объектов.
    0.6.0
    - Диалог перестроен. Все настройки убраны с главного окна в свойства:
      открываются двойным кликом по строке списка и правой кнопкой, как
      в QGIS. Первой строкой списка закреплена «Сцена», её свойства это
      преувеличение, разнос по Z, прозрачность и сторона текстуры.
    - Вкладка «Тела» стала «Векторами» и переехала на второе место.
      Она принимает любые векторные слои: полигоны с Z рисуются телами,
      линии и точки берут высоту из геометрии или из числового поля.
      Изолинии с отметкой в поле ложатся в сцену на своей высоте.
    - Скважины переехали в «Векторы» и стали режимом точечного слоя,
      поэтому вкладка «Разрезы» занята только разрезами.
    - Вокруг сцены появилась тонкая рамка, как у холста карты QGIS.
      Кнопки видов дополнены наклонным ракурсом.
    0.5.4
    - Выбранная окраска больше не сбрасывается на палитру при переходе
      на другой слой. Штатный findData сравнивает данные пункта через
      QVariant и на кортежах Python молча возвращает -1, поэтому в списке
      показывалась палитра, хотя в сцене оставалась прежняя окраска.
      Тем же были задеты списки чертежа разреза, скважин и каналов.
    0.5.3
    - В инструменте 1.07 вернулся вариант «Карта (растр для текстуры)»:
      при слиянии демо-инструментов он остался в коде, но пропал из списка
      вариантов и лишился своих параметров, поэтому выбрать его было
      нельзя. Добавлен тест: каждый вариант обязан быть виден в диалоге.
    0.5.2
    - Исправлен перенос группы инструментов из Isoliner: не были захвачены
      импорт QVariant и три служебных объекта пост-процессора мешей.
      Инструмент 1.04 при запуске падал, остальные при записи полей.
      Ошибку добавлен ловить новый тест: pyflakes по всем модулям
      с требованием нуля неопределённых имён.
    0.5.1
    - Первый выпуск. 3D-просмотр выделен в отдельный плагин из набора
      Isoliner. Поверхности из растров проекта, водонепроницаемые тела
      пластов из многоканальных гридов, скважины стволами с мачтами
      и подписями, плоскость разреза, полиэдры, TIN и MultiPolygon Z,
      опрос сцены кликом, снимок PNG. pyqtgraph и PyOpenGL в комплекте,
      устанавливать ничего не нужно.
    - Наложение карты на поверхность настоящей текстурой с затенением
      по нормали: ортофото, подложка, геологическая карта со всей
      символикой. Разрешение задаётся отдельно и от плотности сетки
      не зависит. Отдельно накладывается чертёж разреза на ленту,
      несколько разрезов показываются одновременно.
    - Группа Processing «Пласт и блочная модель», семь инструментов:
      сборка грида пласта, калькулятор запасов, блочная модель, экспорт
      поверхностей в меши 2DM, домены в канал пласта, разность запасов
      и генератор демонстрационных данных.
    - Кэш прочитанных гридов и отрисованных текстур: повторная сборка
      сцены идёт из памяти. Счётчики перестройки сцены в окне
      и с разбивкой по фазам в журнале сообщений.
    - Двуязычное руководство (PDF, RU и EN) в комплекте, открывается
      по языку интерфейса кнопкой Справка.
