No "Explode mesh" in GH?

In the Rhino acceptation of the term, there seems to be no way to explode a mesh in GH, meaning “separate subsets of welded faces into distinct meshes”…

I find it confusing that GH gives the same name to a tool which explodes a mesh in its constituent faces, even if it makes more intuitive sense as GH phrases it.

Immagine
Have you already tried this?
(GH 1.0.0007)

Naming in GH is dreadful. Poorly chosen words, words which are no longer correct after some aspect changed, inconsistencies… we hope to do a better job with GH2, although certain words are probably too cemented to be changed now, like “parameters”.

At the time of naming it may not have been very “poor” at all, but as you say, after some time and additional functionality, context can change and so also names may have to change in order to better differentiate more specific functionality.

There will always be several “generations” of code and namings in a system which is developed over time. It only reflects the fact that no matter who you are, you will always gain better and deeper insight into a problem domain as you dig deeper into the problem domain.

New aliases may or may not be a solution for names that are hard to get rid of entirely

public void NewName()
{
     OldName();
}

// Rolf

Meh, a lot of it is simply my fault. Should have thought longer and harder and when naming things. I’m rather chuffed with the new nomenclature for trees I came up with, but that’s mostly because all the words are four letters long, which makes for neater code; tree (now called datatree or structure), path, twig (now called branch), item, meta, pair (item+meta), leaf (item data + locus within tree) and rule.

Sadly I haven’t been able to find good four-letter words for locus (index within tree) and coverage a range of adjacent loci.

Most of these words will be api only in all likelihood, not spilling over into the user interface.

Humble man.

Loci is plural while you want to depict singular location?

// Rolf

At least that much… :slight_smile:

I agree, this seems like a function that should be native. In the mean time, if you are asking for how to do it, there are a few alternatives that provide some additional “mesh explode” functionality.
Mesh+ and UTO’s Mesh edit tools have explode mesh components.
There are a few examples online that describe how to do it with a scripting compnent, (various flavors out there).
Here’s a python example of one we use. (it’s not better than any of the other plug-ins out there, we just found ourselves using it quite a abit and wrapped it into our studio’s tool set).

# Explode MeshFaces into individual meshes
# By Chris Hanley
# chanley@theolinstudio.com
# This file is part of OTools developed by OLIN digital design group at OLIN partnership, llc
# Licenesed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

"""
Explode Mesh Faces
-
Provided by OTools ver xx.xx.xx

    Inputs:
        M: Meshes to Explode
    Outputs:
        F: Individual Mesh faces as Meshes
"""

ghenv.Component.Name = "OTools_ExplodeMeshFaces" 
ghenv.Component.NickName = 'O_ExplodeMesh' 
ghenv.Component.Category = "OTools"
ghenv.Component.SubCategory = "5.5 | Mesh"
try: ghenv.Component.AdditionalHelpFromDocStrings = "2" 
except: pass

import Rhino

newMeshes = [] #empty list to hold exploded meshes

def OExplode():
    for i in range(M.Faces.Count): # for each face in M, do something
        newmesh = Rhino.Geometry.Mesh() #create mesh object for each face
        newmesh.Vertices.Add(M.Vertices[M.Faces[i].A])
        newmesh.Vertices.Add(M.Vertices[M.Faces[i].B])
        newmesh.Vertices.Add(M.Vertices[M.Faces[i].C])
        if(M.Faces[i].IsQuad):
            newmesh.Vertices.Add(M.Vertices[M.Faces[i].D])
        if(M.Faces[i].IsTriangle):
            newmesh.Faces.AddFace(0, 1, 2)
        if(M.Faces[i].IsQuad):
            newmesh.Faces.AddFace(0, 1, 2, 3)
        newMeshes.append(newmesh)
    
if M:
     OExplode()
     F = newMeshes
else:
    pass
2 Likes

Nope ; this is the equivalent of “Split disjoint mesh”.
I’m talking about “explode” on a mesh with multiple welded patches.

1 Like

Thanks Chris.

I’ll download one of those plugins.
I’m really surprised that it is not available in GH though…

Try deconstruct + construct (graft faces)


although it’s pretty expensive in large meshes and doesn’t support multiple meshes.

import Rhino
import ghpythonlib.treehelpers as th

m.Unweld(0, True)
M = m.ExplodeAtUnweldedEdges()

try this in a python component

2 Likes