GetSegmentLength
-
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:
Hy there,
the returned values of GetSegmentLength of the SplineLengthData seems to be wrong:
import c4d from c4d import utils #Welcome to the world of Python def main() : print op.GetObject().GetName() spline = op.GetObject() spd = utils.SplineLengthData() spd.Init(spline) 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:
Spline
Seg. Length: 1.0
Seg. Length: 698.168987717
Seg. Length: 0.0So, 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?
Thank you,
maxx -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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).Cheers
Lennartimport c4d from c4d import gui,utils from c4d.utils import SplineLengthData def main() : if not op or not op.GetRealSpline() : print 'No Spline Object Selected' return True rs = op.GetRealSpline() scount = rs.GetSegmentCount() prim = SplineLengthData() for seg in xrange(scount) : prim.Init(rs,seg) slength = prim.GetLength() print 'Segm %(seg)s Length: %(slength)s' %locals() prim.Free() if __name__=='__main__': main()
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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
Thank you,
André -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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.Cheers
LennartPS If you found a faster spline length calculation, please let us know DS
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
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).
Cheers,
André