Skip to content

Edge split failure #1743

Description

@phkahler

This revisits the model from #1291 Rounded Corner cut.

In the first attachment the 1291 fillet sketch is adjusted by aligning the straight lines of the fillet sketch with the pre-existing rectangular box. If the length of the fillet is equal or less than the box thickness, the previous fixes allow it to work without error. Here I have made the fillet extrusion two sided so that it extends past the top of the box. I have also made it longer so that even with it single sided it will extend past the other side of the box. In either case the boolean difference fails.

I believe the problem is that one of the edges of the cube fails to split. Actaully two of them for the same reason. A straight edge of the box intersects the sharp edge of the fillet. That fillet edge lies on one face of the box, but is cut by the adjacent face of the box which is 90 degrees to it and produces a clean intersection and a new vertex along that edge. The edge of the cube however is not split at that point. The cube edge is tangent to both faces of the fillet along that fillet edge, so no intersection is found and there are no other fillet surfaces passing though that point.

Image

cube_cut_2.zip

It looks like SCurve::MakeCopySplitAgainst() is splitting one of the curves which creates a new vertex. But that vertex also needs to be added to the curve on the other shell which FindVertsOnCurve() would do if it were a preexisting vertex, but it is only found during the current boolean operation so does not exist already.

One solution would be to split curves from each shell agains curves from the other shell. That may produce redundant verticies when - like here - curves are split against a surface and an edge. redundant verticies are removed, but how reliably?

I think the core problem is that the unsplit curve lies in the plane of a surface from the other shell and needs to be intersected with that surfaces trim curves, or at least those curves that have coincident surfaces along the curve.

To offer another example I'll attach another old model that seems to suffer the same failure:

Image

curve_curve.zip
This one has a box with a rounded corner along one edge of the top. The curved surface is tangent to the flat box top. A circle is drawn on the box top straddling the line between the flat and curved top and difference extruded down into the box. It appears that some of the curves in the plane of the box top fail to get split along other curves in the same plane. There may be other NURBS failures in addition to that, but I can't be certain.

Now I see that curve_curve can actually work depending on the exact placement of the circle center. I have it constrained to the median line of the first extrusion, but if it's off-axis I think it will be harder to make it work.

BTW I believe a large number of our remaining NURBS failures are similar to this cube_cut_2 issue failing to split curves. Perhaps as many as 20-40 percent of the remaining issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions