Best way to simplify complex splines into arcs for CNC cutting?


#1

Hi all,

I’m using Rhinonest to slice a complex lofted surface for CNC cutting. The sections cut by Rhinonest are closed curves that have control points every few millimeters. The CNC CAM software will only accept arcs and lines so I cannot export as splines. If I convert them to lines to arcs through the ‘convert’ command the arcs are so short that the CNC operator is telling me the machine will have a very hard time with all of the short segments and the edges will be very ragged. He is suggesting I trace all of the complex curves with arcs and lines. We will have about 750 unique sections so this is in unfeasible work flow.

Can anyone suggest the best way to simplify these complex curves into the minimum number of line/arc segments required to reasonably describe the geometry for CNC cutting.

My current process is to use the commands “RebuildCrvNonUniform” set the number of control points to ~75 to maintain the curve shape the the “convert” command converting to arcs with a minimum control point spacing of 25mm or so again to keep the sections shape.

Attached is a Rhino5 file of the cut sections as well as a couple of images of the surface they were cut from.

Any assistance i greatly appreciated and let me know if you have any questions.

Thanks

Sample Slice Forum.3dm (1.7 MB)


#2

Well, several bits of advice I can offer here…

First, find a different CNC shop, one capable of handling splines… There are many shops with poorly adapted software/hardware for this type of fabrication, but those that can handle it are out there. It’s not just about CAM software, although that can be part of the problem, it’s also about the CNC machine(s) they have and whether they are capable of interpolating lots of small segments together at a reasonable speed to cut spline-like curves. Most CNC machines only understand lines and arcs, so in order to cut free-form curves with any reasonable degree of accuracy, they have to be broken up into many small segments (tessellation). Whether those small segments are lines or arcs doesn’t matter that much if there are many of them… If the machine is not able to string all those together and cut smoothly, you won’t have a satisfactory result.

The idea behind “arc fitting” is to replace a number of small straight segments representing a tessellated free form curve by a (much) fewer number of tangent arc segments. In theory, this is a good idea, but as complex free form curves cannot readily be approximated by just a few lines and arcs, the larger the segments you want, the further off the original curve you will end up (larger tolerance).

So, a good CNC shop that can cut freeform curves has software and machines that can take CAD splines and use the CAM software interpret them as dense polylines (lots of small straight G1 interpolations), and have the machine control system process the data and manage the kinematics of the machine so the cutting happens smoothly without vibration or interruption.

All that being said, about your file…
I didn’t see the original slice curves in the file, looks like the slices have already been “processed” into polylines (don’t see any arcs), and the result looks kind of choppy… I created an example file using the first slice - which is a polyline having 431 points.

What I did first is attempt to recreate what your original slice curve might have looked like - it was certainly a smooth curve, not a polyline. So the blue curve is an “approximation” of what the original slice might have been - a degree 3 freeform curve with around 60 points… You would not have to do this, I just tried to start with something like what you started with. (I would not necessarily rebuild the slice sections as you said you do, that is not necessary for the following steps and will only introduce more inaccuracy.)

I then copied over the curve - twice, one on top of the other - and locked one copy for reference. Withe the other copy (blue) I ran Convert with the following settings:

Output=Arcs  SimplifyInput=No  DeleteInput=Yes  AngleTolerance=1  Tolerance=1  MinLength=0  MaxLength=0  OutputLayer=Current

That resulted in a curve (red) composed of 132 arcs that should be tangent to each other to within 1 degree. You can decide for yourself whether this is better than the original. Making the angle tolerance finer will result in more segments closer to tangent with each other. Unfortunately, Convert is not currently capable of combining a fine angle tolerance with a coarse chordal (deviation) tolerance; you cannot specify for example 0.1 angle tolerance with 10 unit chord tolerance and get fewer arcs further away from the original curve but with better tangency (which would be nice…).

Anyway, since this is an object that will (apparently) get glued together and then heavily sanded into shape, you can support a rather large tolerance, so the trick will be some experimentation to find what settings work best for the machine in question.

–Mitch

Sample Slice Convert.3dm (94.2 KB)