Hi,
Yes, you have understood the idea: you can provide ridges for large enough angles and ref edges otherwise.
You don’t have to provide different references for the edges.
By default, any edge that is provided is a reference edge (so all edges following the Edges keyword). In a normal use, these edges define geometrical lines (characterized by their tangent) which, a priori can be remeshed, but for which a bezier curve is reconstructed in order to preserve the regularity of the curved line (a new node is not inserted in the middle of the “straight” edge). Without other specifications, the surface is supposed to be smooth across the reference edges (on both sides of the edge, 2 distinct bezier patches are reconstructed but they share the same normal(s) along the edge).
Additionnal features, such as the ridge specification or the required one, can be attached to reference edges:
- For ridges, it means that the edge (or the line, at least locally), is at the interface of 2 portions of surfaces that intersect with a sharp angle. On such locations we don’t want to reconstruct a smooth surface across the ridge: it is a singularity along the surface. Thus, in this case, at each node along ridges, we must be able to compute one normal per portion of surface and both normals must not be colinear (the 2 bezier patches that are built on both sides of the ridge will not share the same normal(s) along the ridge);
- For required edges, it only means that Mmg is not allowed to remesh the edge.
You can either provide your own ridges if you know where they are or let Mmg detect it (sometimes the automatic detection is not possible due to spuriosities on the surface that creates artifact ridges). But if you provide ridges, they have to be at a sharp angle (to ensure the non-colinearity of the computed normals).
Best Regards,