mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-17 10:59:17 +00:00
e678012c71
The recipe loaded the model into Blender purely to reach its geometry engine, so it could only run inside Bonsai and needed a filepath instead of a file. It is now a plain BasePatcher. The three fixes Revit needs are unchanged. To lower each space onto its storey we take the storey elevation from util.placement and the space placement from util.shape, instead of from Blender object matrices. To convert to an extruded area solid we triangulate the space with ifcopenshell.geom, union its downwards facing triangles with shapely to get the footprint and its voids, and rebuild the body with util.shape_builder. Unioning every downwards facing face, rather than only the vertices sitting at z=0, means stepped and clipped spaces keep their full footprint, columns poking through a room become profile voids, and disjoint footprints extrude as one item each. Spaces that cannot be patched are logged and skipped rather than aborting the run, and a storey above the top of a space falls back to the space's own height instead of asking for a negative extrusion depth. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
IfcPatch
Utility for applying modification recipes to IFC files. IfcPatch enables programmatic editing and correction of IFC models through a collection of patches that can fix common issues, migrate data, or transform models.
Available Recipes
Alignment and Linear Placement
- AddGeometricRepresentationToAlignment - Add geometric representations to alignment elements
- AddLinearPlacementFallbackPosition - Add fallback positions for linear placements
- AddZeroLengthSegmentToAlignment - Add zero-length segments to alignments
- PatchStationReferentPosition - Patch station referent positions
Data Conversion and Migration
- AGS2IFC - Convert AGS (geotechnical) data to IFC
- ConvertLengthUnit - Convert between length units
- ConvertNestToAggregate - Convert nesting relationships to aggregations
- ConvertPropertiesToQuantities - Convert properties to quantities
- Migrate - Migrate between IFC schema versions
Element Extraction and Manipulation
- ExtractElements - Extract specific elements into a new model
- ExtractPropertiesToSQLite - Export properties to SQLite database
- Ifc2Sql - Convert IFC to SQL database
- TessellateElements - Tessellate elements into triangulated geometry
Fixing Software-Specific Issues
- FixArchiCADToRevitDoorSwings - Fix door swing orientation from ArchiCAD for Revit
- FixArchiCADToRevitSpaces - Fix space data from ArchiCAD for Revit
- FixRevit2025TINs - Fix TIN (Triangulated Irregular Network) issues from Revit 2025
- FixRevitClassificationCodeTypes - Fix classification code data types from Revit
- FixRevitTINs - Fix TIN issues from Revit
Geometry and Representation
- AssignConstituentFractions - Assign fractions to material constituents
- DowngradeIndexedPolyCurve - Convert indexed poly curves to simpler representations
- RemoveSiteRepresentation - Remove geometric representation from site elements
Merging and Optimization
- MergeDuplicateTypes - Merge duplicate element types
- MergeProjects - Merge multiple IFC projects
- MergeStyles - Merge duplicate styles
- Optimise - Optimize file size and structure
- PurgeData - Remove unused data from model
Spatial and Coordinate Systems
- OffsetObjectPlacements - Offset object placement coordinates
- OffsetStoreyElevations - Offset storey elevations
- ResetAbsoluteCoordinates - Reset absolute coordinates to origin
- ResetSpatialElementLocations - Reset spatial element locations
- SetFalseOrigin - Set a false origin for coordinates
- SetRefElevation - Set reference elevation
- SetWorldCoordinateSystem - Set world coordinate system
- SplitByBuildingStorey - Split model by building storeys
Utilities
- RecycleNonRootedElements - Remove or recycle non-rooted elements
- RegenerateGlobalIds - Regenerate GlobalId values for elements
- RemoveRevitUniformatClassification - Remove Revit Uniformat classification
- UnsharePsets - Unshare property sets between elements