How to prevent offset solid=yes from shrinking surfaces?

EDIT: Join was not the culprit, offset was!

I’m constantly joining and splitting surfaces to see if there’s any gaps, check curvature, add fillets etc. etc.

What’s hampering this workflow is Rhino’s weirdly uneven idea of shrinking joined surfaces. Sometimes, it shrinks it right up to the very edge of the trim line, which can make it difficult to re-trim after extraction, and sometimes it does leave a millimeter overflow (like other CAD software does), but this feels random (I often leave quite a large overflow).

Is there a setting somewhere to control this?

Ideally, I’d just like the Join command to leave my surfaces alone and not shrink anything.

(Also, unless I’m imagining things, sometimes trimmed fillet surfaces seem to get extended too…)

I’m not aware of any mechanism in Rhino to cause shrinking when joining trimmed surfaces.

Can you please post a simple example and the steps to follow to see what you’re describing?

1 Like

@eobet Are you using Join or JoinEdge? JoinEdge sometimes will alter trimmed edges to join surfaces which otherwise would not be within the absolute tolerance of each other. Other times JoinEdge will mark the surfaces as joined without altering the trimmed edges. I am not aware of Join altering surfaces.

1 Like

Really? Is there another tool that automatically shrinks surfaces for you that I might have used?


shrunk.3dm (330.2 KB)

I would never have trimmed the highlighted surface that tightly on purpose…

how did you model that piece? If you did it by splitting with the Split command, it could be that the option shrink=yes was active. Other than that I cannot think of something that could cause this to happen.

Rhino has two commands for shrinking surfaces, ShrinkTrimmedSrf and ShrinkTrimmedSrfToEdge

If a trimmed edge is an isocurve then ShrinkTrimmedSrf shrinks the surface to the isocurve. If the trimmed edge is not an isocurve then ShrinkTrimmedSrf shrinks the surface to an isocrve which is close to but not quite touching the trimmed edge. That leaves a margin around trimmed edges which are not isocurves…

In contrast ShrinkTrimmedSrfToEdge shrinks a surface to the isocurve which touches the trimmed edge.

I think I may have discovered the culprit: Offset with Solid=Yes shrinks even the original surfaces!

Also, many resulting surfaces seem to be unnecessarily trimmed (untrimming with “keep objects=yes” shows a border exactly matching the offset surface).

This was two surfaces before doing a solid offset, now it is three:


(Also, perhaps because of this, the solid offset produced a bad surface. It was a part of a logo, so it took me a while to figure out why the subsequent boolean failed…)

here it doesn’t with a randomly created trimmed surface. Can you post a file of a surface that does this?

keep objects is just the same as doing a dupborder followed by untrim


p01.3dm (1.9 MB)

Regarding keep borders, I discovered this due to not being able to match an offset surface, and then had to untrim it and it looked exactly the same.

Here, ideally you do not actually want multiple faces in your parts to begin with, correct?


@pascal but why does it shrink the surfaces if the source is a polysurface? I have never been aware of this fact

I do not know… presumably it simplifies the offsetting and corner building but we’d better check at the source: @chuck… can you help?


Sorry, I do not understand what you are saying here.

  1. I create a complex part, made for injection molding.
  2. I join all surfaces to ensure no gaps.
  3. I offset with Solid=Yes to get material thickness.
  4. If I now discover that I want to tweak some surfaces by extracting them, but they are now not my original surfaces anymore.

As mentioned in my previous reply, even more tedious is that some surfaces which don’t need to be trimmed gets trimmed with their exact border anyway.

Eobet, this doesn’t solve the issue, but in any case I always save the initial surface model by DeleteInput=no

Yes, the surfaces are shrunk before offsetting to make the offset calculation and extensions simpler. My guess is that the shrunk input surfaces are used in the solid result because it makes the wall creation more reliable. I will add a Youtrack item to look into not doing that where possible.

Ok, so my workaround now then is to not delete the input surfaces, extract the border around the thickened created surfaces, delete the polysurface at the same location as the original, and then join everything together again… :sweat:

Could I request an option “Shrink=No” that still shrinks a copy of the surfaces for offsetting purposes, but then joins the original surfaces to the final closed body instead?

Except for the “option” part, that’s exactly what Chuck wrote, isn’t it?
So, to clarify, you also want an option (“Shrink=Yes”) to not use the original surfaces even though the original surfaces can be used?

Well, I interpreted “where possible” as Rhino will still shrink the original surfaces sometimes. So my suggestion was to go ahead and still always do it, just do it in a separate copy that will never end up in the final result.

So, to clarify, you don’t need a “Shrink=Yes” option?