High-resolution tubular joint meshing toolkit with a GTKmm user interface, Abaqus export tooling, and a library of reusable finite-element primitives. Originally built for offshore T-joint design studies, the project now targets a modern developer workflow with containers, reproducible builds, and documentation automation.
- Fast quad/tri mesh generators for tubular joints, weld layers, and chord/brace transitions
- GTKmm desktop UI (
MeshGUI.glade) for parameter entry, preview, and batch generation - Abaqus/GID export helpers plus post-processing utilities
- Fresh build tooling: portable
Makefile,CMakeLists.txt, VS Code dev-container, and Docker dev image - Doxygen docs + pluggable test scaffolding ready for extension
+------------------------------------+
| GTKmm GUI (UI) |
| GUIwindow, dialogs, user inputs |
+-----------------+------------------+
|
+-------------------+-------------------+
| Mesh Orchestration & Joint Modelling |
| JointModel, WorkingDirectory, SCF |
+-------------------+-------------------+
|
+---------------------+---------------------+
| Mesh Component Library (Geometry Core) |
| NodeClass, QuadMeshXX, Triangle/Prism... |
+---------------------+---------------------+
|
+---------------------+---------------------+
| Output & Post-Processing Pipelines |
| Abaqus_PostProc_Class, GID exporters |
+------------------------------------------+
+-------------------------------------------------------------+
| Langs | C++14, GTKmm-3, Glibmm, Boost, GSL, PLplot |
| Build | Make, CMake, pkg-config, ccache (opt) |
| Tools | Docker, VS Code Dev Container, Valgrind, Doxygen |
| Docs | Doxygen, Graphviz, LaTeX toolchain |
+-------------------------------------------------------------+
MeshGTKmm_03/
|-- main.cpp # GTKmm entry point
|-- GUIwindow.{h,cpp} # Gtk::Window implementation
|-- JointModel.{h,cpp} # T-joint orchestration
|-- MeshComponents.{h,cpp} # Mesh primitive registry
|-- QuadMesh*/ # Quad mesh variants & transitions
|-- TriangleClass.*, HexClass.*, PrismClass.*
|-- Abaqus_PostProc_Class.* # FE export helpers
|-- MeshGUI.glade # GtkBuilder UI definition
|-- Documentation/ # Doxygen outputs (generated)
|-- Logs/ # Runtime and solver logs
|-- Makefile # Rich GNU Make workflow
|-- CMakeLists.txt # Modern CMake alternative
|-- Dockerfile.dev # Reproducible dev image
`-- .devcontainer/ # VS Code container config
git clone https://github.com/Hossein-Roshandel/MeshGTKmm_03.git
cd MeshGTKmm_03- Install VS Code + Dev Containers extension.
- Open the folder, press
Ctrl+Shift+P→Dev Containers: Reopen in Container. - The container uses
Dockerfile.devand ships all toolchains (GTKmm, GSL, Boost, PLplot, Doxygen).
sudo apt update
sudo apt install build-essential cmake pkg-config ccache \
libgtkmm-3.0-dev libglibmm-2.4-dev \
libatkmm-1.6-dev libpangomm-1.4-dev libcairomm-1.0-dev \
libsigc++-2.0-dev libboost-all-dev libgsl-dev libplplot-dev \
doxygen graphviz valgrindmake # build (default target)
make run # build then launch GUI
make debug # build with sanitizers
make release # optimized build
make docs # generate Doxygen docs into Documentation/html
make valgrind # run with Valgrind and log to Logs/valgrind.log
make clean # remove build artifactsmake lint # run clang-tidy static analysis
make lint-fix # run clang-tidy with automatic fixes
make format # format code with clang-format
make format-check # check if code is properly formatted
make check-quality # run format-check and lint togetherArtifacts land in build/bin/meshgtkmm_03 and config/scratch directories under build/.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
cmake --build build --target run # build + run
cmake --build build --target docs # generate documentation
cmake --build build --target lint # run clang-tidy
cmake --build build --target lint-fix # run clang-tidy with auto-fix
cmake --build build --target format # format code
cmake --build build --target format-check # check formatting
cmake --build build --target check-quality # complete quality check
cmake --install build --prefix ./dist # staged installEnable sanitizers or warnings tweaking:
cmake -S . -B build -DENABLE_SANITIZERS=ON -DENABLE_WARNINGS=ON- Build locally:
docker build -f Dockerfile.dev -t meshgtkmm-dev . - Run:
docker run --rm -it -v "$PWD":/workspace meshgtkmm-dev - Inside the container you get
make,cmake, GTKmm SDK, Boost, GSL, PLplot, Doxygen, Valgrind, and helpful aliases (ll,cls).
- Source configuration lives in
Doxyfile. - Generated HTML/PDF artefacts are ignored via
.gitignore. make docsorcmake --build build --target docsrebuilds the docs.- Consider enabling the LaTeX toolchain (already pre-installed in the container) for PDF exports.
make testis wired for future unit/integration suites (adds scaffolding undertests/).make valgrindprovides memory diagnostics.- Add Catch2/GoogleTest modules and wire them through CMake when ready (
ENABLE_TESTINGoption already in place).
The project includes .clang-tidy configuration for static analysis:
- Detects common bugs, performance issues, and code smells
- Enforces modern C++ best practices
- Checks for memory safety and undefined behavior
- Run with
make lintorcmake --build build --target lint - Auto-fix issues with
make lint-fixorcmake --build build --target lint-fix
The project includes .clang-format configuration for consistent code style:
- Based on Google C++ Style Guide with custom adjustments
- 4-space indentation, 120-column width
- Automatic formatting with
make formatorcmake --build build --target format - Check formatting with
make format-checkorcmake --build build --target format-check
# Ubuntu/Debian
sudo apt-get install clang-tidy clang-format
# Already included in the dev containerRun all quality checks at once:
make check-quality # Makefile
cmake --build build --target check-quality # CMake- Run
make check-depsbefore first build to ensure the toolchain is present. - Prefer feature branches off
MeshGTKmm_04. - Keep the ASCII project diagrams up to date when modifying the architecture.
- Document new build flags in this README.
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.
The BSD 3-Clause License is:
- Permissive: Allows commercial and non-commercial use
- Simple: Easy to understand and comply with
- Academic-friendly: Ideal for research and educational projects
- Compatible: Works well with most other open-source licenses
- No copyleft: Derivatives don't need to be open source
This license allows you to:
- ✅ Use the software for any purpose
- ✅ Modify the source code
- ✅ Distribute original or modified versions
- ✅ Sublicense and use in proprietary software
The only requirements are:
- Keep the copyright notice
- Include the license text
- Don't use the author's name for endorsement without permission