Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Drawing a spline

    SDK Help
    0
    26
    15.2k
    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

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 07/02/2011 at 00:37, xxxxxxxx wrote:

      The SplineObject class is derived from the PointObject class. Look at the methods of the PointObject class to modify spline points. The SplineObject class has additional methods to access tangent data.

      cheers,
      Matthias

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

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 07/02/2011 at 03:21, xxxxxxxx wrote:

        Thanks to both of you.  I see in the C++ docs that SetPoint() and SetPoints() are part of the Modeling Class.  Are these the methods that I would use to insert the points of the spline?

        Thanks,

        Shawn

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

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 07/02/2011 at 04:41, xxxxxxxx wrote:

          I usually access the writeable point array.

            
          Vector *padr = ((PointObject* )splineop)->GetPointW();   
          
          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 07/02/2011 at 05:24, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            I usually access the writeable point array.

             
            Vector *padr = ((PointObject* )splineop)->GetPointW();   
            

            Casting is not necessary because SplineObject is derived from PointObject.

            Just write:

            Vector *padr = splineop->GetPointW();
            

            cheers,
            Matthias

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

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 07/02/2011 at 05:58, xxxxxxxx wrote:

              Okay so let's see fi I understand right.   I create the spline the way I did at teh top and because I point a point number in the allocation, that is the number of points I will have in teh spline,   then, I access those points through the points array like listed above? 
               
              ~Shawn

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

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 07/02/2011 at 06:14, xxxxxxxx wrote:

                Yes, that's correct so far. Please check the circle.cpp file of the SDK examples, especially the stuff in the GenerateCircle fucnction.

                cheers,
                Matthias

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

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 07/02/2011 at 06:34, xxxxxxxx wrote:

                  cool.. thanks Matthias.  I'll check it out when I get home tonight.,  🙂

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

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 07/02/2011 at 10:55, xxxxxxxx wrote:

                    I looked at the Circle.cpp example. But It's dealing with creating a spline primitive. Not a new spline from scratch. So I'm still not sure how to properly create a spline from scratch.

                    This code will create a spline for me:
                    SplineObject *sp = SplineObject::Alloc(3, SPLINETYPE_LINEAR); // create a spline with 3 verts
                      if(!sp) return NULL;
                      doc->InsertObject(sp, NULL, NULL, 0); // Add it to the OM

                    Vector *gp = sp->GetPointW();// The point array of the spline
                      gp[0] = Vector(0,0,-100);// Place the first point here
                      gp[1] = Vector(0,0,0);// Place the second point here
                      gp[2] = Vector(0,0,100);// Place the third point here
                    EventAdd();//Update all the changes

                    But the problem is the spline doesn't show up properly in the view until I physically move the points around a little bit.

                    In Coffee you have to use this code with the spline class:
                    var vc = new(VariableChanged);
                    vc->Init(0,pointcount);
                    myspline->Message(MSG_POINTS_CHANGED,vc);

                    So I was wondering if I need to also use this same code in C++ for the splines to draw properly?
                    I'm having a hard time converting that to a C++ version.

                    -ScottA

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

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 07/02/2011 at 11:49, xxxxxxxx wrote:

                      probably because all points are created at world center?  That's just a guess.  I have to get home to see the docs to be sure.

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

                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                        On 07/02/2011 at 12:11, xxxxxxxx wrote:

                        The three vector lines of code place the points so they aren't at the origin. So that's not it.
                        I'm pretty sure the problem is C4D needs to be told that points have been changed for it to work properly. I just don't know how to write the C++ version of that.

                        BTW: I'm a Coffee user and new to the whole C++ API thing. But I've learned a lot from your posts. So keep posting those questions and code snippets. 🍺

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

                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                          On 07/02/2011 at 12:23, xxxxxxxx wrote:

                          Howdy,

                          Try adding the line:

                          sp->Message(MSG_UPDATE);
                          

                          ...after you change the points. 😉

                          Adios,
                          Cactus Dan

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

                            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                            On 07/02/2011 at 13:10, xxxxxxxx wrote:

                            @ScottA:
                            You forgot to set the points back to the SplineObject. I'm just using Coffe, so i can't give you the C++ code, but it should be similiar to what i said in the second post.

                            sp->SetPoints(gp);
                            

                            Btw: As far as I know, one have to use VariableChanged only when the SplineObject has tags on it like a selectiontag for e.g. which depends on the points of it's Object.

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

                              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                              On 07/02/2011 at 13:40, xxxxxxxx wrote:

                              Thanks Dan. That seems to help.
                              I'm also using Vista64 without Aero enabled. Which causes draw issues in C4D for me.
                              That was also making the spline look like it wasn't there, when it really was there.

                              So this whole VariableChanged stuff for splines is only for things with tags on them then?
                              I just want to make sure I understand how the spline class works.

                              -ScottA

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

                                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                On 07/02/2011 at 13:48, xxxxxxxx wrote:

                                Howdy,

                                In C++, there is no SetPoints() function. Calling the GetPointW() function returns a pointer to the points array, giving you direct access to the points.

                                In the documentation for the MSG_UPDATE:

                                MSG_UPDATE_<_h4_>_

                                Must be sent if the bounding box has to be recalculated. (Otherwise you can use MSG_CHANGE[URL-REMOVED].)

                                ... since the point's positions have been changed, the bounding box of the spline must be recalculated. I'm not exactly sure but I think some other things get updated, too, when that message is received. In any case, when a point object receives that message it seems to update the point positions.

                                By the way, an object's points are stored in a hidden variable tag (Tpoint), so every spline and polygon object has that hidden tag on it. 😉

                                In the C++ documentation, if you go to the C4DAtom class and then to the Message() function of that class, you'll see a list of messages from the MSG_Atom with explanations of their use.

                                Adios,
                                Cactus Dan


                                [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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

                                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                  On 07/02/2011 at 13:59, xxxxxxxx wrote:

                                  Oh, thanks, couldn't imagine it's different in C++, but now i know better. 😉

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

                                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                    On 07/02/2011 at 14:05, xxxxxxxx wrote:

                                    Howdy,

                                    Yeah, coffee is very similar to c++, but from what I remember about coffee, there were more functions you had to call to perform an operation, where in c++ you simply performed the operation.

                                    Adios,
                                    Cactus Dan

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

                                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                      On 07/02/2011 at 16:04, xxxxxxxx wrote:

                                      hey scott would you mind sharing with me the final working code you got.  The4 code above keeps making my c4d crash out.

                                      Thanks,

                                      Shawn

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

                                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                        On 07/02/2011 at 21:11, xxxxxxxx wrote:

                                        Sure. Here's the code again:

                                        SplineObject *sp = SplineObject::Alloc(3, SPLINETYPE_LINEAR); // create a linear spline with 3 verts
                                          if(!sp) return NULL;
                                          doc->InsertObject(sp, NULL, NULL, 0); // Add it to the OM

                                        Vector *gp = sp->GetPointW();// The point array of the spline
                                          gp[0] = Vector(10,0,-100);// Place the first point here
                                          gp[1] = Vector(0,0,0);// Place the first point here
                                          gp[2] = Vector(-10,0,100);// Place the first point here
                                          EventAdd();//Update all the changes
                                          sp->Message(MSG_UPDATE);

                                        I'm a little surprised that there's no code block formatting option for this forum. To make posting code snippets easier to read.

                                        -ScottA

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

                                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                          On 07/02/2011 at 21:30, xxxxxxxx wrote:

                                          why not use [*code] [/*code](without * ) ?

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

                                            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                                            On 08/02/2011 at 01:08, xxxxxxxx wrote:

                                            Originally posted by xxxxxxxx

                                            I'm a little surprised that there's no code block formatting option for this forum. To make posting code snippets easier to read.

                                            There is, please check the BBCodes avaible for the forum:
                                            <[URL-REMOVED]>

                                            cheers,
                                            Matthias


                                            [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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