你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
42 行
1.6 KiB
Python
42 行
1.6 KiB
Python
import argparse
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
import h5py
|
|
|
|
from .convert import convert_file
|
|
|
|
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 user_libs.STLtoVoxel.stltovoxel stlfilename matindex dx_dy_dz",
|
|
)
|
|
parser.add_argument("stlfilename", help="name of STL file to convert including path")
|
|
parser.add_argument("-matindex", type=int, required=True, help="index of material to extract from STL file")
|
|
parser.add_argument(
|
|
"-dxdydz", nargs="+", type=float, required=True, help="discretisation to use in voxelisation process"
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
filename_stl = Path(args.stlfilename)
|
|
dxdydz = tuple(args.dxdydz)
|
|
|
|
logger.info(f"\nConverting STL file: {filename_stl.name}")
|
|
model_array = convert_file(filename_stl, dxdydz)
|
|
model_array[model_array == 0] = -1
|
|
model_array[model_array == 1] = args.matindex
|
|
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
|
|
filename_hdf5 = filename_stl.with_suffix(".h5")
|
|
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.name}")
|