Mesh Split


#1

Hi, I’ve created some meshes using Grasshopper and Rhino4 and I need to do a mesh split or mesh boolean but unfortunately it doesn’t work. I once did get it to work but it still seemed to shatter the mesh and create loads of duplicate overlapping meshes that needed deleting.

In the attached file there are 3 sets of meshes… Corners, Panels and Cutting Planes.
I want to remove the Panels from the Corner Mesh and then split the new Corner Mesh with the Cutting Planes to end up with 2 meshes.

The boolean of the corner mesh and the panels works in Netfabb’s demo software once I’ve run the repair operations
.
I’m currently using Rhino4 but if Rhino5 can do this operation I would certainly upgrade.
Can anyone do this using Rhino 4 or 5 or can anyone see what is wrong please?

To summarise…
Mesh Boolean - Cut away Panels from Corner
Mesh Split (???) Split Result from above using Cutting Planes
MeshBooleanProblem.3dm (207.0 KB)


(Menno Deij - van Rijswijk) #2

How were the meshes generated? Is there underlying surface geometry? If so, do the boolean operations work on that? The boolean and split operations are likely to work better on surfaces than on meshes. Then mesh the result afterwards.

The normals of the middle mesh seem to be inward, where the normals on the 5 corners are outward. Is that intentional? May be part of the problem...

Edit: normals are probably OK for removing the middle part from the corner parts.

Also, you have five-fold rotational symmetry and two-fold mirror symmetry in the object. You need to model only one tenth, rotationally (that is, 36 degrees), to define the thing. Then, using 1 mirror and 5 rotation operations, the full object can be created. Maybe that helps?


#3

Hi Martyn,

to make mesh booleans work, you need to check your mesh objects for naked edges and their normal orientation. Normals should point outward.

The red panels have the normals pointing inward, for their lower planar part. I´ve found that the lower and upper planar part of the panels are not fully connected to the triangular walls having the rounded corners. To fix this, i´ve used the command _ExtractConnectedMeshFaces with an angle of 1 degree. Then i´ve deleted the extracted result, so there is only the triangular walls left with the rounded corners. Then i´ve selected the wall part and used the command _RebuildMeshNormals and used the command _DupBorder on this wall like part which results in two closed polylines. From these two closed polylines i´ve created new planar mesh caps using the command _MeshPolyline. It is important to check the normal orientation of the resulting caps, you might use the _Dir and _Flip commands before you _Join the triangular shaped part with the planar caps. The result is a panel which is a closed object. Unfortunately, this panel cannot be boolean subtracted from the corner part and it can`t be used for splitting. Reason is, your corner part does not form a closed mesh and has non manifold mesh edges. You´ll need to fix the corner part as well…

…to make this short, use NURBS objects instead of meshes to create the geometry in grasshopper, then, if you need a mesh, create it from the NURBS objects. This should save you much time :wink:

c.


#4

Thanks for the reply.

The meshes are automatically generated in Grasshopper from five lines that all meet at a point in the centre of the corner. I tried generating surfaces but had better results using the mesh functionality of Grasshopper.

I can’t rely on having symmetry because not all corner pieces will always have symmetry - In this case I am making the corner pieces of a 3rd order geodesic dome so I have 3 different corner pieces: essentially pentagonal corners, hexagonal corners and then an odd corner. Because I am automatically generating the corner pieces from only the lines that meet at the corners and because I want the model to work for any combination of lines meeting at a point I don’t want to rely on symmetry to model less because I want the design process to always be the same.

I will start looking more into mesh normals, mesh edges etc to see if I can clean them up a bit.

The frustrating thing is that the Netfabb software did the boolean straight away once it had repaired the meshes, so it must be possible, I am just trying hard not to spend another 240€ on software when I feel it should be possible in Rhino!


#5

Hi Clement,

Thanks for the reply.

I think I had focussed too much on the corner meshes thinking these were the complicated parts. I had not paid enough attention to the panels or planes so I will revisit that (and thanks for the advice on how to do this!)
I thought I had got all the meshes closed, manifold and with unified normals because I ran it through the netfabb mesh repair process and then imported it as an STL back into Rhino.

You are right that booleans and splits work better on NURBS objects but I spent months trying to generate the corner pieces with NURBS surfaces but had more luck with meshes - only to fall at the last hurdle!

I explained more in my reply to Menno.

I’ve attached a picture of the dome I’m trying to construct. Removing the panes from the corners is to allow for polycarbonate panes and splitting the corners with the flat planes is to allow me to actually assemble the dome.
(Don’t ask me about the door - it doesn’t have one yet!)

You can see what I’ aiming for… I want to take any line geometry and generate the corner pieces. The actual geometry is designed to be optimal for printing on a cheap 3d printer. When I’d originally tried just piping the lines the resulting geometry is not great for a cheap 3d printer because it won’t sit flat on the printer bed so I had to come up with shapes that have a flat (or as close to flat as possible) base. Also, piped geometry did not boolean well because of overlapping surfaces.

Would you know if I have fixed the meshes as STL meshes, should the import back into Rhino give me meshes that I should be able to boolean or split? I can’t upload STL files to this forum unfortunately!


#6

Hi Martyn,

basically yes. I´ve forgot to mention one important part for making the booleans work more reliable, if the corner parts have naked edges or edges which are not joinable edge by edge as in your example corner part, the boolean operation fails. Sometimes welding (using _Weld with a large angle of 180 degree) gets these edges closed, but only if they line up vertex by vertex. Then after the boolean subtraction you can still use _Unweld to create sharp shaded edges. For the printer this shouldn`t matter. These naked edges are also responsable for the failjure of _UnifyMeshNormals. It requires coincident vertices to work properly.

I cannot say anything about Netfab as i haven`t used it yet. But in general, if you are able to create the meshes without naked edges and all normals pointing outward straight with Grasshopper, you should be able to make the boolean subtraction or split in Rhino / Grasshopper as well.

Maybe you should reconsider doing it all with Nurbs objects as Menno suggested, i think booleans of piped surfaces should work if you un-extend the line network under the corner and create capped pipes.

Interesting project though, good luck :wink:

c.


#7

I got this to work in the end. I did just have to make sure that all meshes were valid - correctly oriented, no naked edges, no holes, manifold etc.


#8

Hello,

I have created a site topography using Grasshopper in Rhino and unable to split it. I want to generate site sections and would really appreciate some help!!!