Laser cutting NURBS curve


Greetings -

Have curve “A” detailed as follows:

Valid curve.
Closed polycurve with 8 curve segments.
Segment 1:
Open NURBS curve
start = (-7.07029,-2.24453,0)
end = (-5.75547,-0.929714,0)
degree = 3
control points: non-rational, count=724
knots: non-uniform, domain = 6134.88 to 6854.88
clamped at start and end
Segment 2: …

Eight similar segments totaling 8x724 = 5792 control points.
This curve severely bogs down the laser cutter.

Offset curve “A” some small amount (say .001”) and get curve “B” detailed as follows:

Valid curve.
Closed NURBS curve
start = (-5.7564,-0.929332,0)
end = (-5.7564,-0.929332,0)
degree = 3
control points: non-rational, count=1567 (1 duplicate)
knots: non-uniform, domain = 0 to 26.9605
clamped at start and end

That’s it – just 1567 control points in a nearly-identical shaped curve “B” which laser cuts nicely.

Question: How to convert curve “A” to the characteristics of curve “B” in-place?

Tried several approaches to no avail – offsetting to both sides then “tweening”, rebuilding, change degree, convert, ConvertToBeziers, etc…

It’s apparently possible to simplify this curve from ~6000 control points to ~1500 control points without changing its shape.


Tom Longtin


First thing I might try is FitCrv with a max deviation tolerance you can manage. Set the angle tolerance so it doesn’t smooth over the kinks.

I assume that the curve has kinks in it and that’s why Rebuild doesn’t work for you, because otherwise, with that high a point count, I think it would also not alter the shape too much if you reduced the point count significantly with Rebuild.

If you can, post the curve in question and someone will look…



I always use “convert” on anything that’s not already straight lines and/or pure arcs before I export. I use it with the angle tolerance set to zero… which allows the arc segments to not be perfectly tangent, but I crank up the tolerance to about 0.001 which keeps plenty accurate enough for all my uses, and it certainly stays completely smooth on a visual level to the human eye.


Thanks, Guys - Got best results with FitCrv:

Fitting tolerance <0.0010> ( DeleteInput=No Degree=3 OutputLayer=Input AngleTolerance=0.001 ):

Reduced control points from ~6000 to ~1000 in a nearly-identical curve - laser cutter happy now!

Tom Longtin