你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
56 行
2.3 KiB
Python
56 行
2.3 KiB
Python
import argparse
|
|
import glob
|
|
import logging
|
|
import os
|
|
|
|
import h5py
|
|
|
|
from .convert import convert_files
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logging.basicConfig(format="%(message)s", level=logging.INFO)
|
|
|
|
if __name__ == "__main__":
|
|
# Parse command line arguments
|
|
parser = argparse.ArgumentParser(
|
|
description="Allows the user to convert a STL files to voxelized mesh.",
|
|
usage="cd gprMax; python -m toolboxes.STLtoVoxel.stltovoxel stlfilename -matindex -dxdydz",
|
|
)
|
|
parser.add_argument(
|
|
"stlfiles", help="can be the filename of a single STL file, or the path to folder containing multiple STL files"
|
|
)
|
|
parser.add_argument("-dxdydz", type=float, required=True, help="discretisation to use in voxelisation process")
|
|
args = parser.parse_args()
|
|
|
|
if os.path.isdir(args.stlfiles):
|
|
path = args.stlfiles
|
|
files = sorted(glob.glob(path + "/*.stl"))
|
|
filename_hdf5 = os.path.join(path, os.path.basename(path) + "_geo.h5")
|
|
filename_mats = os.path.join(path, os.path.basename(path) + "_mats.txt")
|
|
elif os.path.isfile(args.stlfiles):
|
|
path = os.path.dirname(args.stlfiles)
|
|
files = args.stlfiles
|
|
filename_hdf5 = os.path.join(path, os.path.split(os.path.basename(path))[0] + "_geo.h5")
|
|
filename_mats = os.path.join(path, os.path.split(os.path.basename(path))[0] + "_mats.txt")
|
|
|
|
dxdydz = (args.dxdydz, args.dxdydz, args.dxdydz)
|
|
|
|
newline = "\n\t"
|
|
logger.info(f"\nConverting STL file(s): {newline.join(files)}")
|
|
model_array = convert_files(files, dxdydz)
|
|
logger.info(f"Number of voxels: {model_array.shape[0]} x {model_array.shape[1]} x {model_array.shape[2]}")
|
|
logger.info(f"Spatial discretisation: {dxdydz[0]} x {dxdydz[1]} x {dxdydz[2]}m")
|
|
|
|
# Write HDF5 file for gprMax using voxels
|
|
with h5py.File(filename_hdf5, "w") as f:
|
|
f.create_dataset("data", data=model_array)
|
|
f.attrs["dx_dy_dz"] = (dxdydz[0], dxdydz[1], dxdydz[2])
|
|
logger.info(f"Written geometry object file: {filename_hdf5}")
|
|
|
|
# Write materials file for gprMax
|
|
# with open(filename_mats, 'w') as f:
|
|
# for i, file in enumerate(files):
|
|
# name = os.path.splitext(os.path.basename(file))[0]
|
|
# f.write(f"#material: {i + 1} 0 1 0 {name}" + "\n")
|
|
# logger.info(f"Written materials file: {filename_mats}")
|