BrepFace surface is slightly larger than its own edges

I don’t understand exactly what is wrong with this closed BREP.
It looks like the BrepFace overlaps its own edges.

FaceEdge.3dm (1.5 MB)

I could not find a way to make the BrepFace and Edge match… seems to be some subtolerance problem.

Hello - the edges are indeed off by a small amount - but within the .01 file tolerance.


Hi @pascal

Exactly, the difference is within the defined tolerance.
If I derive a mesh from this BREP, then mesh triangles are created in this area which have an edge below the tolerance (just turn on the “Roof Solid” layer).
And I want to avoid those.
So I thought that the easiest way is to correct this difference in the BREP and make sure that the BrepFace and the Edge match.

These are the meshing parameters I am using:

ClosedObjectPostProcess True
ComputeCurvature False
GridAmplification 0
GridAngle 0
GridAspectRatio 0
GridMaxCount 0
GridMinCount 16
JaggedSeams False
MaximumEdgeLength 0
MinimumEdgeLength 0.0282842712474619
MinimumTolerance 0
RefineAngle 0.349065850398866
RefineGrid True
RelativeTolerance 0.8
SimplePlanes True
Tolerance 0.8

Does anyone have an idea how I can correct this?

Hi Thomas -you’ll need to correct the surfaces - if you Explode the object and RebuildEdges, you’ll see that the edges of the surfaces no longer match up -


but since they are within tolerance, Join pulls them together - note the edges get pulled to be able to call it Joined but the underlying surfaces do not change. You just need to build with more precision. See how this looks to you-

FaceEdgeClean.3dm (1.5 MB)


Hi @pascal
I am not sure if I understood the steps correctly, but after
_RebuildEdges with a tolerance of 0.001

the surface and the edge do not match.
What did I miss?

Or is there something similar to BrepFaceList.ShrinkFaces Method ( to shrink the surface back to the edge?

Hi Thomas - the Explode-RebuildEdges exercise was just to show you where the surface edges fall when Join has not been used, it does not fix anything - the edges are off, but within tolerance, so Join pulls them together without making any changes to the underlying surface - this is what tolerances are for. My example file had the surfaces replaced by surfaces that have edges closer together. note that any trimmed edge will force triangles along the edge in meshing, regardless of whether the underlying surface are slightly off.


Hi @pascal
Thank you for the explanations.
Is there a way how I can solve such situations in RhinoCommon?
The problem is that very small triangles are created in the area where the suface overhangs the egde:

Hi Thomas - I don’t know if it can be ‘solved’ other than my building the surfaces more precisely - but I have no idea how these surfaces were made…