I noticed the SplineHelp class doesn't work correctly with closed, segmented splines. Since I can reproduce the problem in R20 - R23, maybe I'm overlooking something.
Let's take a spline containing two simple rectangles. Then use SplineHelp to sample positions along each segment.
Code for a simple Python plugin tag that will sample the positions and print them out:
self.samplePositions = 
def Execute(self, tag, doc, op, bt, priority, flags):
if op.GetType() != c4d.Ospline:
splineHelp = c4d.utils.SplineHelp()
if not splineHelp.InitSpline(op):
samplesPerSegment = 20
segmentCount = op.GetSegmentCount()
realSegmentCount = segmentCount
closed = op.IsClosed()
if segmentCount == 0:
segmentCount = 1
print("Object: %s" % op.GetName())
print("Segment count: %s" % segmentCount)
print("Closed: %s" % closed)
for segmentIndex in range(segmentCount):
for sampleIndex in range(samplesPerSegment):
relativePositionOnSegment = float(sampleIndex) / (float(samplesPerSegment) - (0 if closed else 1))
samplePosition = splineHelp.GetPosition(relativePositionOnSegment, segmentIndex)
print(("\tSegment %i: Relative pos: %f; 3D pos: " % (segmentIndex, relativePositionOnSegment)) + str(samplePosition))
The result is strange:
See the values from the last side of the 2nd segment? How could that ever return Z values > 0.0, when the whole segment is located in the -Z area?
They seem to be going towards the first point of the first segment, instead of the first point of the actual segment.
See where the samples go:
This problem is exactly the same in C++ and Python. It does always occur with closed splines that have more than 1 segment.
How can I sample positions along a spline without getting nonsense positions?
this issue have been discussed on this topic.
I've opened a bug entry but it's currently not fixed yet.
Could you please try to set the first parameter smooth to false ? (true by default)
thanks for the info! If smooth is set to false, the wrong positions disappear in deed. The distribution of the positions, however, is much uglier. It requires the user to change some specific attributes of the spline to make it look nice.
But I think, that's ok for now.
Thanks again & greetings,