NGon 3.0.0 - Update for Wood-wood connections

I made a small update for NGon 3.0.0 version for developing further wood-wood connections (Joint tab).
It is an update for the previous 2.4.5 joinery-solver version, that contains a better functionality, rewriting and structuring larger part of code. Most of the components employ Rhino 6 NGon mesh face grouping to build adjacency graphs and finding the right connection topology.

The images below come from the new components from Joint subcategory including some basic sample files. I am planning to make proper tutorials to make the introduction to joinery in beams and plates and post it in this thread. The code is developed as part of IBOIS, EPFL studies Laboratory for Timber Constructions ‐ EPFL

There are four different ways how joints could be displayed and cut from the element volume.
Polyline methods remains the fastest one, mesh boolean is the most robust when volumetric cutting is needed and BRep boolean is also optimized to perform cuts in a separate thread:

The overall idea in the Joinery Solver comes from Tiling method where a Unit connection is oriented to connection zone. There are more peculiarities how to this method was made more effective. I would like to thank @DanielPiker who showed the principle of ChangeBasis Rhino transformation that applies to larger than this timber joinery set. Interestingly, this idea extrapolates to timber plates not only beam elements in quite fast and efficient way.


is there an example like this in the zip file? i don’t think i saw one. i have to do these a lot. thanks for the add in!


1 Like (19.8 KB)

Click Solver to True in order to create joints.


thank you so much!

1 Like

Thank you. This is amazing! Can I report some bugs somewhere with the new joint tools?

Yes write me a PM.
It would be good to get a proper feedback.

Hello Petras,
great work, very interesting!
Is there a possibility to learn more about the graph model that you use to model the assembly? Do you store the shapes of parts and joins via attributes of the nodes/edges or is the model just the topology?
Thank you!

The joints is a list of indices pointing to each element. It has additional attributes of connection zones and joint geometry. So there are two main classes: elements and joints, and for sure each class groups a series of subclasses and properties for indexing (graph), 3D data for joints (Tiles), and fabrication tool-paths (Cuts). So I can work with a graph as nodes and edges, where the dual of the element-to-element graph is a joint graph. To answer the question, you can see it as a typical node-to-node graph with additional geometry attributes.

I am looking into robotic production of wood-wood connections for my master thesis, and I am wondering if you, Petras, or someone else would be so kind to explain how the “Cut”- function works?

I would like to get the MillCut (toolpaths) out as a polyline, but I can’t access/display the output and it seems like it is defined as “Generic Data”.


CrossLapJoints-cant get halflap (42.5 KB)

Hi, @ Petras_Vestartas
Thank you for developing this wonderful plugin!

I am trying to get half-lap joints(cross-lap tile) in a reciprocal structure using the example you provided here, but I can not get the proper result.

CurveLoft is not working, and if I use LoftHoles, some timbers will get a distorted shape.
I am using the latest version of Ngon.

Even though I started a new development:

This seems to work fine after you scale up the joint in Z Axis:

CrossLapJoints-cant get halflap (70.5 KB)


Thank you! @Petras_Vestartas
I never knew there is a description of your work on Github. I have been trying to learn it with the examples you published along with version 3.1.

And one more thing, I guess this is a bug:
The solver will bake small polygons if I move the slider.

This is done on purpose when merge function does not find proper intersection.


Thank you for the scripts and examples, looking forward to getting this working. On Rhino 7 getting an error when trying to install the outstanding plugins "IO generated 4 message - Grasshopper Archive messages

This document contains the messages that were recorded during the most recent Grasshopper® file read/write. Whenever a read/write operation fails or behaves unexpectedly, this summary will be compiled and put on display. If you experience problems saving or opening files, please include this log with any bug-report you file. You can use the Send… button to mail this report directly, or you can save the log and attach it to a personal email message. This log contains no personal information beyond what you supply, nor any other information that is not directly related to Grasshopper."

Could you assist in how to resolve?

Dear @dbenz,

Normally it should be fine to pass these warning messages. Be aware that the development of this package has been moved to “compas_wood” development from the end of 2021 year. All the tutorials and instructions have been published on EdX under the funding of EPFL and NCCR DFAB ETHZ. If you want to jump directly on Rhino part, watch this section:

  1. Digital architecture and advanced geometry processing

If you have any question please open an issue in the official GitHub repository so that I could reply quicker.

The software for Python, C++ and Rhino Grasshopper is available here:

The free tutorials are here:

Kind Regards,