Unfortunately, what you’re trying to accomplish might be harder than you think.
Let’s start at the beginning! Joining meshes does not union them.
It just kind of groups both meshes together, but they can be disjoint/ungrouped at any moment. It’s not like doing boolean operations on geometry.
Closed, watertight meshes aren’t usually joined together! Mesh joining is used to join two or more adjacent, open meshes that share naked edges. After joining, their overlapping vertices can be welded together to form a single mesh.
This does you no good for the boolean difference that you later apply.
Many of the joined/grouped meshes don’t intersect your cutting volume at all, and thus can’t be processed.
Generally speaking, mesh booleans are messy! Meshes are all about clean topology and face flow. Boolean operations tend to destroy the neatest mesh topology. Now, in manual modelling, you would fix these mistakes by hand, which is quite cumbersome in Rhino, and would interrupt your parametrical workflow either way.
Long story short, in my opinion, mesh booleans should be avoided altogether.
Here are a couple of strategies that could lead to success:
For 3D printing, it usually doesn’t matter if you have clean individual meshes that overlap or intersect, or a single watertight mesh. Sure the result might be a little less clean, and the print time longer, but printing should pose no problem. I’ve done it myself.
This means that you could append one ore more meshes at the base level to form a flat printing area: Mesh Trim Example 2.gh (57.3 KB)
Another option could be to produce your mesh in a different fashion, with the goal to obtain a single, clean, watertight mesh from your base lines. This would probably allow you to perform the boolean operation in the end, but no guarantees here.
You could try Dendro (Windows only), Cocoon, or the Fattener component for this.