Creating adjacencies for 3D thermal bridge analysis - Honeybee

@chris , @mostapha

We are working on a grasshopper script to prepare Rhino geometry for 3D thermal bridge analysis (using a separate piece of software). As well as passing the geometry to the analysis software - consisting of closed polysurfaces, we can pass markers to indicate thermal properties:

  1. Object names corresponding to material (e.g., “Concrete”, “Steel” etc)
  2. Face colours corresponding to boundary conditions (e.g., Red=Internal, Blue=External)

For 2, we want to derive the location of boundary conditions using “boundary condition boxes”, which are a intuitive way to show which surfaces are in contact with the air (rather than being adiabatic or adjacent to another part within the assembly). The boundary boxes need act as a ‘cutter’ to split the faces on each component. We then want to apply colours to these faces, and at the end, put them back together into their original ‘parts’ with the names retained (e.g, “concrete”).

We’ve tried doing this using native Grasshopper components, and also tried it with scripts calling various Rhino methods, but it only seems to work for very simple cases, whereas we have some extremely complex geometry (I can post images of this later).

The image below describes the process we want to go through. I also attach the Rhino file for this simple example.

In Honeybee you have the Intersect component, and the Solve Adjacency component which do close to what we want- split the faces of a building (e.g,. walls) where the face crosses between an internal and external boundary condition, and then apply the matching boundary conditions and change the colour of the face.

I am wondering if we can use some elements from the Honeybee core SDK to perform some of these functions, and potentially adapt them. Are you able to point me in the right direction?

Simple Example for Forum.3dm (224.2 KB)

Honeybee used energyplus&Openstudio as the simulation engine which is not supported 3D thermal bridge analysis.
You can use ladybug legacy version for 2d thermal bridge analysis which connect LBNL Therm to Grasshopper.,0

1 Like

Hello @minggangyin , thanks for the reply.

I’m not trying to use Honeybee to carry out the 3D analysis, this will be done by a third party piece of software. I want to use Grasshopper to prepare a Rhino model for simulation before I export it.

Hi @Chris_s ,

Solid Boolean Intersection operations like this are always a challenge in any Surface-based CAD platform and Rhinocommon will even struggle in some cases where the geometry is complex or not aligned perfectly with one another in the Model tolerance. But, I guess the correct place to point you towards is the source code in the HB Intersect Solids component. In particular, this method used within the component will split two solid shapes as long as the surfaces of the solids are coplanar with one another:

I know that Rhinocommon’s solid boolean methods will split overlapping solid geometries like your screenshot if they are very simple. But these Rhinocommon methods are less reliable for very complex solid cases and I have come to see this as understandable just given how volumes are defined by surfaces in Rhino. For our purposes in Ladybug Tools, the only reliable method we have found is just to make sure the geometries are coplanar with one another and use the Rhinocommon methods that underlie that intersect_solids_parallel function.

Any chance this would run on Rhino 7?

For 2d thermal bridge analysis, Rhino 6 and Rhino 7 worked fine if you have install ladybug legacy version and Therm 7.5 or 7.6.

1 Like

Hi Chris, thanks for this.
I’ve taken a look and I believe these functions are defined here?
ladybug-rhino/ladybug_rhino/ at 3e0c1ca3696a98cbdd3cfa07711b38dae0ca979b · ladybug-tools/ladybug-rhino (

For my application, the face splitting would be done by first carrying out a boolean difference on my ‘boundary condition boxes’ which should leave a perfect imprint against the geometry- with coplanar surfaces with which it can be split.

I’ll have a go with this and see where I get to.

The next step is to find a way to match the newly split surfaces with those of my boundary condition box (after the boolean difference is carried out), then change the colour of the face. It looks like this would get us close:
honeybee-grasshopper-core/honeybee_grasshopper_core/src/HB Solve at master · ladybug-tools/honeybee-grasshopper-core (



Hi @Chris_s ,

I voiced my thoughts about the challenges of doing solid Boolean operations reliably in surface modelers but maybe you’ll find some smart ways to do it, particularly if you’re sticking to planar geometry. But, if you can make it such that all of the intersection calculations are happening between coplanar faces instead of solids, I know it will be a lot more reliable.

For finding matching planar faces, this is probably the core library method that you’d want to use:

That Room.find_adjacency method essentially returns a list of 2-element tuples for each of the Faces that can be matched with one another.