Made an ashtray, but then found it is too expensive to materialize it

smoking is killing you.gh (35.9 KB)

This model has a problem.
All these closed Breps are separated.
I tried using Solid Union to make it into one piece but failed with the message: Boolean Union set is empty. I tried to find a solution from past topics, but not yet.
If I find a solution I will update this post.

1 Like

Well, it will be very difficult to unify this type of structure, as you have probably hundreds of non-manifold edges which are generated by three or more extruded objects of different heights touching at their vertical edges. Below is a very simple example with only 6 objects where BooleanUnion will fail. Note the generated error message.


NME-BU Fail.3dm (2.3 MB)

There are no good workarounds in Rhino for this (as far as I know), you can certainly do some manual trimming and joining to make it work on the simple file I posted, but that is out of the question for what you posted. An automatic attempt might be made by making all the individual column footprints just slightly bigger (offset? scale?) before extruding, so that there is some microscopic overlap at the edges. On the small example I posted, that will work. Even then, on your much more complex object, it’s not going to be foolproof.

I guess the question to ask is how you plan to fabricate this. If it’s 3D printing, you may not need to actually union all the parts for example.

3 Likes

I have been trying for 2 days to join them into one piece.
My latest idea for this, which has not been verified yet, is maybe I can:

  1. make surfaces by lofting every two vertically adjacent edges,
  2. then join the edges with every horizontal surface into an open Brep(cutter).
  3. and finally through the Brep Split operation, cut an extruded cylinder Brep into 2 pieces with the cutter make in step 2.

Now I am stuck at step 1, I don’t how to find every two vertically adjacent edges.
Ha, save me TT…

Thanks!

Well, I still think the slight offset/expansion idea has the best chance of success. Even then, I would bake all the individual pieces and not try to BooleanUnnion them in GH - that’s surely bound to fail, because if even one piece fails, the whole operation fails. Manually in Rhino, you can often make it succeed by unioning first smaller groups together, then the larger ones; if it gets stuck somewhere you can manually trim and join.

Another automated possibility if you don’t want to expand the outlines might be to get all the vertical edges at every intersection point, find the second highest one, then extrude a small cylinder along that edge. This in theory will take out all your non-manifold edges and if the cylinders are small enough, you won’t see them in the 3D print. But as above, I would still do the union manually after baking.

For a somewhat different approach (very quick and dirty but it seems to work)

  • Find all “top” surfaces, delete the rest.
  • Find the midpoint of each edge of the top surfaces, project it to Z = 0 and with Create Set find which ones are the same.
  • Assign these corresponding edges to branches (using TreeFrog plugin iirc).
  • Loft these corresponding edges to create the missing vertical surfaces
  • Join them with the top surfaces

I opened your GH file but it seems to be from another project, so I did a quick voronoi placeholder.

discourse_ashtray_gh.gh (16.3 KB)

2 Likes

I am sorry! I uploaded a wrong file.
This is the right file.
Thanks!
smoking is really gonna kill you.gh (270.5 KB)

Yes, you are right!
For 3D printing, it seems ok even if they are not joined into one piece.
I tested it in CURA 5.1 in .stl format. It could be sliced successfully with no wrong sign or warning.

I see now that I completely missed the problem with the non-manifold edges…

Still, maybe CURA can work better with this polysurface than with individual extrusions:

The non-manifold edges are inherent in this type of structure and cannot be removed. However, your method for creating the single polysurface is very interesting, considering that with “normal” native Rhino methods, it is quasi-impossible.

Some slicers may have problems with non-manifold edges, the problem being to determine correct closed loops for “inside” - areas to be filled. Will be interesting to see how this one turns out.

What is your intended result? for 3D Printing and Visualization , I’d resort to mesh workflow.

2 Likes

smoking is really gonna kill you version 2.gh (387.9 KB)

My intention was to materialize it. So I thought I needed one solid piece.
But then I found without giving them the Solid Union process It was still feasible in the CURA slicer.
So I guess I am OK with all of them staying separate.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
What I tried by far :

  1. I tried to make the final Brep into a mesh, and it worked. The final mesh was verified in CURA 5.1, it can be printed. I also optimized the base curve using Kangaroo.

  2. As for the Brep Solid Union idea:
    I scaled every small Breps a little bit larger(Scale NU), so they could intersect with each other solidly. But unfortunately, they could not be unified.

I still believe in a mesh workflow over Nurbs, I tried to take my shot on it and ended up with the classic naked edges (in order to prevent more than 2 surfaces sharing one edge, you can see it in the screenshot below:


smoking is really gonna kill you version 3.gh (406.4 KB)

I think the mesh is generally printable and renderable without much problems other than too many (Vertical Naked Edges)

Mesh has 1226 pairs of faces that intersect each other.
This can cause problems if you’re doing mesh boolean operations with it.

Mesh has 4954 naked edges. Naked edges can cause problems if the ultimate goal is STL output.
Mesh has 6979 faces with directions different from the mesh as a whole.
This can cause problems if you’re doing mesh boolean operations with it.

Mesh does not have any degenerate faces.
Mesh does not have any degenerate ngons.
Mesh does not have any extremely short edges.
Mesh does not have any non manifold edges.
Mesh does not have any duplicate faces.
Mesh does not have any disjoint pieces.
Mesh does not have any unused vertices.

ok, so shrinkwrap got officially announced for v8… so now I can say it! Shrinkwrap in v8 will mesh this no problem. You could even offset of shell it if you want.

see this post.

5 Likes

Finally solved this Boolean Union problem using Fusion 360.
It took 30 seconds to union all 1400 BREPs. Exported as STEP format from Rhino.


7 Likes

Cool design, I played a bit with my tool to make something similar. Here I use a triangulated mesh that is inputted my “Mesh Stepped Bump”, it extrudes dual mesh. It will work on free version but mesh will have holes.




hastray.gh (26.4 KB)

2 Likes

Hope you don’t mind if I do a small blender practice using your model.
The raised hexagons give a pillar-maze feeling.
What does the MeshSteppedBump do here? Is this responsible for the gradient height change?

2 Likes

This tool extrude each point of the mesh. You have to provide a weight to each vertex. The gradiant randomness … depend on how the weights are.
On the example I gave there is a main weight depending on the distance between center and vertex plus a random value.