Bug: Split, Trim, Extract isocurve and Intersect fail

This is a quite strange bug that sometimes happens while I work on exact cylindrical pipes with degree 1 that were previously split. For some reason Rhino 7 has issues with this kind of geometry. Tools such like “Split”, “Trim”, “Extract isocurve” and “Object intersect” don’t work when the bug occurs.
It’s interesting to see that even trying to extract an isocurve is being limited by some invincible force.

Today the bug happened with several pipes, so I decided that it would be a good idea to record it on a video and report here. I also attach the same 3d model seen in the video below, and hopefully it will be possible to detect what exactly causes the bug.

Bug - Split, Trim, Extract isocurve and Intersect don’t work here.3dm (185.1 KB)

Hi @Rhino_Bulgaria, if you run check on it, it prints out the reason. After detaching the trims note how the trim curve has a lot of points near the seam.

_
c.

The main issue is that Rhino has troubles detecting an intersection where the pipe clearly intersects with the solid model. The funny thing is that ! _ExtractIsoCurve works just partially in some areas, while tends to extract a separate curve on the top area out of the surface.

Hi @Rhino_Bulgaria, that intersection and isocurve problem is all of the same source, the pipe is a bad object because of one of the trims near the solid model.

Detaching the trim curve near the solid and just retrimming seems to fix the initial problem. It’s better to explode the trim curve before and redo the segment(s) with the dense points.

_
c.

The same bug happened before adding the fillet to the area you are talking about, so the issue is somewhere else. This particular surface was part of a round pipe, a closed polysurface. I added the fillet subsequently as an attempt to fix the bug, but it didn’t changed anything. This is why I simply moved the seam of the cross surface (made with the “Fin” tool) that was used to trim the main surface and that fixed the bug. But I exported a copy of the faulty surface from the earlier step to post it here for further observation.

Hi @Rhino_Bulgaria,

i know some issues when the seam of closed trimmed rational surfaces is changed, they can get faulty.

Have you enabled _CheckNewObjects so you can detect when an object goes bad ? This would help to pin down the issue as you then can tell which command destroyed it.
_
c.

I keep it turned off, because Rhino creates bad objects way too often and it’s disturbing. :smiley:

Changing the seam of cylinders is actually pretty easy, as long as you reposition the seam at exact 90 degrees to prevent the creation of extra control points.

imho _SrfSeam is slightly buggy. Try to change the seam of this trimmed pipe to the opposite site which i marked with a text dot “s”.

SrfSeamProblem.3dm (73.7 KB)

It fails here using Rhino 7 SR 37 and Rhino 8.5 RC. Does it work on your side ?

SrfSeam_RH7_SR37

_
c.

As I mentioned earlier, the fix to my pipe was to simply relocate the seam.

However, your example is not an exact cylinder, because the weight of the control points marked with yellow dots in the image below is not identical. The proper number for the cp weight must be 0,707106781186548. For some reason the bottom right control point refuses to change its weight. I was able to set it to the correct number after I set it to 1, then I repeated with 0.707106781186548.

Interesting, i just used Pipe on a line and added the curve with _InterpcrvOnSrf then trimmed it. No transform or anything used.

I would say it is, since i can snap to the center and test the underyling surface using code. It is still an cylinder using a tolerance of 0,000000001:

import rhinoscriptsyntax as rs

def DoSomething():
    obj_id = rs.GetObject("Select the pipe", 16, True, True)
    if not obj_id: return
    
    brep = rs.coercebrep(obj_id, True)
    srf = brep.Faces[0].UnderlyingSurface()
    rc, cylinder = srf.TryGetCylinder(0.000000001)
    print "IsCylinder = {}".format(rc)
    
DoSomething()

IsCylinder = True

I can repeat this…next issue :slight_smile:
_
c.