I am confronted with this fairly often as we cut topo maps via CNC knife and laser cutters… These days I mostly use Grasshopper with a combination of the components SmoothPolyline, ReducePolyline and perhaps CollapsePolyline. I try to keep the curves as polylines as smoothing them out to splines with rebuilding often removes too much character from the result - it looks too “soft” afterwards.
However, I also do have a script to rebuild curves with a variable number of points based on curve length, it is posted below. Beware when you use rebuild that closely spaced contour lines may overlap in some areas afterwards, so check your results.
Edit - just discovered a bug in script with the status bar progress meter (for Windows users, Mac users won’t see it) I’ve re-uploaded a correction…
RebuildCrvsByLength.py (2.5 KB)