- Complete package restructure with new modular architecture
- Split core functionality into
meshql/core/(ql.py, selector.py, transaction.py) - Organized GMSH operations into
meshql/gmsh/module - Consolidated mesh operations in
meshql/mesh/module - Enhanced preprocessing capabilities in
meshql/preprocessing/
- Split core functionality into
- Migrated from setup.py to modern pyproject.toml build system
- Added comprehensive Makefile for build and installation management
- GeometryQL.gmsh() Static Method: New entry point for creating GMSH-based geometries
- compute_mesh() Method: Enhanced mesh generation with integrated transactions and preprocessing
- Mesh Marker Support: Load and export meshes with physical group markers
- Discrete entity creation for marker elements
- Automatic physical group assignment from markers
- Marker exclusion from main mesh when loading
- Enhanced Mesh Loading: Direct import of meshly meshes into GMSH
- Ratio-based Geometry Splitting: Split geometries using ratio parameters
- Advanced Split Operations:
-
from_plane(): Split by plane with angle specification -
from_ratios(): Split by ratio values along edges -
from_normals(): Split by normal vectors -
from_anchor(): Split from anchor points -
from_edge(): Split from specific edges -
from_lines(): Split using line definitions
-
- Python Notebook Visualizer: Improved in-notebook mesh visualization with pythreejs
- print_val() Method: Debug helper to print Workplane values in GeometryQL and Split
- Performance Optimizations:
- Replaced CQCache utility with new CacheService implementation
- Direct workplane handling in Split class (no GeometryQL dependency)
- Improved entity selection and filtering logic
- Enhanced checksum generation for geometry tracking
- Multi-level caching system for split operations and region groups
- BREP caching for split workplane geometry (77% faster on subsequent runs)
- Region group caching with deterministic checksums across sessions
- Automatic cache invalidation and updating for nested splits
-
CacheService.clear_cache()method for cache management
- Refactored Entity Management:
- Replaced CQEntityContext with CQEntityMapper for better clarity
- Introduced GeometryQLContext class with enhanced properties
- Improved selection logic for complex entity filtering
- Enhanced Preprocessing:
- Flexible preprocessing mechanism using (Type, callback) tuples
- Split class works independently with workplanes
- Better region group handling and visualization
- Mesh Visualization Improvements:
- Refactored visualize_mesh function for better mesh extraction
- Enhanced wireframe rendering for various mesh types
- Simplified surface and volume mesh creation
- Removed unused coordinate display and buffer mesh code
- Transaction System:
- Migrated from Python dataclasses to Pydantic models
- Improved transaction context handling
- Better lookup mechanism for previous transactions
- Updated import structure for cleaner organization
- Fixed interior/exterior edge classification bug
- Fixed issue with multiple physical groups having the same name
- Corrected wire orientation to ensure consistent winding
- Resolved split operation bugs for 2D geometries
- Fixed
from_ratio()to work correctly with reversed wires - Added None check for ql in
end()method - Fixed visualizer compatibility with meshly
- Comprehensive unit test suite added:
-
tests/selector_test.py: IndexSelector, FilterSelector, GroupSelector, Selection tests -
tests/shapes_test.py: NACA airfoil, circle generation, sampling tests -
tests/split_test.py: Split operation tests -
tests/cq_utils_test.py: CadQuery utility function tests -
tests/entity_test.py: Entity management tests -
tests/mesh_test.py: Mesh loading and conversion tests -
tests/integration_test.py: End-to-end workflow tests
-
- Updated example notebooks:
-
cube.ipynb: Structured meshing with boundary layers -
naca0012.ipynb: Airfoil meshing examples -
inviscid_wedge.ipynb: Inviscid flow setup -
turbo.ipynb: Turbomachinery with STEP import -
progression.ipynb: Mesh refinement examples
-
- Added
visualize_example.pyfor standalone visualization demos - Created
scripts/gmsh_host_client.pyfor opening and watching .msh files
- Updated to meshly==1.3.0a0
- Updated to su2fmt@2.0.0
- Added pythreejs==2.4.2 for notebook visualization
- Maintained Python 3.8+ compatibility
- Removed setup.py in favor of pyproject.toml
- Removed requirements_dev.txt
- Removed deprecated
exporters.pyandimporters.py - Consolidated functionality into
loaders.py - Removed old transaction structure from
meshql/transactions/ - Removed standalone
entity.py,transaction.py, andql.pyfrom root meshql/
- Add su2fmt 3D mesh output
- Add 3D import and export support
- Add proper filtering for specific faces based on diffs (fromTagged support)
- Add 3D boundary layer support
- Add plot visualization for entities including physical groups
- Convert CQ objects to gmsh OCC
- Define point sizes from selectors
- Add multi group tagging in 1 command
- Allow multiple solids to be split
- Add batch operations for things such as transfinite fields
- Fix interior faces for multi-solid meshes
- All in one function that will automatically do structured meshing
- Adjust the refinement by interior edges
- Structured boundary layer, Adjust refinement based on high level parms (wall height, etc.)
- Structured boundary layer for 2D based on num layers
- Handle >4 edge transfinite faces (get this from partitions) - pretty much pass in edge corners of solid
- Group edges and set corners and node counts
- Group faces and set corners
- Split faces based on partitions, make sure interior entities are updates accordingly
- Preprocessing to auto slice into transfinite faces
- Auto slice into transfinite faces
- Applying preprocessing to faces (should work but make sure what's the problem)
- Caching for slice to be faster after preprocessing
- Custom cell counts for different transfinite regions
- Solve issue with boundary condtion on shared edge solids
- For manual setTransiniteFace auto set cell count to all the edges same way as initial auto
- Documentation and testing
Nice to haves
- Automatically set the group angle
- Make visualizer auto-scale initial view and color coded better