GeometryHelper.IfcConvert 3.2.0

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GeometryHelper.IfcConvert" Version="3.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GeometryHelper.IfcConvert" Version="3.2.0" />
                    
Directory.Packages.props
<PackageReference Include="GeometryHelper.IfcConvert" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GeometryHelper.IfcConvert --version 3.2.0
                    
#r "nuget: GeometryHelper.IfcConvert, 3.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package GeometryHelper.IfcConvert@3.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GeometryHelper.IfcConvert&version=3.2.0
                    
Install as a Cake Addin
#tool nuget:?package=GeometryHelper.IfcConvert&version=3.2.0
                    
Install as a Cake Tool

GeometryHelper.IfcConvert

NuGet Version License: MIT

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) into GeoSolid3 bodies.
  • 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.