I've recently worked with three.js curve entities and discovered something that confused me.
Let's say you create an instance of CurvePath and add some curve objects to it. If you want to sample evenly distributed points from that CurvePath, you call .getSpacedPoints(). The problem is that .getSpacedPoints() returns different results if the CurvePath object is closed via .closePath() or .autoClose.
This example shows the effect of .closePath(). IMO the result is correct because points are distributed over the entire path.
https://jsfiddle.net/t24kj0q0/4/
The next example uses .autoClose and seems to be incorrect because there is no sampling of points in the last line curve.
https://jsfiddle.net/8cc1d1cp/4/
The problem is that CurvePath handles .autoClose and .closePath() differently. .closePath() creates an additional line curve in order to connect the last and the first point of the path. .autoClose instead doesn't create a curve but just adds the first point twice to the points array in .getSpacedPoints() and .getPoints(). This variation looks confusing to me and i would prefer an uniform behavior.
Maybe one solution: Enhance the .add() method of CurvePath. The implementation could evaluate .autoClose and adjust the curves array property if necessary via .closePath().
/ping @zz85
馃憤 examples. To recapp your examples,
.closePath()

.autoClose = true

.getPoints()

You're right about the behaviour of .closePath(). It adds an additional line to "close the path". However this seems a more explicit action (you don't change the curve after you use this action)
.autoClose on the other hand probably isn't well named and doesn't do what it says. I actually don't quite remember how this property is typical used, however we really wanted the behaviour similar to closePath if can change getCurveLengths() to make sure it returns the segment from a last automatic inserted straight line..
Closing issues from your young self 馃榿
Most helpful comment
Closing issues from your young self 馃榿