Offset simply ignored / SimplifyCrv


while trying to help somebody else here i encountered this. it simply ignored the command no failed and no other notification. other curves work. relayering and copy pasting into a new file did not help. it was a pretty chunked up curve which i tried to clean up. it works again when i split it in half and mirror it but in this current state both orange curves get ignored while trying to use Offset

Ignores Offset.3dm (2.6 MB)

(John Brock) #2

Use the CurvatureGraph command. reduce the Display Scale in the tool down to about 95 and you’ll see the point on the top lobe of the curves still has enormous curvature.
I suspect you have a self-intersecting microloop that was missed when you cleaned up the curves.
Even then, the curves need A LOT more cleanup. They have far too many points to be useful for making clean, smooth surfaces.


Hi John, this is not the file which i gave her. i believe i made a bit of a better job on the other. this one here was just a try out but i figured i post it that somebody can have a look. ignoring a command should not happen no matter how messed up the curves are.

(John Brock) #4

I agree. There has been a bug report on the pile for some time to tell the user when the curve can not be offset but it hasn’t made it up to the top of the pile yet.


its not about failing the offset, it simply ignores the command. as explained when i trim off half and mirror join then offset works again. i tried exploding rejoining, offset is still ignored. i didnt find anything similar so i hoped somebody may have a look. i also checked through the pile and couldnt find anything. if its so deep below that nobody can find it anymore then its time to dig it out again i guess. but there are sure more important things than an ignorant command :wink:

(John Brock) #6

Sorry, I guess i wasn’t clear.

There are two problem here:

  • Offset fails
  • No warning or error

The failing offset is because the curve has a microloop in it and self intersects. I described how you can find the location using the CurvatureGraph command.

I added another defect report about not having an error message when it fails.


hi John, nope there is only one problem, i placed you one more file here to make sure its not a misunderstanding. both entities have the same curves on the left side its ignored on the right it succeeds the offset. it has nothing to do with the microloop.

Ignored vs Succeeds.3dm (2.7 MB)

(Pascal Golay) #8

Yep, I see that here - weird. Thanks. They are not 100% duplicates, I notice - the seams are at opposite ends. Still poking… Red can be simplified indefinitely, green only once, as expected…
They are both ugly, at the top…

those little loop segments are this long:

3.1928447926674472e-06 units. I guess cleaning that up is task #1



hi pascal, thanks for peeping in. yes this file here was just an experiment poked around a bit myself trying to get an idea how to clean it up further. the file i have handed further looks much better. just wanted to share an awkward file which ignores a command.

if you are interested you can have a look at the cleaned up curve and tell me if its ok. the initial curves where super messed up. i also have no idea how they initially got produced so far.

cleaned up.3dm (2.7 MB)

here the original thread Complicated offset surface-how to make solid?

but since you already mentioned SimplifyCrv i always wondered what its good for, i see that it actually folds such microloops together to one straight line… but what is it for? not sure if i can fully comprehend even after reading the docs.


In theory it makes polycurves simpler by removing unnecessary complexity.

Suppose you tale a line or arc and split it onto 2 pieces and then join them. You now have a curve that has the exact same shape as the original but is more complex. Then run SimplifyCrv and it should restore the curve back to the original simpler form.

This really should work for any curve not just lines and arcs

(Pascal Golay) #11

Hi jim, all - SimplfyCrv also makes NURBS curves into polycurves if they are ‘eligible’. If you move a control point on a polycurve it becomes a NURBS curve - SimplifyCrv will return it to its polycurve (sometimes more ‘explodable’) state.



That allows you to explode the curve, but it doesn’t simplify the curve.

What I was saying is if you split a spline curve and join the result and then run SimplifyCrv it should restore it back to the simpler original curve. That is, when it can be simplified, SimplifyCrv should do it like it does for a line or an arc.

(David Cockey) #13

I agree with Jim. SimplifyCrv or another command should simplify multi-span curves of degree n which have adjacent spans with Gn continuity (ie G3 continuity for a degree 3 curve).


not sure i can follow this… do you mean for example a straight line with 3 control points?

this is why i have not understood it first, because i actually assumed it does that too and it never gave me any results. after reading the docs and your guys conclusive words i understand its “limited” function and have to concur that it would be a tremendous advantage if it could simplify any other curves.

(Wim Dekeyser) #15

No. Make two curves that touch. Join them. This single object is now an Open polycurve with 2 curve segments. The What command gives information about the two segments.

Now move one of the control points. The single object is now an Open NURBS curve. The What command now says Curve is not smooth. If you explode it, it will become two or more curves.

Now run SimplifyCrv. The object is now again an Open polycurve with 2 curve segments.


so i made 2 straight lines joined them and moved the middle control point. why would it become an open NURB curve after just moving it? basically nothing changes just that the conjunction point got moved. but i still cant understand how SimplifyCrv is supposed to make that better, or what the outcome may be of a better use for.


In general that is only going to work for splines that have been split or had a kink inserted. Its extremely unlikely that you will find a curve that can be simplified if it was created in some other way.

The result curve of SimplifyCrv always needs to be the same shape as the input curve so that functionally it can be used as substitute for the input curve without fail.

That particular function doesn’t really simplify anything. It changes the curve from one format to another. For some purposes that can be useful.

Most of the time Rhino will use the polycurve format for connected spline segments so mostly SimplifyCrv is used when curves that should be polycurves get accidentally converted to single NURBS curves and need to be converted to polycurves.


thanks Jim, you have been most helpful in letting me understand SimplifyCrv. but i have yet to encounter such a purpose where reconverting to Polycurve would be helpful, have you got an example?


First of all what you are asking about is not simplifying the curve - its just a function that was added because they could not think of any other place to put it.

As I said before if you convert a single spline curve that has more than one segment into polycurve it can then be exploded. That means you could do things like match the curve segments if they need it or work with the individual segments. But it isn’t
likely to come up that often because usually it will already be a polycurve.


yup that is clear

now that sounds strange :smiley: since rhino has so many tools (still didnt get through all of them)which could be compressed together a bit and then this.

yes i see but now the one million dollar question as already stated… what sense does it make to convert an open polycurve into an open NURB curve? is that a bug?

and by the way if nobody noticed yet, one can just simply cut and paste the open NURB curve and it converts right away back to polycurve without using the command SimplifyCrv.