Curve point at parameter for different distances

Hello Everyone,
I am lookin for a way in which i can get curve point at parameter for different distances as show in the image. Could some one help

If you need the Points as output, use Curve.PointatSegmentLength

If you need the parameter at the point use Curve.ParameterAtPoint.

If you need the parameter value to start querying the curve, get the Length and divide it by the sum of the lengths you gave.

Your question is not really clear.

1 Like

Hello Bjorn keulemans I want to divide curve for specific distances as shown in the image and the output I am looking from it is points on the line.As of now I am aware how to do it for a single distance, but I am looking for multiple distance.

1 Like

I you know how to do it for a single distance, learn about lists. You will find if you use a list as input Dynamo will repeat the function for every item in the list.

Your list should be the total distance you want to travel to the point each time. So [19,63,25…] will not work, it should be [19,82,107,…]

Start reading the Dynamo primer and searching in this forum, this is basic stuf.

Maybe this helps

Hello Marcel Rijsmus ,
Thank you for letting me know about this package . But unfortunately i can not access this package.
I use dynamo integrated with Alias , so i can not find this package . But the results are the same what i am looking for .
Particularly the Equal length distribution of multiple values justified at center
Could you please post a screenshot of the graph using standard nodes?

Do some bulk addition on a list of values.

  1. get the curve length
  2. gather the series distances
    3)divide the curve length by the series and round up to get the number of repeats
  3. repeat the series the number of times as you found in 3 and flatten the list (now you have A,B,A,B…)
  4. Count the list of sequences, and build a range from -count+1...0;
  5. Drop items from the series set using the range - this will give you subset for each index containing the index and all values before it.
  6. Sum the sunset series
  7. Filter out any points longer than the curve.
  8. Curve.PointAtSegmentLength to find where your points are.

Hello Everyone,
After spending some time i could acheive what i am looking for i.e, points on a curve with multiple distances. Could some one guide me in distributing the poins symmetrically with respect to center axis yz .
Hi Jacob small,
I will try your method too . Thank you

you metod and mine are effectively the same. You just went additive, while I went subtractive. It does look like you’re runnign the :slight_smile:

To center the overall distribution, get the leftover distance (the value after the overall repeat is done subtracted from the overall curve length) divide by two and add the result to each value.

You could also map the distance over the length, resulting in the same ratios but with different values, or split your curve at the mid point, trim the result by 1/2 of a value from the sequence, reverse the first curve, and perform the offset on each curve.

Lots of options here, really just a matter of understanding what you want in the end. :slight_smile:

1 Like

Hello Jacob Small,
Thank you for the reply
I could not exactly replicate what you have mentioned above . If you could please post a screenshot of the graph. That helps me to understand better

Hello Jacob Small,
I tried to split the curve to half and then reduce the distance between the center points to half by reversing one curve, but the result seem be different . could you take a look at it

s to

1 Like

Sorry - my previous directions may not have been clear.

Here are four options for distributing points along a curve:

The first option is more or less what you did. :slight_smile:
The second option splits the difference in the overrun, giving an equal remainder at the start and end of the series.
The third option centers the last value in the series, and runs the pattern out from there.
The fourth option keeps the proportions, but scales up the values to fit the entire curve.

I’ll skip over the steps for option 1 because you’ve already got it worked out, but you may want to add a filter to remove any values which are greater than the curve is long (I used a List.FilterByBoolMask node for this). Doing so will help in other options and reduces a geometry effort by using a mathematical test which is faster (simplier data type).

For option 2: Add a ‘0’ value to the list of points to split the curves at. This will ensure we’ve got matchign pad values at the end. Then take the last length in the summed series and subtract that from the list of values. Divide that by 2, and add the result to each number. Now instead of the first break being at 0 it’ll be at 1/2 of the remainder, and all other values will be shifted an equal distance.

For option 3: split the curve in half, and then find 1/2 of the last value in the sequence. Remove that part of the geometry of each of the two curves, and then do some list management to start the first curve at the first value, and the other curve at the 2nd to last value and work backwards. Make the points on either curve (note there are two branches in this graph) in sequence, and then combine the two lists. You’ll need to add the ‘0’ value to the list as well to ensure you capture the start of the curve.

For option four: add a ‘0’ value to the front of the list, and then use a Math.RemapRange node to distribute the values from 0 to the length of the overall curve. Your segment lengths won’t be the lengths you fed in, but they will be equally spaced at a proportion equal to your original lengths.

Hope this helps. :slight_smile:

1 Like

Thank you Jacob Small . This graph is very helpful. :smile: