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

    spline position in meters

    SDK Help
    0
    7
    621
    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
      Helper
      last edited by

      On 25/10/2013 at 10:18, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   r14 
      Platform:      
      Language(s) :     C++  ;

      ---------
      Hi, 
      i am trying to get real unit distances along a spline. this is what i've tried so far, in various combinations. but until now with no luck. i want to find a point on a spline which is for example 20meters from the start of the spline.

      SplineLengthData* splLengthData = SplineLengthData::Alloc();
      splLengthData->Init(baseSpline,0,NULL);
      if (!splLengthData) return false;	
        
      SplineHelp* splHelp = SplineHelp::Alloc();
      if (!splHelp) return false;
        
      splHelp->InitSpline(railSpline,Vector(0),0,false,true,false,true);
      Real rp0 = splHelp->GetOffsetFromReal(myOffset,0);
        
      //Vector p0=splHelp->GetPosition(rp0,0,true,true);
      Vector p0=splHelp->GetPosition(splLengthData->UniformToNatural(rp0),0,true,true);
      

      hope someone can point me into the right direction.

      PS: interesting thing is, that it seems to work with an arc-spline but not with a completely free defined spline

      cheers,
      Ello

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

        On 25/10/2013 at 11:13, xxxxxxxx wrote:

        another thing i don't find is how to get the position (0.0<=t<=1.0) of a spline point

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

          On 25/10/2013 at 13:43, xxxxxxxx wrote:

          offset = SplineHelp.GetOffsetFromUnit()

          or

          offset = myUnitOffset / SplineHelp.GetSplineLength()

          for the last question you have to calculate the length of the spline up to that point in a linear
          fashion (l = p0 + ... +  pn , where p is a spline control point vector). and then operate with the
          natural offset. feels a bit clumsy, but is at least the only way i do know.

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

            On 28/10/2013 at 13:52, xxxxxxxx wrote:

            ok, it's me again. i have now created a testplugin for just this purposes. and am getting strange values which i cannot handle.

            		SplineObject* spl = spline->GetRealSpline();
            		if (!spl) return false;
            		SplineHelp* splHelp = SplineHelp::Alloc();
            		if (!splHelp) return false;
            		splHelp->InitSpline(spl,Vector(0),NULL,false,true,false,true);
            		SplineLengthData* splLengthData = SplineLengthData::Alloc();
            		Vector* padr = spl->GetPointW();
            		splLengthData->Init(spl,0,padr);
              
            		Real length = splLengthData->GetLength();
            		GePrint("Length: "+RealToString(length));
              
            		Real targetLength = (length-offsetS-offsetE);
            		GePrint("Target Length: "+RealToString(targetLength));
              
                            LONG count = 1;
            		if (dist>0) count = int(targetLength/dist);
            		
            		GePrint("Number: "+LongToString(count));
            

            for example if i draw a spline with points at (-300,0);(0,0);(0,300) this gives me proper values when the spline is type linear and no interpolation. if i change the type to bezier or whatever, the length changes (also the editor still displays the same spline) when i change interpolation, the length varies of course. but what bothers me is that different types (at interpolation none) give different length also they look absolutely the same in cinema.

            any help is really appreciated as this is giving me quite some headache...

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

              On 29/10/2013 at 02:03, xxxxxxxx wrote:

              an example :

              http://codepad.org/y0e8VBoB

              and as an example file (python tag rig on a spline object) :

              http://www.file-upload.net/download-8231188/spline_sample.c4d.html

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

                On 29/10/2013 at 02:38, xxxxxxxx wrote:

                thank you.

                i guess it is all right with my "strange" values, since cinemas project info panel (structure) gives me the same results. for example i have a spline (three points at -200,0 0,0 and 0,200) the length is 400 if type is linear. when i change to bezier, the length changes to 414.041 but the spline in the editor remains visually unchanged. i don't get this behaviour.

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

                  On 06/12/2013 at 23:19, xxxxxxxx wrote:

                  anyone ever found a working solution for all types off splines? for example to place an object exactly 5meters from the spline start, no matter if the spline is linear, bezier or whatever and no matter if some lines of it go straight and others are curved??

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