CAD to Geant4 GDML converter with automatic mesh repair
Project description
CAD to Geant4 Converter Suite
A collection of tools for converting CAD files (STEP, STL) to GDML for use in Geant4 simulations.
Requirements
- Python 3.10 or above
- pyg4ometry >= 1.0.0
- vtk >= 9.0.0
- trimesh (for automatic mesh repair)
- pymeshlab (optional, for advanced mesh repair of stubborn cases)
Install dependencies:
pip install -r requirements.txt
pip install pymeshlab # Optional but recommended
Overview
Converting CAD to GDML/Geant4 requires care; a few export best-practices greatly improve results (trim small parts, preserve named components and hierarchy, avoid intended overlaps).
What's new (concise):
- Automatic mesh check and repair on all tessellated volumes before GDML export
- CI added (pytest + Black + Flake8) to keep quality steady
- Geometry overlap checking with Geant4 via check_overlaps.py
Note: GDML output typically lacks detailed material assignments. Post-process the GDML with gdml-editor to add or correct materials: https://github.com/drflei/gdml-editor
Main Application: cad_g4_conv.py
Unified converter supporting three workflows. All conversions automatically check and repair tessellated meshes before saving to GDML.
Quick Start
# STEP native conversion
python cad_g4_conv.py --step-file assembly.STEP
# STL+STEP mesh conversion
python cad_g4_conv.py --step-file assembly.STEP --stl-dir STLs/
# Single STL conversion
python cad_g4_conv.py --stl-file mesh.stl
All conversions automatically check and repair tessellated meshes before export.
Automatic Mesh Repair
The converter includes a comprehensive 10-phase mesh repair system that automatically fixes common issues:
- Basic cleanup: Removes duplicate/unreferenced vertices
- Normal fixing: Ensures consistent face orientations
- Degenerate removal: Removes zero-area faces and duplicates
- Broken face repair: Detects and removes topologically broken faces
- Hole filling: Iteratively attempts to close surface holes (up to 3 attempts)
- Inversion fix: Corrects inverted face orientations
- Final cleanup: Merges vertices after all repairs
- Winding correction: Fixes inconsistent face winding
- Fallback strategies: Uses convex hull or voxelization for severely broken meshes
- PyMeshLab fallback (optional): For very stubborn meshes, uses MeshLab's industrial-strength repair algorithms
Most meshes are repaired automatically. The system tries progressively more aggressive techniques:
- Phases 1-8 handle 90%+ of issues using trimesh (lightweight, fast)
- Phase 9 applies convex hull for small holes or voxelization for complex geometry
- Phase 10 uses PyMeshLab's powerful algorithms for the most challenging cases (requires
pip install pymeshlab)
Example repair output:
stl_solid_8: watertight_before=False watertight_after=True
notes=removed_92_broken_faces;subdivided;used_convex_hull(vol_diff=0.04);
Optional: PyMeshLab for stubborn meshes
pip install pymeshlab # Optional but recommended for complex meshes
If installed, PyMeshLab provides a final fallback using MeshLab's industrial-strength repair algorithms.
Files in This Directory
Main Tools
- cad_g4_conv.py - Unified CAD to GDML converter
- run_vtkviewer.py - VTK-based geometry viewer for GDML/STL/STEP files
- check_overlaps.py - Geant4 geometry overlap checker
Documentation
- README.md - This file, main project documentation
- docs/QUICKREF.md - Quick reference and cheatsheet
- docs/DETAILED_USAGE.md - Complete usage guide
- docs/TESTING.md - Test suite documentation
Scripts
- demo_all_workflows.sh - Demonstrates all three workflows
- test_cad_g4_conv.sh - Automated testing script
Installation
From PyPI (Recommended)
pip install cad-g4-conv
From Source
git clone https://github.com/drflei/cad_g4_conv.git
cd cad_g4_conv
pip install -e .
Requirements
- Python 3.10+
- pyg4ometry >= 1.0.0
- VTK >= 9.0.0
- trimesh
- geant4_pybind (for overlap checking)
Usage
See docs/DETAILED_USAGE.md for complete documentation.
Three Workflows
| Workflow | Command | Best For |
|---|---|---|
| STEP Native | --step-file X.STEP |
Assemblies with hierarchy |
| STL+STEP | --step-file X.STEP --stl-dir STLs/ |
High-quality meshes |
| Single STL | --stl-file mesh.stl |
Single meshes, prototyping |
Examples
# 1. STEP native with hierarchy
python cad_g4_conv.py --step-file detector.STEP -o detector.gdml
# 2. STL+STEP with auto-sized world
python cad_g4_conv.py \
--step-file assembly.STEP \
--stl-dir parts/ \
-o assembly.gdml
# 3. Single STL (simplest)
python cad_g4_conv.py --stl-file housing.stl -o housing.gdml
# 4. With overlap checking
python cad_g4_conv.py --step-file detector.STEP --check-overlaps
# 5. Flat mode (robust fallback)
python cad_g4_conv.py --step-file complex.STEP --flat
# 6. Center geometry at world origin
python cad_g4_conv.py --step-file detector.STEP --center-origin
# 7. Logging example
# Write detailed logs to 'convert.log'
python cad_g4_conv.py --stl-file mesh.stl --log-file convert.log --log-level DEBUG
# Notes:
# - All tessellated meshes are automatically checked and repaired before export
# - Repairs use trimesh (fix_normals, merge_vertices, remove degenerates, fill_holes, fix_inversion)
# - `--log-file` / `--log-level` control logging output for debugging and reproducibility
Running from Other Directories
You can run the tools from anywhere by specifying the full path:
# From any directory
python ~/cad_g4_conv/cad_g4_conv.py --stl-file /path/to/mesh.stl
Or add to PATH:
# Add to ~/.bashrc
export PATH="$HOME/cad_g4_conv:$PATH"
# Then use directly
cad_g4_conv.py --stl-file mesh.stl
Demo
Run the comprehensive demo to see all workflows in action:
cd ~/cad_g4_conv
./demo_all_workflows.sh
Testing
Run automated tests:
cd ~/cad_g4_conv
./test_cad_g4_conv.sh
Visualization
After conversion, visualize the GDML with the built-in VTK viewer:
python run_vtkviewer.py output.gdml
# Or use the viewer from gdml_editor package
python -m gdml_editor.run_vtkviewer output.gdml
The viewer supports:
- GDML files (Geant4 geometry)
- STL files (triangular meshes)
- STEP files (CAD assemblies)
- FLUKA input files (.inp)
See run_vtkviewer.py --help for all options.
Overlap Checking
Check for geometry overlaps using Geant4's built-in overlap checker:
python check_overlaps.py output.gdml
# With custom parameters
python check_overlaps.py output.gdml 2000 0.01 20.0
Arguments:
gdml_file- Path to GDML geometry fileresolution- Number of points to check (default: 1000)tolerance- Tolerance in mm (default: 0.001)world_size_m- World half-size in meters (default: 10.0)
Requirements:
pip install geant4_pybind
The tool loads the geometry into Geant4 and runs CheckOverlaps() on all volumes, reporting:
- Overlapping volume pairs
- Surface defects/holes in tessellated solids
- Detailed overlap locations and partners
Example output:
⚠️ FOUND 2 UNIQUE OVERLAPPING PAIR(S):
1. sensor_1 === housing
2. pcb_volume === sensor_2
Help
python cad_g4_conv.py --help
Features (short)
- Supports STEP-native conversion (hierarchy + CSG where possible), STL+STEP mesh-based conversion, and single-STL conversions.
- Automatic 10-phase mesh check and repair on all tessellated volumes before GDML export (trimesh + optional pymeshlab).
- Auto-sized and centered world volume, fuzzy name matching for STL→STEP associations, and overlap diagnostics.
Documentation
For detailed usage, see the docs/ folder:
- docs/QUICKREF.md - Quick reference and command cheatsheet
- docs/DETAILED_USAGE.md - Complete usage guide with examples
- docs/TESTING.md - Test suite and CI/CD documentation
License
GNU V3.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cad_g4_conv-1.0.0.tar.gz.
File metadata
- Download URL: cad_g4_conv-1.0.0.tar.gz
- Upload date:
- Size: 48.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a868058f4b0dd70f40f5724f7f9ceceb69b915d4c91b0107c420808a63cb20d3
|
|
| MD5 |
9af0c52d0f792e829558887889fe276b
|
|
| BLAKE2b-256 |
57418a9602e34afba43f4f7a95b6705b6d4717f0137b3263f51e927657ced67d
|
File details
Details for the file cad_g4_conv-1.0.0-py3-none-any.whl.
File metadata
- Download URL: cad_g4_conv-1.0.0-py3-none-any.whl
- Upload date:
- Size: 40.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
022c5a772236358e94b721cede39af7a62e87519dbfb8600d0a9c4e35619a493
|
|
| MD5 |
57b2b515c45dd6612f44102a76ed6aae
|
|
| BLAKE2b-256 |
b37081eef9611b34ebbe610e196d8a2f3c39e613eec3b22b3588b4372c2203c6
|