Routered MDF doors - toolpath

Hi all, I’ve posted this to Grasshopper because ultimately what I’m trying to achieve I’d like to then script in GH.

We make routered MDF doors in our kitchens and I have no issues creating the 2D geometry needed for CNC, but for customer representation, I need to be able to create the 3D version. Many doors use multiple tools and for anyone who has done it before the external corners of the pattern often have a radius matching the outermost tool.

A Sweep1 followed by a Boolean Difference would be the logical approach, but I note Sweep1 and Boolean’s aren’t as robust in GH as it is in raw Rhino. Either way it leaves some ugly geometry where the Sweep has crossed over itself, and the Boolean then isn’t pretty, if it works at all. I’ve tried running the tools separately, merging them as a single tool.

So I need a simple approach that will leave me with pretty clean geometry, and I need to GH or Script it, because a kitchen might have 40-80 panels depending on the design, so 1 by 1 isn’t an option. We present this with our quote, so we don’t get paid for this!

I’ve tried lofts, SW1, SW2, and the only way I can create clean geometry is by exploding and doing things in parts, then joining it again as a closed surface again at the end, but that isn’t commercially viable and not very GH/scriptable.

Has anyone any experience with this type of thing? The ideal would be to create a 3D tool and drag it through the board (along a polyline) as it would in real life, but I’ve not found a way to do it.

Thanks in advance



I’ve looked into this before but couldn’t figure out how to do it in the way you describe. CAM software that can analyse / simulate toolpaths do what you describe I think. From memory it was something to do with Minkowski Sum and Difference.

Have you tried creating the negative of the whole mdf panel pattern and then boolean that with the panel? As if you were doing it with a forming press tool.

On my phone so can’t try it atm.


I’ve worked 1.5 years on antique-d furniture at times of rhino 4.
I did the 45° joint frames with only untrimmed surfaces, by using scaled 2^0.5 sections at corners and lofting through them.
Then also editing the frames was fast: because there was no “Solid controls points” i did explode>group>control points>move points>join … and with untrimmed surfaces it worked flawlessly fast.

Now on grasshopper you can do the same… note that avoiding solid operations (“booleans”) is a must to have speed and reliability (i still used one here).

Routered MDF (28.6 KB)
First grouped part is the trivial 45° frame using scaled (2^0.5) sections and straight loft.
Then used some simple solid intersection/trim to round off the corners.

The logic i would use is this.
Expanding it should be … funny!

Edit: internalized curves…

1 Like

Thanks @martynjhogg,

Yes I’ve been working on trying to build the pattern in individual bits, or all together then subtracting it from the panel. I think that is what you are suggesting.

I have some cabinet specific software that does it and maybe some CAM add ons will. I’m trying to return to me roots if I can get Rhino to be my go to again for presentation and manufacture.

Try the free software : CAMotics

Hi Adrian -
Would something like this work?

Routered MDF door (12.2 KB)

Hi @wim, that is very cool and a different approach I should look at.

Often tools leave a radius on the outside edge, which might be what is making my situation much more complex and ‘breaking’ the Sweep, but the result of what you have done is pretty clean.

I’m still fairly new to GH, so not sure what the PFrames and Item is doing, but I’ll try to pull it apart to get my head around it.

Thank you.



Thanks @maje90, that’s looking good.
Just checking the addition of the radius, are you doing that manually or did you get it working as part of the GH process? The corner sections look like an interesting approach too.
Thanks, and keen to learn and get a good understanding of this!

The radius should be half the width of the outermost left section, in your case the section that contains the 2 small arc segments…

You can just pick the outermost left section and do bounding box and deconstruct its size…

Hi Adrian -

I see.
This one seems to work for this specific case but you’d probably have to create some rules to align the Perp Frames in more general cases… (and also for the radius)

Routered MDF door (27.2 KB)

Yes, that is looking great! I will work on that approach. @wim
The script isn’t generating geometry, so I’m assuming I just ass the door (BOX) Cutters (Closed Poly) and the Profile (guessing that is the inside rail to sweep around?)
Thanks heaps, this looks much more scalable as an approach also.

Hi Adrian -

I’m not sure what you mean by that and just making something clear: all components except for the Custom Preview component have their display turned off. You can turn those back on to see what each component is doing.

By the way, I just accidentally stumbled across an older post of yours (July 2017) while looking for input to another thread. You mention that the other staff around you shouldn’t have to learn Grasshopper. Once you have your Grasshopper definition in place, you can easily compile it into a Rhino plug-in so that others never need to see the Grasshopper interface.

Thanks @wim,
For some reason the Sw1 was falling over in Rhino5, I’ve just loaded V6 and it works fine. Thank you!
Yes this does relate to my query from years back, but I’m now ready to tackle grasshopper.
I have some ambitious goals, and suspect I’ll also get a developer on board as well to assist.
Kind regards,