Rigid surface registration between two meshes

Dear forum members,
I would be grateful for some advice. I apologise in advance if this is too trivial a question to ask in this forum. I am neurosurgeon who deals with children that have craniosynostosis and I am trying to use Rhino/Grasshopper to automatically identify a region of the skull that I can use to reconstruct a new forehead. I have a mesh of the skull (white) and a mesh of a template forehead (red). The template forehead represents the ‘ideal’ forehead shape I would like to reproduce. I want to scan the surface of the pink shaded part of the skull to find a region that best approximates the shape of the template (green region when placed by eye but I would like this to be computed automatically


). Can anyone guide me as to how I can do this in Grasshopper please? I am using Rhino 8 on Windows 11. Many thanks in advance!

Best,
Vejay

Hi Vejay - the only thing that comes to mind off hand is that it might be possible to get something useful from Grasshopper’s Galapagos functions - I am not the one to help you there but it is worth asking on the grasshopper forum here.

-Pascal

@pascal looks like the link re-directs to the main discourse page, but not to a topic.

Hi -

No, it links to the Grasshopper category of this forum:
image

The idea was that Vejay would create a new topic in this category to ask the question there and provide the necessary input files. It doesn’t look like he did.
-wim

1 Like

Apologies, I too thought it was a link to a landing page.

I did manage to make a work around using the base Grasshopper elements but it’s computationally quite inefficient and takes a while to compute so I will post it there to see if a Galapagos function works better.

First I converted the template and the skull meshes to point clouds. I then aligned the bottom corner of the template with the bottom corner of the skull and rotated the template in two planes until lay on the skull surface.

I then calculated the average distance between the points clouds and used the anemone functionality to generate a loop so the template iteratively moved across the surface of the skull adding the values to an list … I then selected the position of the template with the closest average distance as the best approximation of conformity.

Quite long winded I know!

Best,
Vejay