THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 08/10/2012 at 04:06, xxxxxxxx wrote:
the returned values of GetSegmentLength of the SplineLengthData seems to be wrong:
from c4d import utils
#Welcome to the world of Python
def main() :
spline = op.GetObject()
spd = utils.SplineLengthData()
scnt = spline.GetSegmentCount()
segLength = spd.GetSegmentLength(1,2)
print "Seg. Length: ", spd.GetSegmentLength(0,1)
print "Seg. Length: ", spd.GetSegmentLength(1,2)
print "Seg. Length: ", spd.GetSegmentLength(2,3)
This code put on a spline with three segments with different lengths, will return the following:
Seg. Length: 1.0
Seg. Length: 698.168987717
Seg. Length: 0.0
So, it seems that the second number is the length of the first segment. It seems one needs to Init the spline with the second argument set to a certain segment index (here the segment was implicitly 0). Then the second returned value seems to be the length. How should I interpret these results?
On 08/10/2012 at 05:31, xxxxxxxx wrote:
Use GetRealSpline() to check any type of spline,
point splines and prim splines.
For strings (the print) use the py formatting
for speed and compatibility between scripts manager
and "real" code (plugins).
from c4d import gui,utils
from c4d.utils import SplineLengthData
def main() :
if not op or not op.GetRealSpline() :
print 'No Spline Object Selected'
rs = op.GetRealSpline()
scount = rs.GetSegmentCount()
prim = SplineLengthData()
for seg in xrange(scount) :
slength = prim.GetLength()
print 'Segm %(seg)s Length: %(slength)s' %locals()
On 08/10/2012 at 05:59, xxxxxxxx wrote:
Thank you Lennart, this at least yields correct values. But its dead-slow for big splines, so I shortly wrote my own SplineLengthData.
What is the difference between the spline that I have and the spline I get through GetRealSpline()?
How did you figure this out? Anything in the docs?
Edit: Although I see now, that I was using a Spline-Primitive and not yet a "real" spline object, the methods still work kind of strange. The GetLength() method seems to return the length of the spline-segment that was initialized, not the length of the full spline and the GetSegmentLength() seems to return .. I dont konw
On 08/10/2012 at 06:33, xxxxxxxx wrote:
You want the total length of the spline? (All segments)
Then in the for loop add the segment lengths.
PS If you found a faster spline length calculation, please let us know DS
On 08/10/2012 at 07:45, xxxxxxxx wrote:
Ok, my first tests where not fair (sorry API). My approach is faster as I don't need to subdivide the spline and I don't need to care about other splines than linear. Like this a very simple sum-distances approach is of course superior.
But still, the problem of the SplineLengthData remains, that we have to call Init repeatedly and that GetSegmentLength does not return the correct values for different arguments (once initialized).