RhinoCommon Curve.Offset() with multiple results (limitation)

Hi all,
This is a long standing problem which I had always hoped Rhino could solve - especilly RhinoCommon.
When you have a figure such as in the attached, the inner offset will result in two curves if the offset distance is large enough. With the Rhino native command, you don’t get both, you only get the one nearest your pick point.

However, the RhinoCommon method Curve.Offset() does not need a pick point, only a distance - whether this distance is positive or negative will determine the side. As this method is pick-point independent I had always hoped that it would return all valid results… Unfortunately, it doesn’t, as you can test with the 3dm file and the test script below. It returns one or other of the two inner curves, depending on the curve start point… Both V5 and WIP.

Is there any hope for this getting improved in the near future?

OffTest.3dm (30.3 KB)

import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino

def OffsetCrv1SideRC(crv,plane,dist,trans,side,tol):
    #offset is list that could contain one or multiple curves or be None
    return crv.Offset(plane,side*dist,tol,trans)
    
def TestOffsetInOrOut():
    crvID=rs.GetObject("Select curve to offset",4,preselect=True)
    plane=rs.CurvePlane(crvID)
    dist=2.0
    side=-1
    trans=Rhino.Geometry.CurveOffsetCornerStyle.Sharp
    tol=sc.doc.ModelAbsoluteTolerance
    crv=sc.doc.Objects.Find(crvID).Geometry
    offset_crvs=OffsetCrv1SideRC(crv,plane,dist,trans,side,tol)
    offset_IDs=[]
    for offset_crv in offset_crvs:
        offset_IDs.append(sc.doc.Objects.AddCurve(offset_crv))
    rs.SelectObjects(offset_IDs)
TestOffsetInOrOut()

–Mitch

Just to make sure that I understand this correctly… you would want the Rhino command to return both results in the first place (as well as the RhinoCommon method that is point-pick independent). Or just the RhinoCommon method?

I’ve added a wish to the list.

Giulio


Giulio Piacentino
for Robert McNeel & Associates
giulio@mcneel.com

Sure, I don’t see why the normal Rhino command should not return all the offsets either… I’m sure if one gets fixed, the other will too, this looks like a core problem to me.

Cheers, --Mitch

1 Like

I stumbled on this annoying issue as well

V8

this seams to be finally addressed in V8 / WIP:
https://mcneel.myjetbrains.com/youtrack/issue/RH-18055/Offset-Able-to-create-more-than-one-closed-region-when-the-offset-curve-intersects-to-itself

V7

Any suggestions for a phyton / rhinocommon workaround in V7 ?
(planar non-self-intersecting curves)
to get all regions that fulfil the inner offset-condition.

sample similar to this issue …

kind regards -tom