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

    Matrix stuff

    SDK Help
    0
    7
    740
    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 21/01/2013 at 17:30, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   12 
      Platform:      Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      Hi

      I am trying to learn about how Matrices behave and interact with each other. For a small project I need a simple alignment tool where I can, for example, align one box at the end of another, or center just the X axis, etc.

      My specific question is with something like the following code.

      before:
      op1 AbsPos = 100,100,100
      op2 AbsPos = 200,200,200

      op2->Remove();
      doc->InsertObject(op2, op1, NULL);
      

      After:
      op1 AbsPos = 100,100,100
      op2 AbsPos = 300,300,300

      When I make op2 a child of op1 "by hand" by dragging it in C4D:
      op2 AbsPos = 100,100,100

      What is the transformation to do after InsertObject, taking into account rotation?

      Thanks

      Peter

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

        On 21/01/2013 at 19:12, xxxxxxxx wrote:

        your code does not contain any matrices, these are all vectors. there is also no method

        being provided by the SDK called AbsPos. there is BaseObject.SetAbsPos() which sets
        the BaseObjects position in relation to a parent object (local coordinates). for an
        object with no parent object local and global coordinates are the same.

        if you want to acces an objects global position coordinates you can either use BaseObject.
        GetMg()/ .SetMgg()(the offset vector of the written/red matrix is the global position of that 
        object) or you can directly access the coordinate ids of an object.

        your basic misconception is that you seem to think that absolute and relative coordinates are 
        the same as global and local coordinates, which is not the case. abs/rel coords are tied to the 
        freeze coordinates system in c4d. you might want to read the description on matrices an the 
        c4d coordinate system in the python sdk ( can be 1:1 applied on cpp). without freezing the 
        coords of an object abs and rel coords are always the same (the local coords).

        http://www.thirdpartyplugins.com/python_r14/modules/c4d/Matrix/index.html#c4d.Matrix

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

          On 22/01/2013 at 01:33, xxxxxxxx wrote:

          Originally posted by xxxxxxxx

          your basic misconception is that you seem to think that absolute and relative coordinates are 
          the same as global and local coordinates, which is not the case. abs/rel coords are tied to the 
          freeze coordinates system in c4d. you might want to read the description on matrices an the 
          c4d coordinate system in the python sdk ( can be 1:1 applied on cpp). without freezing the 
          coords of an object abs and rel coords are always the same (the local coords).

          http://www.thirdpartyplugins.com/python_r14/modules/c4d/Matrix/index.html#c4d.Matrix

          This information is also included in the C++ SDK docs in the guide _C++ Transition to CINEMA 4D R12  _(Getting your Code to Work -> Freeze Transformations).

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

            On 23/01/2013 at 07:15, xxxxxxxx wrote:

            The C.O.F.F.E.E. SDK also contains a pretty helpful article called "Using matrices" that explains a lot about that matter. And the Python SDK has some more information in the article "c4d.Matrix".

            Another very good resource is the tutorial you can find in the CINEMA 4D help. Open the help, then go to "Manual > Tutorials > XPresso Tutorials > Math in XPresso". Vectors, how they represent positions, directions and rotations; matrices, it's all explained in detail.

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

              On 23/01/2013 at 14:01, xxxxxxxx wrote:

              Thanks for the replies.

              I realize my 'code' didn't contain any matrices. It was simply meant to illustrate.
              I don't know how many times I have read both the Expresso and C++ version of that article.

              My simple question was:
              when I make an object a child of another object in C4D (not in a plugin) my child object remains in the same position relative to the document (and that's its global position?)

              when I try to do the same thing in C++ I use Remove() and InsertObject() and my object becomes the child but it's global position changes because the child's coordinates are now relative to the parent.

              Is there a function that takes the parent's position into account?

              Thanks

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

                On 23/01/2013 at 14:18, xxxxxxxx wrote:

                it is because you are setting the coordinates in local space.

                for an object with no parent object local and global coordinates are the same.

                read my first posting or the mentioned articles. absolute coords are not world coords.

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

                  On 23/01/2013 at 15:19, xxxxxxxx wrote:

                  Thanks

                  I solved it. Yikes. It's all about global vs. local. Tried to make it more complicated than it is.

                  Peter

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