3 Replies Latest reply on Oct 27, 2016 7:45 AM by Mark Fosdike

    Arc Length/GetLength2 Differences

    Mark Fosdike

      I'm using the below code to "goal seek" the desired length of a spline. Essentially I have a spline which has been trimmed to an oversized circle, and it runs a loop which adjusts the circle size smaller, measures the difference between the spline length and the desired spline length and feeds that back into the next circle size. This approaches the desired length then exits the loop when it's within 10^-6 m.

       

      To date this method has worked quite well. However, I'm finding that lately the measured spline according to the GetLength2 function gives a different value than the Arc Length when measured in Solidworks. Does anyone know why this varies, and by so much?

       

      Thanks for your help! Code and snapshots below:

       

      ''''''''''''''''''''''''''''''''''''

      CircleDiam = 0.7

         

          While SplineMeasure > sinDesiredArcRootLower + 0.000001

             

              Set myDimension = Part.Parameter("D1@" & SketchNo2)

              myDimension.SystemValue = CircleDiam

              Part.ClearSelection2 True

             

              Part.ClearSelection2 True

              SelectSkSegFs (jj + 4) 'Part.Extension.SelectByID2 "Spline2", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0

              Set swSketchSeg = swSelMgr.GetSelectedObject5(1)

              Set swCurve = swSketchSeg.GetCurve

         

              bRet = swCurve.GetEndParams(nStartParam, nEndParam, bIsClosed, bIsPeriodic)

              Debug.Assert bRet

             

              vStart = swCurve.Evaluate(nStartParam)

              vEnd = swCurve.Evaluate(nEndParam)

             

              ExtractFields vStart(6), nStartSuccess, nDummy

              ExtractFields vEnd(6), nEndSuccess, nDummy

              Debug.Assert nStartSuccess

              Debug.Assert nEndSuccess

             

              SplineMeasure = swCurve.GetLength2(nStartParam, nEndParam)

             

              Debug.Print "Length = " & swCurve.GetLength2(nStartParam, nEndParam) * 1000# & " mm"

             

              CircleDiam = CircleDiam * (sinDesiredArcRootLower + SplineMeasure) / (2 * SplineMeasure)

          Wend

      ''''''''''''''''''''''''''''''''''''

      SWQuery2.PNG

      SWQuery1.PNG