(edited by Manuel : I splited this thread from this one)

@m_magalhaes said in Post Deformer Spline:

SplineToLineIndex

Hi Manuel,

I am not the one who asked the original question, but your find of the `SplineToLineIndex()`

method in `SplineHelp`

is a good one!

I must have look at `SplineHelp`

's API over a dozen times and never noticed it was there. I thought one would have to traverse all of the `LineObject`

's points and correlate them with points on its parent `SplineObject`

based on position, in order to come up with the mapping from `SplineObject`

point index to `LineObject`

point index. So, this feature of `SplineHelp`

is really valuable, since it offers this very mapping as part of the core Python API.

I guess this also implies that there is always a 1:1 correspondence between a point of a SplineObject (which represents one or more B-Splines via formulas) and a point of its underlying LineObject which represents a bunch of line segments connected together. I wasn't sure if this was always guaranteed to be the case.

Now, for a somewhat related question to what has already been discussed, while we are on the topic of `SplineHelp`

, is there some top secret way to do the opposite of what the `GetPointIndex()`

method of `SplineHelp`

does, that is to get the offset (i.e., 0<=offset<=1.0) along a spline's `LineObject that a particular`

LineObject` point idx is located at? This would also be really helpful.

Let's look at an example:

Say you create a *Rectangle* parametric spline object that has a width and a height of 100 cm, so basically a square. We'll set the Intermediate Points setting to *None*, so that the spline object and its line object have identical point counts (i.e., four, for the four points that make up the corners of the square). Now, let's say you perform a *Make Editable* operation to convert the (parametric) Rectangle into an editable closed spline object, consisting of one segment with four points. If you go into the *Structure Manager*, you can see that the points are indexed 0-3 (since, there are four of them) and you see their coordinates, as well.

These points are located, with regard to offset, at 0%, 25%, 50%, and 75% of the length of the spline (or offsets of 0.000, 0.250, 0.500, and 0.750), respectively, since our original parametric spline shape was a square. Since this is a closed spline, `GetPointIndex()`

will return the (sentinel or logical) idx of 4 (i.e., the count of the number of points in that segment of the `LineObject`

) if asked for the nearest point to 100% of the length of the spline.

Now, given for example the point at Index #1, so the second point of the spline's LineObject, which is obviously 25% of the distance along the spline as previously mentioned, what method could you use on the `SplineObject`

, it's underlying `LineObject`

, or 'SplineHelp' to get a 0.25 offset value from that LineObject point index of 1.

The `GetPointIndex()`

member function of `SplineHelp`

takes a (Spline space) offset value and a segment idx, and returns the closest `LineObject`

point, by index, to that spline space offset value.

As described in the above example, how do you go in the opposite direction, from a `LineObject`

point, by index, to an offset value along the `LineObject`

in spline space?