Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    GetSegmentLength

    Scheduled Pinned Locked Moved PYTHON Development
    5 Posts 0 Posters 519 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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.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?

      Thank you,
      maxx

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        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
        Lennart

          
        import 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()   
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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é

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            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
            Lennart

            PS If you found a faster spline length calculation, please let us know 🙂 DS

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              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é

              1 Reply Last reply Reply Quote 0
              • First post
                Last post