JoinEdge should it fill a sliver type visible gap?

I had an object mirrored about its straight edge so both halves were perfectly aligned and a matching pair., yet join edge after being applied showed a sliver type gap.

I then trimmed the edges another 1mm beyond, duplicated the edges and did sweep2 with the edges as rails to fill the gap. ran joinedge…and still sliver type gaps.

By duplicating edges and running a sweep surely a gap shouldnt exist especially when joinedge is used and all went well.


JoinEdge does not actually close gaps. It just allows surfaces to be joined which when the gap is larger than the normally allowable tolerance. I was mistaken in an early post you started and Jim Carruthers provided the correct information. Rebuild edge of skin to lose points but skin may not then join

There is a possibility the gap is not “real” but an artifact of the meshes used for the graphical display. Have you checked that refining the mesh in Properties does not eliminate the “sliver”?

tried your suggestion and went properties, custom mesh settings, dragged the polygon slider fully right, and its gone.

Not familiar with all the numbers in there so just did that.

I just wish the rendered mode gave us how things really are, I end up believing what I see. sparkly gaps and things beyond showing through cause me tail chases !

I will remember this one . Cheers

What is the best gap closer by the way ?


What I believe David and James are trying to say is that you should not be using JoinEdge. I would agree with them, it’s going to come back and bite you once you pass this model on to your customer. It’s sort of a fake/cheat way to close down gaps. There’s really only two commands you should be using to make a model watertight the right way - MatchSrf and Join. That’s it. JoinEdge is one of those hail mary type commands that will only cause either you or your customer headaches. If you can’t explode your entire model, then re-select it all and get all your surfaces to join back together simply by doing Join then you’re going to have problems down the road.


JoinEdge just been copiously using, I will heed advice and revisit it, just about to send it off as well.
Did you mean to say this :-

If you can’t explode your entire model, then re-select it all and get all your surfaces to join back together simply by doing Join …OR… you’re going to have problems down the road.

If I explode the model, does explode clean the slate so to speak of the JoinEdges associated with the edges so reverting me to the moment before I first ever joined all my surfaces, then Join when applied simply now sees a join command on the edges and JoinEdge is non existent, or does join look for joinEdges and reuse them again if they are there ?

If I get some naked edges, and I am unable to get MatchSrf to work, and just now I found it only worked if I explode the model example posted, would lowering tolerance from 0.5mm to say 1mm be ok to do ? project is ok for 1mm , even 1.5mm maybe.

will join …explode, match srf join explode match srf join etc cause any progressive issues with repeated explode ?

MatchSrf on another experiment was ok on something not exploded.

Ok…I have exploded my model, increased tolerance to 1.5 then done a join, see naked edge at rear, matchSrf wouldnt select it, untrim edge, now match srf works and recreates the surface I had there made from sweep2 to fill a gap between item on top of model and its rearmost edge, which I then trimmed off the unwanted surface. So now with a surface sticking out over the rearmost edge again I need to trim it off again, but I am unable to. Does MatchSrf deny trimming afterwards ?

Is trimming any surface best avoided with Rhino as it will also bite one in the bum later on ?


Before sending out a model, it should flawlessly pass the following tests:
1 - Modeled to appropriate tolerances for the down-process needs. Generally the default tolerances of 0.001in or 0.001mm are good.

2 - You can Explode your polysurfaces, run RebuildEdges, then Join everything back together into a closed, solid, polysurface. The will negate any foolishness caused by JoinEdge.

3 - SelBadObjects doesn’t select anything

4 - ShowEdges set for “Naked” edges shows no naked edges.

If your model doesn’t pass those tests then don’t send it out. Your customer will hate you if you do.


John is right on here. I would just add that it’s not about what tolerance you set, it’s about what your customer will set. Often times when you send out a model, when it’s imported into another CAD package it will come in as a collection of surfaces, and then that CAD package will try to join it all up into one surface or solid. So you’re just causing problems for your customer and yourself if you start to tweak your tolerance setting, because if your tolerance is looser than theirs, then it won’t join up on their end when they import. FWIW I’ve never had a model that has passed the tests that John describes be kicked back to me for technical reasons. I don’t ever run RebuildEdges because I never use JoinEdge, but I do the rest of the things he describes for every single model I send out.

And in answer to your other questions:

I would say that it depends, but I try to do as much of my work as possible untrimmed. There are instances where trimming is actually the better solution or is unavoidable, but in general, I make all my surfaces join with no trims, and with the same number of control points/degree at the edges. This way the join is exact and not an approximation.

No, no issues. If you’ve made your model correctly, there should be zero drama surrounding exploding and joining it.

If it was me, I would run RebuildEdges as John says, to basically reset all of the JoinEdge work you did. This will take more time now, but will save you and your customer headaches in the long run.

1 Like

Keep in mind that RebuildEdges does not really restore the edge to some pristine state - it calculates new edge curves. In the image below, the red curve is duped off of the original (trimmed) edge, the blue one is duped after RebuildEdges.


Reading between the lines here…
Join and JoinEdge do not actually change the surfaces. It is merely a test to see if the surfaces edges are within 2x tolerance. If they are then they are tagged as joined and not available for further joining.
JoinEdge is the same but instead of being limited to 2x tolerance, it tells you how far apart the edges are and asks if you want to join the badly fitting edges anyway.

In that sense, Join does not fill any gaps like actually changing the surface edges so they do fit within tolerance.

When surfaces won’t Join, that’s an indication that you need to spend a little time fixing the gap/overlap/other problem so they WILL join.

You should write a book John. Another great piece of general advice from you. Thanks.

It sure seems as if JoinEdge is best avoided like the plague, maybe the command needs a red colour to the lettering.
Some forums have a sticky section, the advice on join edge and how best to join surfaces and avoid trimming if possible to surfaces, deserves a sticky !

best practice…I wonder on the following.
If I have need to trim a surface, should I recreate the trim edge as a new curve and which is the best way to do that, DupeEdge or RebuildEdges ?
Then sweep the surface all over again using that edge and the other three existing edges, which might also need recreating unless I can find the original sweep paths and profile ! and is such asking for even more trouble ?

Is that best practice and should it be DupeEdge or RebuildEdges, latter might just alter the exact curve as it has values that one can vary ?

I find the concept of avoiding TRIM difficult, here is an example…

I have created a shape made of a patchwork quilt of surfaces. In a couple of places I have a compound curve organic sort of shape sitting on the surface, its edges are meeting the surface, having been projected to surface during its make.

So as to join all my surfaces together to make a solid, I decide this organic shaped surface needs the smooth surface under it cutting away. Is that correct, or can a solid have such a surface shape sitting on another surface ?

Think of it as aires rock in australia, should the surface under the rock be cut away ?

I elected to use trim command and use the edge of the ‘rock’ to trim a hole in the surface (land) then selected all surfaces in my model and went ‘join’. I have a solid, but with something denying a dxf solid make, turns out to be an upset caused by trimming the smooth surface under my aires rock sort of shape.

patching it up is not easy. Its risen up like a paving stone at one edge, a very small distance indeed but causes export problems. I am told to use untrimedge to solve the gap issue, and that recreates the entire surface again under my shape, so how can I then accomodate this shape as part of my solid ? When I trim the surface I am recreating the cause so it seems.

attached the file of this part of the model, before (with glitch causing naked edge to be shown, and dxf export solid failure), and after untrim edge applied.
UntrimEdgeRecreates former surface denying solid make.3dm (553.4 KB)

DupEdge and RebuildEdges do very different things. DupEdge gets you the curve that defines that edge (so the surface edge or the trim curve). RebuildEdges recooks the edges, and generally is only needed when something has gone wrong (for instance edges getting out of whack after using JoinEdge). As a side note, personally I prefer to use Untrim with KeepTrimObjects=Yes instead of RebuildEdges. If there is something wrong with a trim curve, I would like to know what and where the issue is, and I find that for me it is a bit easier to see where the problem is using Untrim so I can properly address it.

As to if you should rebuild a trimmed surface to make it an untrimmed surface, I would say it depends. If you can do it, then great you might as well, but at the same time there is nothing inherently wrong in using trimmed surfaces. Some of the advantages to an untrimmed surface is that you will have a nice clean, light (not a whole ton of control points) edges, and you can match it to other surfaces (and if you’re a dork, they “feel” better :wink: )

To make a solid, you need no naked edges. I’m not totally clear as to the specific problem you are having in your attached model though. There were some edges that looked like they went through a JoinEdge on the small sliver surface, so I rebuild that then capped off what you are calling your land surface.


UntrimEdge_SP.3dm (877.8 KB)