Introduction to BHoM Geometry¶
Geometry_oM is the core library, on which all engineering BHoM objects are based. It provides a common foundation that allows to store and represent spatial information about any type of object in any scale: building elements, their properties and others, both physical and abstract.
All objects can be found here in the Geometry_oM
The code is divided into a few thematic domains, each stored in a separate folder:
- Coordinate System
- Curve
- Interface
- Math
- Mesh
- Misc
- SettingOut
- ShapeProfiles
- Solid
- Surface
- Vector
All classes belong to one namespace (BH.oM.Geometry) with one exception of Coordinate Systems, which live under BH.oM.Geometry.CoordinateSystem.
All methods referring to the geometry belong to BH.Engine.Geometry namespace.
Interfaces¶
Two separate families of interfaces coexist in Geometry_oM. First of them organizes the classes within the namespace:
| Interface | Implementing classes |
|---|---|
IGeometry |
All classes within the namespace |
ICurve |
Curve classes |
ISurface |
Surface classes |
The other extends the applicability of the geometry-related methods to all objects, which spatial characteristics are represented by a certain geometry type:
| Interface | Implementing classes |
|---|---|
IElement0D |
All classes represented by Point |
IElement1D |
All classes represented by ICurve |
IElement2D |
All classes represented by a planar set of closed ICurves (e.g. building panels) |
IElement3D |
All classes represented by a closed volume (e.g. room spaces) - not implemented yet |
Tolerances¶
There is a range of constants representing default tolerances depending on the tolerance type and scale of the model:
| Scale | Value |
|---|---|
| Micro | 1e-9 |
| Meso | 1e-6 |
| Macro | 1e-3 |
| Angle | 1e-6 |
Conversion to proprietary software packages¶
While being pulled/pushed through the Adapters, the BHoM geometry is converted to relevant geometry format used by each software package.
BHoM Rhinoceros conversion table
Known issues¶
At the current stage, Geometry_oM bears a few limitations: - Nurbs are not supported (although there is a framework for them in place) - 3-dimensional objects (curved surfaces, volumes etc.) are not supported with a few exceptions - Boolean operations on regions contain a few bugs