Two trimmed edges always induce G0 error (but not other trimmed edges)

This is rather odd. Why only these two and none else? Surface A is a simple degree three extrusion. The CP structure is not disturbed. All surfaces in contact with surface A always join. Any ideas what might be the reason for the G0 error?


G0 error.3dm (513.3 KB)

joining will use 2x document tolerance:

your document does not have any units ?
tolerance is 0.001

your file is rhino 7

your surfaces do not join in Rhino 8 on mac
Version 8 (8.22.25217.12452, 2025-08-05)

fix

above screenshot is the fix i suggest:
untrim the extrusion surface, keep the trim curves
retrim with using the surface edges - tolerance is fine

G0 error_tp_rh7.3dm (763.5 KB)
G0 error_tp.3dm (3.8 MB)

i am not sure how the error came into your file - i miss the curves you used for trimming…

_matchSrf with pull option is a nice approach to solve stuff like this.

hope this helps.

kind regards - tom

Surface A has out of tolerance edges. RebuildEdges rebuilds them to the correct location.

Thanks @Tom_P the file units are mm and the absolute tolerance is set to 0,01 mm. I use V8 macOS but saved in V7 because I had the impression that quite a few are still using V7.

I didn’t have success with the Match with On Surface option so far. In the manual, it says: “In that case, the edge to be changed is pulled to the target surface and the pulled curve is used as the target.” - what does the latter part of that sentence mean, when the first part already seems to say what happens - the edge is pulled to the surface specified? I was under the impression this tool is very similar to Alias’ Align Project, where one can select the a current view, a vector, or the surface normal to “glue” a surface edge onto another surface. What does “pull” mean here - current view, or surface normal?

Thanks @Gijs I rebuilt that area from scratch as simple as possible. Same problem. Then I used RebuildEdges on the extruded front surface, and no visible doubling of edges before joining (no need to join anyway). However, why exactly is RebuildEdges necessary for such simple trim edges? How did those two trim edges become “scrambled”?


G0 error.3dm (117.9 KB)

Can you give details on how you created that surface?

surface normal
(shortest distance to surface)

1 Like

See below. The surfaces/curves are in the file of the post above.

After using the On Surface option in Match, on needs to duplicate the edge that’s been “glued on”. Then one can trim.

Still, why was RebuildEdges necessary after such a basic trim? Would be great if someone can explain.

@Lagom ill look into this tomorrow to see if I can reproduce.

1 Like

Great, looking forward to see why that particular surface develops out of tolerance edges with a simple pipe/line trimming operation.

To expand on Tom’s reply, “pull” and “project” in Rhino have fundamentally different meanings.

When an curve is projected onto a surface every point on the curve is moved in the same direction until it either intercepts the target surface. or misses the target surface and is ignored. The projected curve is then the set of all the projected points. This is equivalent to extruding the
curve in the projection direction, and then intersecting the extrusion with the target surface.

Whan a curve is “pulled” onto a surface for each point on the curve the closest point on the surface is found. If there is not a closest point on the surface then that point is ignored. The direction between each point on the surface and the corresponding point on the surface is usually different.

The Help for the OnSurface option of MatchSrf is a bit confusing. My recollection is the original idea for the OnSurface option of MatchSrf is “you can select a curve that is on or near a surface as the target, and then a surface to match to at that curve.” Note that the user selects the target curve, and is it does not need to be associated with the first surface. The user then selects the target surface. To ensure that the selected curve is actually on the surface after the user selects the curve “the curve is pulled to the surface.” After the curve is pulled to the surface the selected edge of the first surface is matched to curve as if it was the trimmed edge of the target surface.

Frequently the edge of the first surface is close to or on the target surface, and the user wants to use that edge as the curve. To do so the user can sub-opbject select that edge of the first surface as the target curve. To eliminate the need to sub-object select that edge of the first surface as the target curve the alternative was added that “You can also press Enter to skip selecting a target curve and only select a target surface. In that case, the edge to be changed is pulled to the target surface and the pulled curve is used as the target.”

1 Like

The Rhino equivalent of Alias’ Align with Project option (based on the description in the Alias help link) is a two step process:

Project
Select the surface edge to be moved to the target surface.
Check the projection direction option and change if desired.
Enter to complete projecting the edge onto the target surface.

MatchSrf
Select the surface edge to be moved.
Select the projected curve.
Select the target surface.
Set the desired continuity, etc.
Complete the match.

The most common case in Alias/ICEM is to pull a surface edge onto a target surface to align it G2 which also produces the trim curve on the target surface, so pressing the Enter key replicates that behaviour. The difference in Rhino is that only the normal alignment direction (“pull”) is available, and that one has to duplicate the aligned edge to then trim the target surface (so far I was not successful to use the aligned edge directly for trimming, which would reduce clicks).

You can achieve this by using the filter option _crv before selecting the edge in the trim command.

The option force Rhino to select the edge as curve and uses it with the crv/srf intersection instead of the srf/srf

In version 7 and 8 you can shortcut this by using the control+shift sub object selection before the trim.

1 Like

@Lagom I still have no clue what you are doing differently. I cannot reproduce it on my end. When you are trimming the surface with the pipe and the line, what’s the sequence of steps you are using? What is the radius of the pipe you used?

First trimmed with the pipe (0,3 mm radius). Then trimmed the trimmed surfaces further with the line.

When I set up this model, I sometimes joined and then unjoined surfaces, just to see where naked edges occur. Could it be that, for whatever reason, joining and unjoining does something to a trimmed surface’s edges?

Yes, joining can modify edges. Unjoining will not automatically fix that

Interesting. Then joining (“stitching” in Alias) is best used with a finished surface model, before meshing it for rendering or exporting it to Creo or Fusion. Or, to keep the originals strictly unaltered, “test joining” to check for naked edges is best done with a copy of the surfaces in question.

that’s the main reason why I started developing GlobalEdgeContinuity, which you can test out in the WIP (or a much rougher version on PackageManager in Rhino 7/8).

All right… that join has such undesirable side effects should be mentioned in the manual, including a hint for beginners about test-joining only with surface copies.

1 Like