+12

Работа со скриптами в Micromine Origin & Beyond

VVolobuev (Moderator (RUS)) 1 year ago in Micromine / Scripting updated by Илья (Moderator (RUS)) 9 months ago 6

Всем здравствуйте!

Использование скриптов в ГГИС Micromine для решения производственных задач стало носить массовый характер. Скрипты очень удобны, так как позволяют существенно расширить функционал Micromine. С каждым годом идей для скриптов и их самих становится всё больше. Для того, чтобы пользователям было проще находить уже готовые решения или создавать свои собственные была создана эта тема. 

Здесь Вы можете ознакомиться с руководством по подготовке Micromine к работе со скриптами, в котором описано как настроить Micromine для запуска скриптов. Для работы с большинством скриптов необходимо иметь установленный Python, руководство по его установке находится здесь.

Если у вас уже есть базовые знания языка программирования Python и вы хотите написать скрипт сами, можете воспользоваться нашим мануалом.

Когда будете делиться скриптами с участниками нашего форума, обязательно указывайте сведения о своём творении:

Версия Python
Версия Micromine
Пакетируемость

Image 3635Python упрощает жизнь)

+11

Построение осевых линий

Zaytsev_Andrey 5 months ago in Micromine / Scripting updated 5 months ago 0

Добрый день, коллеги!

В процессе моделирования возникла необходимость в автоматизации построения осевых линий каркасов и расчета элементов залегания по ним с дальнейшим использованием данных при динамическом поиске. Подробности применения подробно расписаны Евгением здесь https://forum.micromine.com/communities/12/topics/2304-uskorennyij-metod-postroeniya-i-vyichisleniya-elementov-zaleganiya

С целью автоматизации был написан скрипт, который по исходному каркасу строит осевые линии (горизонтальные и вертикальные вкрест простирания) с заданным интервалом сечений, а также рассчитывает элементы залегания. Возможно кому-то понадобятся осевые линии и для других целей.

Хочу поделится наработками, строго не судите первый подобный опыт в Python, возможны ошибки при запуске, но Windows он вам точно не снесёт)

Прилагаю две версии

  • Яндекс.Диск - готовый к запуску скрипт с уже запакованными предустановленными библиотеками и интерпретатором Python - 274 МБ
  • create_centerline.zip - скрипт без предустановленных библиотек (requirements.txt в наличии) - 2 МБ
  • README.pdf - небольшая пояснительная записка по скрипту

Буду рад обратной связи, комментариям по ошибкам и недочетам.

P.S. после распаковки архива в корневой папке проекта сам скрипт запускается через main.py

+8

Нарезать солид по заданному объему

Добрый день!

В нашем чате Майкромайн в телеграмме( https://t.me/microminechat ) был вопрос:

Как разделить каркас на равные части по объему. При этом задать угол плоскости, по которой буду резать каркас? 

Стандартным функционалом автоматически данную задачу не решить, поэтому был написан скрипт, которым я хочу с вами поделиться. Инструкция как запустить скрипт и сам скрипт в архиве. Если будут вопросы, пожелания по даработке, пишите.

Разделение каркаса по объемам.rar

Скрипт использует следующий подход:

1. Указанный каркас разбивается на более мелкие срезы, мощность которых мы задаем в предела от 0.1м до 10м. 

Для определения направления плоскости можно использовать Ортогональные плоскости (План, На север , на Запад) или можно задать Азимут падения и Угол падения плоскости, а также координату точки отсчета для Неортогональных плоскостей.

Image 3902

Image 3901

2. Далее последовательно складываются объемы срезов пока не будет достигнут заданный целевой объем. Как только целевой объем достигнут, срезам приваривается уникальный номер в атрибут Code, и для последующих срезов расчет накопленного объемов начинается с начала и так последовательно по всем срезам.

Данный алгоритм не позволяет идеально нарезать каркасы на заданный объем, но чем меньше срез, тем ближе к целевому значению, но увеличивается время работы скрипта.

Также сделана обратная проверка, для максимального приближения к целевому значению. Например, сложив первые три среза мы получаем объем 999 при целевом 1000, так как 999<1000 необходимо добавить еще срез, но при добавлении получаем объем 1100. Логичнее будет оставить 999, так как он ближе к целевому значению.

Каркасы срезов  сохраняются во временный файл slice.tridb в паке Разделение каркаса по объемам.


3. Третьим шагом каркасы объединяются по присвоенному коду и загружаются в визекс с чередующей раскраской.

Image 3903


Надеюсь эта информация вам будет полезна.

C Уважением,

Илья


+6

Пример автоматизации расчета фактических потерь и разубоживания на подземных горных работах

Илья (Moderator (RUS)) 8 months ago in Micromine / Scripting updated 8 months ago 0

Ниже пойдет речь о практическом примере автоматизации с помощью скрипта, который позволил упростить процесс расчета фактических потерь и разубоживания по очистным камерам. Так как каждое предприятие использует свои методы расчета, все приведенные формулы и показатели носят чисто информационный характер и не могут быть использованы как руководство к действию. 

Исходные данные для подсчета основных показателей:

  1. Каркас камеры (проект)
  2. Каркас камеры (съемка сканером)
  3. Каркасы фактических горных выработок
  4. Каркас рудного тела с вырезанными отработанными (заложенными) камерами
  5. Каркас груза, который остался в камере.

Image 4039

Показатели, которые необходимо определить:

  • Фактические потери П (%)
  • Фактическое разубоживание Р (%)
  • Объем каркаса камеры Vк3)
  • Объем каркаса потерь Vп3)
  • Объем каркаса разубоживания Vр3)
  • Объем каркаса горных выработок Vг.в. 3)
  • Объем каркаса груза Vг 3)
  • Объем груза в целике Vг.ц. 3)

Image 4040

  • Объем под закладку Vзакл. 3)

Image 4049

Vобщий – Объем общего каркаса(выработки, камера, груз)

Для расчета потерь (П) и разубоживания (Р) используются следующие формулы:

Image 4041

С помощью функций пересечения каркасов мы можем получить все необходимые показатели, чтобы подставить их в формулы для расчетов, но это отнимало у специалиста много времени. Поэтому был написан скрипт, который производит все необходимые операции по пересечению каркасов, достает из них объемы и подставляет в формулы и выводит все необходимые показатели в виде отчета.

Для запуска скрипта необходимо:

  1. Установить Python 3.8
  2. Установить библиотеку Pyside2
  3. Скопируйте папку Расчет потери и разубоживание в проект
  4. Открыть и запустить файл Start.py

Image 4042

В открывшемся окне на вкладке Ввод выбираем исходные каркасы, указываем имя камеры и задаем объемный вес руды и породы.

Image 4043

На вкладке Вывод укажите путь к итоговому отчету и нажмите Запустить.

Image 4044

После завершения работы скрипта закройте его и у Вас откроет отчет.

Image 4045

Также будут созданы и загружены в визекс итоговые каркасы.

Image 4046

Cкрипт и исходные данные можете скачать ниже:

Расчет потери и разубоживание.rar

Илья

+5

Вложенные макросы

Илья (Moderator (RUS)) 8 months ago in Micromine / Scripting updated 8 months ago 2

Добрый день!

Сегодня рассмотрим ситуацию, когда у Вас есть макрос и в нем используется функция, которая работает n-ое количество раз. Параметр n не постоянен и Вам приходится каждый раз добавлять или удалять строки в макросе.

Например, это может быть функция интерполяции содержаний в БМ для каждого каркаса рудного тела отдельно, когда количество каркасов изменяется или построение проектных каркасов выработок с разным сечением, где количество выработок также не постоянно и другие различные задачи.

Чтобы не добавлять новые строки в макросе, можно использовать «Вложенные макросы». Суть заключается в том, что макрос запускает другой макрос, который меняется в зависимости от условий.

Рассмотрим такой макрос на примере построения проектных каркасов горных выработок с разными сечениями и изменяюшимся количеством выработок:

Исходные данные:

1. Файл осевых линий с разными параметрами сечения в свойствах линий.

Image 4000

2. Пустой макрос для создания нового макроса, в который будет записываться информация.

Image 4001

Описание мароса: 

1. Cоздаем @Исполняющий макрос на основании шаблона. Именно этот макрос будет в дальнейшем изменяться от условий.

Image 4002

2. Используя функцию генератор отчётов, создадим отчет из файла осевых линий . В этом файле будут все имена горных выработок и их параметры сечения. Дальше эти параметры будут использоваться для построения каркаса.

Image 4003

3. Чтобы итоговый tridb файл при запуске макроса очищался и имел необходимые атрибуты, сделаем копию tridb на основании шаблона. 

Image 4004

4. Далее нам необходимо перенести информацию в исполняющий макрос из отчета по осевым линиям. Сделать это можно через функцию Объединить. Также предварительно необходимо создать форму для функции, которая будет использоваться в исполняющем макросе. 

Image 4005


Исполняющий макрос примет вид:

Image 4006

5. Последним шагом необходимо запустить Исполняющий макрос внутри внутри нашего макроса..

Image 4007


В итоге запустив этот макрос мы построим каркасы по всем осевым линиям, и даже если количество выработок поменяется, нам не придется переделывать макрос.


Надеюсь информация Вам будет полезна.

Илья

+5

Выбрать точки с помощью стринга

Всем здравствуйте!


Быть может, кому-то будет полезен скрипт, о котором пойдет речь в этом посте.


Скрипт позволяет выбрать точки, находящиеся внутри нарисованного вами полигона или вне него, так как удалять вручную все ненужные точки при большом наборе данных может оказаться трудоемкой и нудной работой.

Пусть у вас имеются набор точек, и вы желаете оставить те точки, которые попадают внутрь полигона:

Image 205


Запускаете скрипт, выбираете файл точек и файл стринга и нажимаете ОК.


Image 206


В результате будет создан (имя созданного файла образуется из старого с добавлением в конце _cut) и загружен в Vizex файл точек, которые находятся внутри полигона:


Image 207


Если вы хотите оставить точки вне полигона, то надо поставить галочку Вне полигона и проделать те же самые операции. Скрипт находится по ссылке Выбрать точки стрингом.py, для его работы необходим также файл mmfiles.py, который должен находиться в той же папке, что и скрипт Выбрать точки стрингом (в папке проекта).


Примечание: данный скрипт работает только в плане

+3

Автоматическое создания аннотации в виде таблицы по скважине/борозде

Добрый день!


Разберем следующую задачу:

Для создания графики нам необходимо визуализировать информацию вдоль скважины, в Майкромайн для этого есть специальные формы, которые позволяют создать штриховки, метки и прочее для каждого интервала вдоль скважины, но данная задача подразумевает автоматическое создание аннотации в виде таблицы, как показано на Рисунке 1.

Image 4169

Рисунок 1. Аннотация в виде таблицы

Решение:

Для создания такой таблицы в автоматическом режиме был создан скрипт.

Для запуска скрипта необходимо:

1. Установить python 3.8.5 и библиотеку Pyside2, более подробно по этой ссылке.

2. Для интервалов файле опробования предварительно необходимо рассчитать координаты.

3. Скачайте архив (Визуализация данных по скважине) со скриптом и разместите в удобном для Вас месте, лучшее всего скопировать в папку проекта Майкромайн.

4. Откройте (Скриптинг/Скрипты/Открыть) и запустите скрипт Start.py в папке «Визуализация данных по скважине»Image 4170

    Рисунок 2. Запуск скрипта

    5. Откроется диалоговое окно, в верхней части которого необходимо выбрать файл опробования, после этого необходимо указать поле с именем скважины и поля координат.Image 4171

      Рисунок 3. Диалоговое окно скрипта

      6. Далее нажимаем специальную функцию , после нажатия которой появится возможность выбора скважины.

      Image 4172

        Рисунок 4. Выбор файла опробования

        7. После выбора скважины необходимо нажать на специальную функцию , которая загрузит в таблицу ниже, все столбцы из файла. В столбце Вывод необходимо указать, какие столбцы будут выведены в итоговую таблицу, также у Вас есть возможность указать количество знаков после запятой, для значений в таблице.

        Image 4173

        Рисунок 5. Определение параметров таблицы

        Также будет рассчитана координат первой пробы, относительно этой координаты будет отстроена таблица, при необходимости её можно изменить.

        Image 4174

        Рисунок 6. Точка отсчета для построения таблицы

        8. В нижней части окна укажите коэффициент размера ячейки таблицы. При коэффициенте 1 ячейка таблицы будет размером 3 на 1 метр, при коэффициенте 2 будет 6 на 2 метра.

        9. Последним шагом нажмите Запустить. В визекса загрузиться итоговая таблица (Рисунок 1)

        Надеюсь скрипт будет Вам полезен. Если будут идеи по доработке данного скрипта, пишите.

        Ссылка на итоговый скрипт.

          +3

          Загрузка множества растров из папки с автоматическим сохранением всех форм

          Добрый день!

          Рассмотрим следующую задачу:

          У нас есть несколько папок с привязанными изображениями в Майкромайн, в каждой папке 1000+ растров. Нам необходимо загрузить их все в ММ и сохранить формы.


          Решение:

          Можно воспользоваться стандартным способом. Для этого необходимо перетащить все изображения в визекс, потом нажать правой кнопкой мыши по любому слою и выбрать Сохранить все формы, после этого 1000+ раз кликнуть ОК. Понятно, что данный способ далек от автоматизации, поэтому ниже предлагается решение средствами Python.

          Для запуска скрипта необходимо:

          1. Установить Python 3.8.5+. Инструкция по этой  ссылке.

          2. Открыть файл скрипта (Скриптинг/Открыть)

          3. В разделе для изменений указать путь к папки с растрами и расширение.(строка 7 и строка 9)

          Image 4112

          4. Запустить скрипт 

          Image 4113

          Скрипт работает следующим образом:

          1. В указанной директории находит все файлы (в том числе во вложенных папках) с указанным расширением и сохраняет пути в список.

          2. По очереди подставляет найденные пути в форму загрузки изображения. Для загрузки используется стандартная форма с файлом привязок Micromine (GRF).

          На этом же этапе происходит сохранение формы.

          Заголовок формы — Это имя файла.

          Папка в формах - Папка из указанного пути.

          В моем случаи результат будет выглядеть так:

          Image 4115

          В формах:

          Image 4116

          Обработанные растры:

          Image 4117

          Файл скрипта

          Илья

          +3

          Скрипт для разбиения файла по полю

          Добрый день.

          Я решил добавить на форум скрипт, являющийся по сути своей утилитой по работе с файлами данных (DAT, STR, RPT). Он позволяет разбить исходный файл по какому-то уникальному значению, поместив каждый получивший набор данных в отдельный файл.

          Так выглядит окно скрипта:

          Image 628

          На ввод надо указать исходный файл, который вы желаете разделить и указать столбец в Поле, в котором хранятся те самые уникальные значения.
          На вывод выбирается директория, в которую будут записаны получившиеся файлы. В поле Префикс нужно указать имя файла, которое будет стоять в названии файла перед порядковым номером. Пример: Префикс = Блок_, в результате получатся файлы Блок_1, Блок_2 и т.д.

          Дополнительные возможности:
          В случае, если вы разбивали файл стрингов или точек, то вы можете сразу загрузить их в Визекс после того, как скрипт завершит разбиение. Для этого надо поставить галочку у поля Автозагрузка, указать все поля и после нажатия на ОК, скрипт загрузит все созданные файлы в Micromine.

          Желаю всем успехов!

          Сам скрипт находится тут: GUI - Разделить файл по полю.py

          Для запуска скрипта необходимо установить Python на компьютер, на котором вы пытаетесь запустить скрипт, так как он использует графическую оболочку Tkinter, не встроенную в Micromine. Ниже выберите нужную для вас ссылку:
          • Micromine 2013 – скачайте Python по ссылке
          • Micromine 2014 32bit – скачайте Python по ссылке.
          • Micromine 2014 64bit – скачайте Python по ссылке.
          Важно:
          • Нежелательно устанавливать несколько из представленных выше версий Python на один компьютер.
          • После установки Python нужно перезапустить Micromine, если он был запущен.
          Если возникнут какие-то проблемы с запуском или работой скрипта, обращайтесь.

          +3

          Экспорт набора каркасов из TDB в MDB

          Pavel Yakovlev (Moderator (RUS)) 10 years ago in Micromine / Scripting updated by byury 8 years ago 1

          Всем доброго времени суток!


          Вашему вниманию предлагается скрипт в двух вариациях для экспорта набора каркасов из TDB в MDB. Для работы скрипта необходимо иметь установленный модуль для работы с базами данных: pyodbc-3.0.6.win32-py3.3.exe (устанавливать в директорию, где установлен Python).

          1. Export TDB-MDB GUI.py - с графических интерфейсом.

          После запуска появится окно следующее окно:


          Image 110


          Далее вы выбираете файл TDB (можно двойным кликом по полю ввода), и вводите или выбираете файл MDB. Нажимаете ОК, и все каркасы, находящиеся в TDB, будут экспортированы. В случае незаполненных полей скрипт выдаст сообщение об ошибке:


          Image 111


          2. Export TDB-MDB.py

          Данный скрипт не имеет графического интерфейса. Для его работы, необходимо вручную прописать в окне скрипта имена файлов (без расширения!). Далее запустить скрипт, после чего начнется экспорт каркасов.


          Image 112


          Примечание. Для корректной работы скрипта файлы TDB должны обязательно лежать в корне папки проекта.

          Если будут возникать какие-то вопросы, спрашивайте. Совсем скоро на форуме будут появляться и другие скрипты.