GeometryHelper.IfcConvert
3.2.0
See the version list below for details.
dotnet add package GeometryHelper.IfcConvert --version 3.2.0
NuGet\Install-Package GeometryHelper.IfcConvert -Version 3.2.0
<PackageReference Include="GeometryHelper.IfcConvert" Version="3.2.0" />
<PackageVersion Include="GeometryHelper.IfcConvert" Version="3.2.0" />
<PackageReference Include="GeometryHelper.IfcConvert" />
paket add GeometryHelper.IfcConvert --version 3.2.0
#r "nuget: GeometryHelper.IfcConvert, 3.2.0"
#:package GeometryHelper.IfcConvert@3.2.0
#addin nuget:?package=GeometryHelper.IfcConvert&version=3.2.0
#tool nuget:?package=GeometryHelper.IfcConvert&version=3.2.0
GeometryHelper.IfcConvert
Converts geometry between IFC models (via xBIM) and GeometryHelper (GeometryHelper.CommonGeometry
and GeometryHelper.SolidGeometry): points, vectors, transformation
matrices, planar faces, curved surfaces, and 3D solids.
What It Does
GeometryHelper.IfcConvert bridges building information models in IFC (IFC2x3, IFC4, IFC4x3) to pure
computational geometry structures in GeometryHelper:
- Converts 3D points (
XbimPoint3D), vectors (XbimVector3D), and homogeneous transformation matrices (XbimMatrix3D/GeoTransform3). - Converts IFC boundary representations and swept solids (
IXbimSolid,IIfcGeometricRepresentationItem,IIfcProduct,IIfcMappedItem) intoGeoSolid3bodies. - Handles planar faces with both outer boundaries and inner cutout loops/holes (
InnerBounds). - Automatically tessellates curved and non-planar faces into planar triangles, maintaining strict coplanarity compliance for
SolidGeometry. - Preserves hierarchical coordinate placements across nested mapped items and product placements.
- Provides thread-safe IFC store caching (
IfcStoreCache) with GlobalId indexing.
Installation
dotnet add package GeometryHelper.IfcConvert
The package is self-contained: it bundles all required customized xBIM managed assemblies and the 64-bit native geometry engine (Xbim.Geometry.Engine64.dll). Targets Windows x64.
How Winding and Orientations are Handled
SolidGeometry measures volumes and point containment assuming outward-pointing face normals.
Like TeklaConvert, IfcConvert verifies the signed volume of every converted solid body:
if body.GetSignedVolume() < 0.0, all faces are automatically flipped via face.Flip() so that
normals consistently point outwards.
Planar vs Curved Faces
GeometryHelper.SolidGeometry.Geometry.GeoPolygon3 enforces strict coplanarity at construction.
When an xBIM face is planar (face.IsPlanar), its outer boundary loop and any inner hole loops are
read directly as polygons. When a face is curved (such as a cylindrical pipe or rounded fillet),
FaceConvert automatically tessellates the surface into planar triangles (GeoTriangle3 / GeoFace3),
preventing ArgumentException and accurately capturing curved geometry.
Quick Start
using GeometryHelper.IfcConvert.Core;
using GeometryHelper.IfcConvert.Converters;
using GeometryHelper.SolidGeometry.Geometry;
using Xbim.Ifc4.Interfaces;
// 1. Open or retrieve an IFC model from cache
using (var storeCache = IfcStoreCache.GetOrCreate("sample.ifc"))
{
// 2. Retrieve a specific product by GlobalId
IIfcProduct product = storeCache.GetProduct("0123456789ABCDEF012345");
if (product != null)
{
// 3. Convert product geometry to GeoSolid3 bodies in global coordinates
List<GeoSolid3> solids = product.ToGeoSolids();
foreach (GeoSolid3 solid in solids)
{
Console.WriteLine($"Solid volume: {solid.Volume}");
}
}
// 4. Or retrieve complete geometry information with ToProductGeometry
IfcProductGeometry geom = product.ToProductGeometry();
Console.WriteLine($"Product Name: {geom.Name}, GUID: {geom.GlobalId}");
Console.WriteLine($"Total Volume: {geom.TotalVolume:F2}");
Console.WriteLine($"Bounding Box: Min={geom.BoundingBox.Min}, Max={geom.BoundingBox.Max}");
Console.WriteLine($"Placement Origin: {geom.Placement.Transform(GeoPoint3.Origin)}");
// Closed manifold solid bodies
foreach (GeoSolid3 solid in geom.Solids)
{
Console.WriteLine($" Solid Faces: {solid.Faces.Count}, Volume: {solid.Volume:F2}");
}
// Open surface models or thin sheets (if any)
foreach (GeoFace3 surface in geom.OpenSurfaces)
{
Console.WriteLine($" Surface Area: {surface.Area:F2}");
}
// 5. Subtracting openings/voids (doors, windows) automatically
var optionsWithVoids = new IfcConvertOptions { ApplyVoids = true };
var allWalls = storeCache.GetProducts<IIfcWall>();
foreach (var wall in allWalls)
{
// Solids will have window and door cutouts subtracted
var wallSolids = wall.ToGeoSolids(optionsWithVoids);
}
}
Matrix Transformations
xBIM uses row-vector convention ($v \cdot M$) with translations located in the fourth row (OffsetX, OffsetY, OffsetZ).
GeoTransform3 uses column-vector convention ($M \cdot v$) with translations located in the fourth column.
MatrixConvert.ToGeoTransform3 and MatrixConvert.ToXbimMatrix3D transpose the linear 3x3 block and swap offset rows/columns
accordingly, ensuring mathematically identical coordinate transformations between the two systems.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- GeometryHelper.CommonGeometry (>= 3.2.0)
- GeometryHelper.SolidGeometry (>= 3.2.0)
- System.ValueTuple (>= 4.5.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on GeometryHelper.IfcConvert:
| Package | Downloads |
|---|---|
|
GeometryHelper.TeklaConvert.2026
Converts geometry between Tekla Structures 2026 and GeometryHelper: points, vectors, segments, planes, coordinate systems, bounding boxes, transformation matrices, and the faces and loops of a Tekla solid. Also reads the objects of IFC reference models into solids placed where Tekla shows them, through GeometryHelper.IfcConvert. Built for Tekla Structures 2026; install the package whose year matches your Tekla. |
|
|
GeometryHelper.TeklaConvert.2025
Converts geometry between Tekla Structures 2025 and GeometryHelper: points, vectors, segments, planes, coordinate systems, bounding boxes, transformation matrices, and the faces and loops of a Tekla solid. Also reads the objects of IFC reference models into solids placed where Tekla shows them, through GeometryHelper.IfcConvert. Built for Tekla Structures 2025; install the package whose year matches your Tekla. |
|
|
GeometryHelper.TeklaConvert.2020
Converts geometry between Tekla Structures 2020 and GeometryHelper: points, vectors, segments, planes, coordinate systems, bounding boxes, transformation matrices, and the faces and loops of a Tekla solid. Also reads the objects of IFC reference models into solids placed where Tekla shows them, through GeometryHelper.IfcConvert. Built for Tekla Structures 2020; install the package whose year matches your Tekla. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.2.0 | 0 | 10/6/2026 |
| 11.1.0 | 0 | 10/6/2026 |
| 11.0.1 | 100 | 10/5/2026 |
| 11.0.0 | 104 | 10/5/2026 |
| 10.0.0 | 116 | 10/3/2026 |
| 9.0.2 | 123 | 10/1/2026 |
| 9.0.1 | 115 | 10/1/2026 |
| 9.0.0 | 116 | 10/1/2026 |
| 8.0.0 | 116 | 9/30/2026 |
| 7.0.0 | 146 | 9/29/2026 |
| 6.3.0 | 169 | 9/29/2026 |
| 6.2.0 | 173 | 9/29/2026 |
| 6.1.0 | 201 | 9/28/2026 |
| 6.0.0 | 195 | 9/28/2026 |
| 5.1.0 | 199 | 9/21/2026 |
| 5.0.0 | 199 | 9/21/2026 |
| 4.0.0 | 99 | 9/18/2026 |
| 3.2.0 | 100 | 9/17/2026 |
Converts geometry between IFC (via xBIM) and GeometryHelper:
- Points, vectors, transformation matrices, faces, and 3D solids.
- Handles both planar faces (with outer and inner loop boundaries/holes) and non-planar curved faces via triangulation/tessellation.
- Supports hierarchical placement matrices and nested mapped items (IIfcMappedItem).
- Provides thread-safe IFC store caching with GUID lookup and memory management.