I have created some surfaces in a small python script but it cannot be joined in Rhino. The purpose is to join them, create a mesh with no open edges, modify the mesh with Griddle, and export it to FLAC3D which is a geotechnical software.
The problem is that joining does not work. I did apply ‘join non-manifold surfaces’ of Griddle, it joins the surfaces, but the created mesh still has a lot of open edges. Sofar I have used mesh modification tools to take care of this problem (MatchMeshEdge, weld, etc.).
I was wondering if any one could help me to join the surfaces, get a matched mesh with no open edges.
Upload a Rhino .3dm file with the surfaces. You can upload the file using the icon above where you type a post:
Or you can drag the file to where you type a post.
Anyone looking at your file without the knowledge in your head is probably going to struggle to understand your intent. So please help us out by explaining what we are looking at. How do the surfaces combine? If joined as you wish what physical objects will they bound? How many different objects do you expect to see?
My interpretation is that you want a series of rings stacked, with a series of slabs stacked inside them. Then smaller rings and slabs at the bottom. To get these you have created single surfaces that participate in multiple objects (e.g. a horizontal surface is the top of one slab and the bottom of the next).
Either I am right and we are making progress or I am wrong and this demonstrates how different people can understand an undocumented drawing in different ways…
Hi Jeremy,
Thank you for your email and the helpful feedback. You are very close to our exact intent, and your interpretation helps us align our approach.
To provide some context: We are geotechnical engineers working to generate a structured mesh in Rhino using Griddle, which will then be imported into FLAC3D for numerical simulation.
Our goal is to build a structured mesh for a mining shaft lining based on the following engineering requirements:
Excavation Scheduling: The model must simulate sequential excavation (e.g., 1-meter stages). The horizontal internal circular surfaces create the mandatory mesh boundaries at these exact depths.
Variable Lining Specifications: Lining properties (thickness, strength, etc.) change section by section with depth. The 1-meter stages will fulfill this requirement as well.
Component Integration: The shaft connects to various axisymmetric structures, including foundations, intermediate foundations, and support rings. We created concentric circles with varying diameters and used the ‘Loft’ command to generate the connecting surfaces (please let us know if you agree with this approach).
Tunnel Connections: The shaft lining connects to at least two junctions leading to horizontal tunnels.
A Quick Note on Our Background & Challenges:
Experience: I have been using Rhino + Griddle since 2019 for projects ranging from large-scale geological models to medium-scale salt caverns.
The Issue: We consistently encounter problems with un-joined surfaces. Separately created surfaces often fail to join unless they physically pass each other and are then trimmed. While a manual, one-time creation works perfectly fine, this intersection-and-trim approach may not be ideal for automation.
Current Workflow: We must construct different parts and connect them together, as shown in the attached Python files for this shaft lining.
The Bottleneck: In this example, we created rings every meter and lofted the in-between surfaces, but they cannot be joined. This results in numerous open edges in the generated mesh.
Automation Need: While I can manually fix this using MatchMeshEdge or Weld, doing so for multiple design iterations in a sensitivity analysis becomes highly tedious. We are trying to use Python to automate this procedure as much as possible.
Our Main Questions:
How can we reliably join these separately created surfaces (ensuring the Python geometric data perfectly matches) to achieve a closed volume mesh without requiring manual remediation for open edges?
What would be the best meshing tool/strategy for creating a structured mesh (e.g., QuadRemesh, Griddle, etc.)? Griddle lacks directional mesh refinement controls (unlike Abaqus), which complicates this setup.
Thank you very much for your time, expertise, and support.
Kind regards,
Ali Taghichian
Hi Jeremy,
It seems the Python files were not attached properly in my previous email, likely due to security restrictions. Please find them attached here within a zip file instead.
Thanks again for your support.
Kind regards,
Ali
I believe your joining issues may arise because you are creating surfaces that you wish to use in two solids, but join consumes the surfaces in making the first object so they are no longer available for the second.
I would suggest that as you want to end up with solid objects you create them directly rather than from surfaces. I attach a python snippet that creates a series of rings and slabs. Note that this is just a basic example and does not contain any error handling, but that makes it easier to follow what the code is doing. Note in particular the use of the pairwise function to access consecutive z entries simultaneously.
As an aside, I wonder whether you have considered using Grasshopper instead of Python? Python facilitates the creation of closed polysurfaces from your created surfaces because in building breps it references the surfaces but doesn’t consume them.
As an exercise, I took your python file and reproduced its functionality in Grasshopper. That’s the blue section here:
I then added the joins needed to create your closed solids and the capability to add them to a Rhino file at the push of a button. That’s the pale yellow section. And then I added the green section which meshes the solids and allows you to add the meshes to the Rhino file. I’ve just used standard settings for the mesh but you can replace them with custom settings if desired. This may be superfluous as you are using Griddle, but I don’t have a copy of that so I’ve used Grasshopper meshing for illustration.
The Grasshopper scripts joins everything correctly giving you closed solids and meshes:
If you haven’t done so, I’d strongly recommend having a look at Grasshopper, it works well for experimentation and allows you to perfect your objects before committing them to Rhino.
p.s. If you want to run the grasshopper file and hit the buttons to bake the outcomes into the supplied Rhino, you will need to delete the generated layers and their content from the Rhino file first. You can, of course, bake into a new empty Rhino file without this irritation.