Incomplet offset of concave curve


#1

Hi,

I need to offset inward a closed curve which has some concave regions. The offset works fine with small value, but after a certain threshold, instead of making multiple curves, only one (arbitrary?) curve is generated.
For example, if you make a curve in the shape of an 8, you would expect the offset to split in 2 curves after the intersection.

Is this a bug? Is there another way to achieve the expected result?
Thanks.


#3

Just offset the curve again, but select by clicking on the left hand part.


#5

thanks. This will work for simple cuves, but I have a much more complicated one which should lead many isolated curves and it would be quite complicated to do manually.


#6

extrude the curve as a solid higher than you want the curve to be offset (this is that offsetting does not fail). then offset the surface, use dupboarder on one side of the resulting surfaces selecting it from a 2d view and move it vertically to your initial curve.

this worked with the curve below, maybe it helps. its still an effort though but at least creates all regions at once. if you are lucky i mean.


(Giuseppe Massoni) #7

You should be safe with open curves. Splitting by point at half would give you two open curves. They will offset and overlap. Trimming away the overlapping parts should be much faster.
A small Python script to select the troublesome closed curves and split them in halves could be…

import rhinoscriptsyntax as rs

curves = rs.GetObjects("Select a curves to split", rs.filter.curve)
for id in curves:
    domain = rs.CurveDomain(id)
    parameter = domain[1] / 2.0
    rs.SplitCurve( id, parameter )

Edit: I was able to make a nasty enough curve that would not behave even after splitting…:confounded:
So it’s a partial way around…


#8

one chance…


offset.3dm (2.8 MB)


#9

Other chance:
_Line _Perpendicular
_Sweep1
_ExtractIsocurve _Direction=U
_CurveBoolean _DeleteInput=All _CombineRegions=Yes

…Delete remaining


(Pascal Golay) #10

Hi Romain - I’m afraid that is standard, if not ideal, behavior for Rhino in this case.

https://mcneel.myjetbrains.com/youtrack/issue/RH-18055

-Pascal


#11

Thank you all. I tried most proposed methods and the one by eddi worked best. Although it still requires to manually select the regions to keep.
Result:


#12

Thank you all. I tried most proposed methods and the one by eddi worked best. Although it still requires to manually select the regions to keep.
Result:


#13

you could also try MeshOutline instead of CurveBoolean, it will create all boundaries at once, the downside is that it creates polylines. i mean you still can increase the rendermesh settings to get a smoother curvature, but actually sillhouette should do this which seems not to function properly.