/
Zlalex
/
Plasma_Engine_Design
Обзор
Документация
Войти
/
Zlalex
/
Plasma_Engine_Design
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
Realtime
MaskGen.py
41 строка
2 KB
zlalex
Structure generation
01 май 2025, 15:22
01 май 2025, 15:22
8f09b3b
Код
Авторство
О чём код?
import numpy as np from stl import mesh def read_stl(file_path): """Чтение STL-файла и расчет габаритного куба""" model = mesh.Mesh.from_file(file_path) min_coords = np.min(model.points.reshape(-1, 3), axis=0) max_coords = np.max(model.points.reshape(-1, 3), axis=0) return model, (min_coords, max_coords) def create_voxel_grid(bounding_box, voxel_size): """Создание воксельной сетки""" min_coords, max_coords = bounding_box grid = [ np.arange(min_coords[i], max_coords[i] + voxel_size, voxel_size) for i in range(3) ] return np.meshgrid(*grid, indexing='ij') def generate_mask(model, grid, voxel_size): """Генерация матрицы-маски""" mask = np.zeros([len(axis)-1 for axis in grid], dtype=bool) vertices = model.points.reshape(-1, 3) for i in range(len(grid[0])-1): for j in range(len(grid[1])-1): for k in range(len(grid[2])-1): # Проверка принадлежности вершин к вокселю in_x = (vertices[:,0] >= grid[0][i]) & (vertices[:,0] < grid[0][i+1]) in_y = (vertices[:,1] >= grid[1][j]) & (vertices[:,1] < grid[1][j+1]) in_z = (vertices[:,2] >= grid[2][k]) & (vertices[:,2] < grid[2][k+1]) mask[i,j,k] = np.any(in_x & in_y & in_z) return mask def GetMask(file_path, voxel_size = 1.0): # Пример использования model, bbox = read_stl('model.stl') # Укажите путь к файлу voxel_size = 1.0 # Размер вокселя grid = create_voxel_grid(bbox, voxel_size) voxel_mask = generate_mask(model, grid, voxel_size) return voxel_mask