get equi distant points on curve using parameterization

By Xiaodong Liang

Issue

Parameterization is not uniform, a linear sequence in parameter space would not necessarily correspond to a uniform spacing in model space (in general it is not).If you want even spacing in model space, use GetParamAtLength (iteratively).

Solution

The sample VBA code shown below demonstrates the same. The sample code assumes that you have a spline in part sketch.

 

Sub geteqdistptAss()                 ' assume we have had Inventor application            Dim oDoc As PartDocument            oDoc = _InvApplication.ActiveDocument                 Dim oTG As TransientGeometry            oTG = _InvApplication.TransientGeometry                 Dim oDef As PartComponentDefinition            oDef = oDoc.ComponentDefinition                 Dim oSketch As PlanarSketch            oSketch = oDef.Sketches(1)            ' Get the spline on a planar sketch            Dim oSpline As SketchSpline            oSpline = oSketch.SketchSplines(1)            Dim oEval As Curve2dEvaluator            oEval = oSpline.Geometry.Evaluator            Dim dmin As Double            Dim dmax As Double            oEval.GetParamExtents(dmin, dmax)            ' Get the curve length            Dim dLen As Double            Call oEval.GetLengthAtParam(dmin, dmax, dLen)            Dim dInc As Double            dInc = dLen / 100  'consider 100 points            Dim dLenInc As Double            dLenInc = 0            Dim dparams(0) As Double            dparams(0) = dmin            Dim iCnt As Integer
        For iCnt = 0 To 100                     Dim dParam As Double                Call oEval.GetParamAtLength(dmin,                                    dLenInc,                                   dParam)                ' a spline in planar sketch is 2d. its points are                 ‘ 2d (x,y)                Dim dPts(1) As Double                dparams(0) = dParam                     Call oEval.GetPointAtParam(dparams, dPts)                dmin = dParam                     Dim oPt2d As Point2d                oPt2d = oTG.CreatePoint2d(dPts(0), dPts(1))                     Dim oPt3d As Point                oPt3d = oSketch.SketchToModelSpace(oPt2d)                     'add the point as a work point                oDef.WorkPoints.AddFixed(oPt3d, False)                     dLenInc = dLenInc + dInc                 Next             End Sub

Comments

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading