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
    • Recent
    • Tags
    • Users
    • Login

    how to get data position and pint out?

    Scheduled Pinned Locked Moved PYTHON Development
    14 Posts 0 Posters 1.2k 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

      On 24/03/2015 at 22:21, xxxxxxxx wrote:

      Hi, my name is yefta. I have a problem i cant solved, and i will be grateful if anyone here can give me help.

      I have a roller coaster, and i want to get data position of the moving train and i want to record them continously. the object is the train.
      can u help me?
      I need to analyze that position of train

      thankyou so much

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

        On 25/03/2015 at 07:59, xxxxxxxx wrote:

        Hello,

        I don't know what you want to achieve in the end or what workflow you want to implement. From what you tell I think you could create a Python Tag and add this tag to the object you want to observe. In that python tag's code you could write something like this:

          
        import c4d  
          
        def main() :  
          print op.GetObject().GetMg().off  
        

        In this case "op" is the python tag itself, GetObject() returns the host object and GetMg() returns the object's world space matrix. This Matrix includes a translation part "off". When you now run the scene you will find the current position printed to the console window.

        Best wishes,
        Sebastian

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

          On 26/03/2015 at 01:10, xxxxxxxx wrote:

          thankyou so much s_bach.. thats what i need.
          hmm but can u display the vector in degree?
          in my mind it will shows like this
          (0,0,0)
          (10,30,45)
          (90,180,270)
          (0,180,215)
          etc

          and actually i want to print it to file. maybe to txt or csv. can you help me out?

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

            On 26/03/2015 at 01:57, xxxxxxxx wrote:

            Hello,

            Showing the position in degree doesn't make sense. Do you mean the rotation? You can get the rotation vector from the matrix using MatrixToHPB(). The result is a rotation in radians, so you would have to convert the values to degree yourself with Deg().

            The Cinema 4D Python API does not provide any specific functions to write files. But of course you can use the standard Python libraries to access files.

            best wishes,
            Sebastian

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

              On 27/03/2015 at 00:14, xxxxxxxx wrote:

              i have tried use MatrixToHPB but it doesnt work. and then i tried VectorToHPB and it works. but the third coloumn always "0". How come? this is my code
              import c4d
              #Welcome to the world of Python

              def main() :
                pass  #put in your code here
               
                a = op.GetObject().GetMg().off
                b = c4d.utils.MatrixToHPB(a)
                print a
              Inline image 1

              Inline image 2
              and how to convert values to deg?

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

                On 27/03/2015 at 00:22, xxxxxxxx wrote:

                def main() :
                  pass  #put in your code here
                 
                  a = op.GetObject().GetMg().off
                  b = c4d.utils.VectorToHPB(a)
                  print b

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

                  On 27/03/2015 at 00:28, xxxxxxxx wrote:

                  Vector(3.144, 0.239, 0)
                  Vector(3.144, 0.256, 0)
                  Vector(3.144, 0.273, 0)
                  Vector(3.145, 0.29, 0)
                  Vector(3.145, 0.306, 0)
                  Vector(3.145, 0.322, 0)
                  Vector(3.145, 0.336, 0)
                  Vector(3.146, 0.35, 0)
                  Vector(3.146, 0.361, 0)
                  Vector(3.147, 0.371, 0)
                  Vector(3.147, 0.379, 0)
                  Vector(3.147, 0.385, 0)
                  Vector(3.148, 0.39, 0)
                  Vector(3.148, 0.394, 0)
                  Vector(3.148, 0.396, 0)
                  Vector(3.148, 0.397, 0)
                  Vector(3.148, 0.397, 0)
                  Vector(3.148, 0.395, 0)
                  Vector(3.148, 0.393, 0)
                  Vector(3.148, 0.389, 0)
                  Vector(3.148, 0.385, 0)

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

                    On 27/03/2015 at 01:52, xxxxxxxx wrote:

                    Hello,

                    as the name suggests MatrixToHPB() must be used with a Matrix, not with the translation vector as in your code. And as said before, turning the position into a rotation using VectorToHPB() does not seem to make sense. As you can read in the documentation, VectorToHPB() will always return a rotation with bank set to zero.

                    best wishes,
                    Sebastian

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

                      On 27/03/2015 at 02:00, xxxxxxxx wrote:

                      Hello,

                      the first case:
                      you´ll need to feed the matrix not the offset vector from this matrix

                      a = op.GetObject().GetMg()
                      b = c4d.utils.MatrixToHPB(a)

                      the second case:
                      euler angle always gives you a zero banking back it calculates the direction with a fixed rotation around this direction

                      a = op.GetObject().GetMg().off
                      b = c4d.utils.VectorToHPB(a)

                      for a complex track you might think about flipping conditions or quaternions.

                      rad to degree: c4d.utils.Deg( r )
                      or
                      rad = HPB * math.pi / 180

                      Hope this helps?
                      Best wishes
                      Martin

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

                        On 02/04/2015 at 07:17, xxxxxxxx wrote:

                        Hello Yefta

                        was your question answered?

                        best wishes,
                        Sebastian

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

                          On 05/04/2015 at 23:02, xxxxxxxx wrote:

                          hello Martin.

                          yes, it helps. but i still cant transform to degree. it shows "a float is required".

                          can u help me out?

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

                            On 05/04/2015 at 23:14, xxxxxxxx wrote:

                            hello s_bach

                            i'm sorry, been off for a while. yes it's answered, but not all.

                            if i type  c4d.utils.Deg(b)
                            it shows in console "TypeError : a float is required"

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

                              On 06/04/2015 at 04:21, xxxxxxxx wrote:

                              Hello Yefta,

                              sorry my answer was a little sloppy.
                              This should answer your question ...

                                
                                rad = c4d.Vector(0,1,1)  
                                deg = c4d.Vector(c4d.utils.Deg(rad.x),c4d.utils.Deg(rad.y),c4d.utils.Deg(rad.z))  
                                print deg  
                                  
                                deg2 =  180/math.pi*rad  
                                print deg2  
                              

                              Best wishes
                              Martin

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

                                On 16/04/2015 at 00:35, xxxxxxxx wrote:

                                thanks martin. 😄

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