Problem with how Rhino interacts with Rhinocam

As the topic says, I have a problem with how Rhino interacts with Rhinocam. When creating a drawing—I may use a number of curves to end up with a closed/open— curve/surface. Even though this is joined and verified as closed/one curve—when Rhinocam reads this—it is segments connected together. And, yes this is a Rhinocam problem; however, I think Rhino may be able to offer the simplest solution. I would like a new command to “Make one curve”. So, no matter how many curves are used to create a joined closed/open curve/surface—it would be “RE-CREATED” as just a single curve/surface. I think other users would find many uses for this new command—and— it would force Rhinocam to deal with coding problems within their software and correct them—instead of blaming Rhino for the problem.

I just found another problem as referenced above. I was trying to make a circle tangent to a segment of a ellipse and a line. Although they were joined, the command would stop trying to make tangent at the point where the underlying ellipse joined with the straight curve.

Perhaps you could describe the exact problem you are having with RhinoCAM and Rhino curves/surfaces, I’m not sure I understand. Normally RhinoCAM treats joined (poly)curves as one single curve - I don’t recall any exceptions to this. Surfaces/polysurfaces are different, basically because of their nature. You generally cannot turn a polysurface into a single surface (there are a few classes of possible exceptions), so they will always be treated as polysurfaces. But RhinoCAM does not have any specialized single surface machining operations (such as NURBS flowline machining) anyway, and it’s basically turning surfaces/polysurfaces into meshes behind the scenes so it really doesn’t know much about the surfaces in any case.


My post here is basically as a suggestion for a new command in Rhino and the reasons I think it should be considered. To give exact examples of the problems within Rhinocam are not my objective. I have had Rhinocam for years, and, I probably will for many years to come. If you wish to communicate privately on my exact issues - ( I’m not sure how that would be done ) - I have will do that. I do not wish to badmouth Rhinocam on a public forum.

I’ve been a RhinoCAM user for many, many years as well - basically since it came out and even before as VisualMill. My intention was just to clarify what you are asking for, as in my mind anyway, it’s not at all clear.

This statement doesn’t make much sense to me… Multiple curve segments joined DO make a single curve after joining - assuming they touch within tolerance. Multiple surfaces also join into one single polysurface if they are within tolerance.

Maybe you can post an example of what you expect the command to do that Rhino does not do currently… --Mitch

I guess the term “Join” is subjective. In a manner, yes the curves are joined; however, they will always have their underlying separate parts. As an example, explode the just joined curves. They will then divide back into their original parts.

So my suggested new command would make a completely new “single curve” - ( delete or save the original ) - —you would not be able to explode it----just as if you draw a circle—it cannot be exploded.

I guess that wouldn’t be possible…

At least for the way Rhino math is working underneath. How would you make a single curve with kinks without separate segments? A rectangle?

Circle is a Degree 2 non-periodic curve, with kinks, but not explodable, a very special exeption/situation.

What exactly is the problem you meet in Rhinocam (I’m a Rhinocam user too)? Where does it see a single joined curve as partial seperate curves?


Well, I specifically don’t want this to be a Rhinocam bashing discussion; however, What I see is “Z” losing it way. I see it in Horizontal Finishing/Horizontal Roughing and in Between two curves. It is more likely to not read a solid that is made of more than one segment—even though it checks out in Rhino to be just fine. I just had a Mop that should have been 450,000 lines of code turned into 985,000 lines of code…----in tool path details—it should have taken 2 hr 10 min—it took almost 5 hr. It happens all the time to me. The only commonality in all the different 3D models is, - ( does it have segments or not ) -. It is definitely a Rhinocam problem—I am just suggesting all would go away with regenerating segments into one curve. I don’t think it would be all that hard. It’s just a matter of writing the code. Forget the original curve itself and concentrate on the control points. Make a single curve of any kind that would use those exact control points—don’t change anything.

Rhino uses NURBS (Non-Uniform Rational B-Splines) as the basis for representing curves and surfaces. A mathematical (not coding) fundamental of the NURBS is a single NURB of degree n without stacked control points needs to be G(n-1) continuous everywhere. That means a degree 2 NURBS without stacked control points needs to have tangent continuity everywhere, and degree 3 NURBS without stacked control points needs to have curvature continuity everywhere. Stacked control points can cause difficulties so they are avoided. So if a curve has several segments without the required level of continuity between them Rhino represents the curve as a set of joined curve.segments.

Rebuild will rebuild a curve, including a joined curve with curvature and tangency discontinuities, into a single smooth curve of specified degree with a specified number of uniformly spaced control points which approximates the input curve. Any kinks or curvature discontinuities will be lost.

RebuildNonUniform will rebuild a curve, including a joined curve with curvature and tangency discontinuities, into a single smooth curve of degree 3 with a maximum number of control points which and attempt to stay within a specified tolerance of the input curve. Any kinks or curvature discontinuities will be lost.

1 Like

The operations you mention are all surface machining operations. As I mentioned before, RhinoCAM surface machining operations are not calculated directly from surfaces - they are calculated from meshes. The issue here is that RhinoCAM has its own meshing algorithms - it does not use the Rhino mesher AFAIK. Objects are meshed differently according to the parameters you set in the CAM operation, then the toolpaths are created on the meshes. The curves in operations such as B2C or HF are just used as guide or limit curves. Unfortunately, you cannot actually see or control how RhinoCAM is meshing Rhino polysurfaces and that (IMO) is the source of a number of problems.

One thing you can try when you think that RhinoCAM is not dealing with the Rhino NURBS model well is to mesh the NURBS yourself with the Mesh command, check the meshes to see if they are good (fix them if necessary), hide the NURBS surfaces and then run your toolpaths on the mesh(es). I often find this can give better results. You do need to make sure the mesh facets are fine enough to not be seen in the final result, as RhinoCAM will not remesh mesh objects.

As David said, there is not much you can do with the structure of NURBS to unify polycurves/polysurfaces into single NURBS entities without radically changing the geometry. IMO it’s not really necessary either, as most CAM programs I know seem to be able to deal with NURBS/BREP geometry reasonably well.

The thing I generally end up saying about RhinoCAM: “It is what it is.”



But how to get such a single curve out of a polycurve ?

This is a polycurve made by Rectangle and then FilletCorners
Is there a way to turn it into a single curve ?

( For surfaces I would use MergeSrf … with its limits … but for curves ? )


There is the old trick - move one control point (with nudge for example) then move it back the same distance… --Mitch

This topic has not attracted the attention of McNeel. I have tried the nudge method—I didn’t see much difference. Thanks all for the reply’s. I will try some of your suggestions—to see if they help.

And yes, Rhinocam is what it is. Although I am in the process of checking with other cam programs to see if this is a common or uncommon problem.

Thanks all, …

Thanks Mitch !

Didn’t know ( … or didn’t remember ) that


Hmmm … just noticed that the single curve has double knots.
It’s like a sequence of Bezier curves …

And using RemoveKnot changes the curve’s shape
I wonder if it’s possible to have that curve with single knots …
Maybe it’s because the curve is rational ? … Don’t know …

Just curious. :grinning:

Also noticed that extruding the single curve I get an extrusion. Fine.
But when the extrusion is edited, it suddenly turns into a polysurface.
… And I still have to use MergeSrf to get a single surface, when I need it …:unamused:

I received this from McNeel:
Sorry for the delay from the Forum.

A command that will do this is CurveBoolean.
It will replace the collection of curves with one curve.
Join is another command that will work if the segments share end points.

When they are joined, SimplifyCrv to replace a curve with corresponding line, arc or circle.

Any automation of this would need to be scripted.
IF you do not have a programming background, it will take time to learn scripting and then figure out what you want your script to do.

See the attached example file.
Hope this helps.


Max Fugier
McNeel Technical Support and Training
Seattle, WA

Thanks all, I will have to do a lot of research to see is if I can get the results I am looking for…