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

    Axis Center

    SDK Help
    0
    9
    940
    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 10/07/2014 at 07:22, xxxxxxxx wrote:

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

      ---------
      Hello guys, I'm trying to replicate the behavior of the axis center command of C4D but it's not working.

      I have a clone of the scene because I can't modify de original.

      I tried with:

      pObject->SetBit(BIT_ACTIVE);
      CallCommand(1011982);
      pObject->DelBit(BIT_ACTIVE);
      

      And this

      Matrix64 m;
      m.TransformVector(pObject->GetMp());
      pObject->SetModelingAxis(m);
      

      And none of these worked.

      What is the right way to do it?

      Thank you.

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

        On 14/07/2014 at 08:15, xxxxxxxx wrote:

        I still looking into it.

        Any ideas?

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

          On 15/07/2014 at 12:15, xxxxxxxx wrote:

          Your first code snippet is correct. And should work fine.
          The only ways I can see this code failing are:
          A- The object is a primitive type object. Not a polygon type object
          B- You're not grabbing the object correctly

          You mentioned it's in another document. So I suspect that's where the problem is happening.

          -ScottA

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

            On 15/07/2014 at 12:28, xxxxxxxx wrote:

            Thank you for your answer.

            I don't know why is failing, all the objects are polygons because I convert all objects to polygons and delete the objects that i can't convert.

            You're not grabbing the object correctly

            What do you mean? Do I need to do something else to grab the object?

            The plugin is iterating over the entire scene and doing it to every object that match the parameters, the code is executing but does nothing.

            I think the command is not executing in objects that aren't in the active document, I don't have any other explanation.

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

              On 15/07/2014 at 15:04, xxxxxxxx wrote:

              Are you trying to center the axis of objects in the current scene(document)?
              Or are you trying to center the axis of objects in a different document than the currently active document?
              Maybe both?

              The code you posted should work if you're selecting the objects and documents properly.
              Have you tested that you're actually selecting the objects with something like GePrint(obj->GetName()); or something similar?

              Without seeing your source code. That's the most obvious place I can think of for the code not working.

              -ScottA

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

                On 16/07/2014 at 05:58, xxxxxxxx wrote:

                Thank you, I really apreciate your answers.

                It is too much code to look at... this is the simplified version of the code

                void MyClass::FreezeAllTransforms(BaseObject* pFirstObject)
                	BaseObject* pObject = pFirstObject;
                	while (pObject != nullptr)
                	{
                		const String& objectName = pObject->GetName();
                		pObject->SetBit(BIT_ACTIVE);
                		CallCommand(1011982);
                		pObject->DelBit(BIT_ACTIVE);
                		FreezeAllTransforms(pObject->GetDown());
                		pObject = pObject->GetNext();
                	}
                }
                

                The code is executing right but does not do anything.

                Are you trying to center the axis of objects in the current scene(document)?
                Or are you trying to center the axis of objects in a different document than the currently active document?
                Maybe both?

                I'm trying to center the axis of objects in a clone of the active document, so it is not the active document.

                The code you posted should work if you're selecting the objects and documents properly.

                Ok, maybe I'm not selecting the document properly, what do you mean with select the document. (I will search into the documentation for it)

                Have you tested that you're actually selecting the objects with something like GePrint(obj->GetName()); or something similar?

                Yes, I have tested and is executing right, but have no effect.

                Thank you.

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

                  On 16/07/2014 at 07:11, xxxxxxxx wrote:

                  I think is working now thanks to you.

                  What i did is:

                  	BaseDocument* pClone = (BaseDocument* )(pDoc->GetClone(COPYFLAGS_0, NULL));
                  	//Clone setting
                  	//...
                  	SetActiveDocument(pClone);
                  	//critical code here
                  	//...
                  	SetActiveDocument(pDoc);
                  

                  It is ok? Or I'm doing it wrong?

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

                    On 16/07/2014 at 07:34, xxxxxxxx wrote:

                    Yes, It looks ok to me.

                    We have to be careful to target the right document. Especially with cloned documents and when rendering.
                    Rendering automatically uses a cloned document too.

                    -ScottA

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

                      On 16/07/2014 at 08:32, xxxxxxxx wrote:

                      I will keep it on mind. I'm not rendering the cloned scene, I'm just using the scene to do some checks and export the result into another file.

                      Thank you very much.

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