Hi @didin.suryadi6JREK. I see that I forgot a step while using the Edge.Evaluator tools (CurveEvaluator). I needed to use the Evaluator.GetParamExtents first, to get the Min & Max params, then use those instead of zero and one for the first two input params of the Evaluator.GetLengthAtParam method, to get the true length of each Edge. I was assuming that zero and one represented a percentage of the edges overall length, as the 'from & to' input parameters, and that the method would understand that I want 100% of its length, but I was apparently not remembering it correctly.
To fix the code, I replaced these these two lines:
oEL.Edges.Item(1).Evaluator.GetLengthAtParam(0.0, 1.0, oTotalLength)
oEdge.Evaluator.GetLengthAtParam(0.0, 1.0, oLength)
...with these blocks of code, in the same order:
Dim oMin, oMax As Double
oEL.Edges.Item(1).Evaluator.GetParamExtents(oMin, oMax)
oEL.Edges.Item(1).Evaluator.GetLengthAtParam(oMin, oMax, oTotalLength)
Dim oMin, oMax As Double
oEdge.Evaluator.GetParamExtents(oMin, oMax)
oEdge.Evaluator.GetLengthAtParam(oMin, oMax, oLength)
But also keep in mind that the values returned may be in 'database units' (centimeters), instead of inches. If that is the case, then you may need to convert the values from centimeters to inches. I have included some lines of code for these units conversions in the updated code attached in the text file below. Give this version a try, and let me know if it is working OK for you or not.
Wesley Crihfield

(Not an Autodesk Employee)