Skip to content
Al Fisher edited this page Sep 8, 2020 · 3 revisions

Geometry

Geometry_oM

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, which is a part of the BHoM_Engine.

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
Clone this wiki locally