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

    Problems with cloning...

    Scheduled Pinned Locked Moved SDK Help
    6 Posts 0 Posters 431 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

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

      On 17/09/2008 at 11:46, xxxxxxxx wrote:

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

      ---------
      Hi,

      I have written a generator object, that returns a virtual hierarchy.

      I can also create clones of objects that create clones themselves (e.g. the Array Object) as shown here:
      _<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_1.jpg"_>_

      It is also possible to put my object into another cloning object (again like e.g. the Array Object) :<_<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_3.jpg"\_>\_pg">

      But here comes the first problem: It is not possible for me to create clones of my own object, see he_<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_2.jpg"\_>\__2.jpg">

      That's the first problem. What can I do here? Is there something I have to do? I just create clones of the source object(s) by using obj- >GetClone(0, NULL); and then inserting the cloned object into the virtual hierarchy, which I return in ::GetVirtualHierarchy().

      + + + + + + + + + + + + +

      2nd Problem:
      As you can also see on the sceenshots 1 and 3, my source objects are still visible. I do obj->Touch() on all ob them after creating the clones, but that does only hide the top object. If I have a whole hierarchy which I clone (like the Array Object on screenshot 1) only the Array Object gets hidden, but the Sphere Object stays visible. Do I have to iterate the object's whole hierarchy and touch every object I find, or is there a nicer way?

      Thanks for any help I am really stuck here 😞

      Best regards & greetings,
      Jack

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

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

        On 17/09/2008 at 12:54, xxxxxxxx wrote:

        OK, already got it. Have to use the AliasTrans class, too.

        > \> // Use AliasTrans \> AliasTrans \*at = AliasTrans::Alloc(); \> if (!at || !at->Init(doc)) return FALSE; \> \> cl=static_cast<BaseObject\*>(tp->GetClone(0, at)); \> if (!cl) return FALSE; \> \> // Alias Translate \> at->Translate(TRUE); \> \> // insert as last object under main \> cl->InsertUnderLast(main); \> \> // Free AliasTrans object \> AliasTrans::Free(at); \>

        But since I do this, I have several memory leaks. If I comment the whole AliasTrans stuff away, no leaks appear in the c4d trace window.

        It seems Free(at) is not enough. Anything else to do here?

        Cheers,
        Jack

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

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

          On 18/09/2008 at 00:39, xxxxxxxx wrote:

          cl=static_cast<BaseObject\*>(tp->GetClone(0, at)); \> if (!cl) return FALSE;

          The memory leaks are probably because you forget to free the AliasTrans here.

          cheers,
          Matthias

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

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

            On 21/09/2008 at 02:59, xxxxxxxx wrote:

            Does anybody know something about my 2nd Problem? Do I really have to iterate the whole hierarchy and touch every object?

            > Quote: Originally posted by c4dJack on 17 September 2008
            >
            > * * *
            >
            > User Information:
            >
            > Cinema 4D Version:   10.1
            > Platform:   Windows  ; Mac  ;
            > Language(s) :    C++  ;
            >
            >
            > ---------
            >
            >
            > 2nd Problem:
            > As you can also see on the sceenshots 1 and 3, my source
            > objects are still visible. I do obj->Touch() on all of
            > them after creating the clones, but that does only hide
            > the top object. If I have a whole hierarchy which I
            > clone (like the Array Object on screenshot 1) only the
            > Array Object gets hidden, but the Sphere Object stays
            > visible. Do I have to iterate the object's whole
            > hierarchy and touch every object I find, or is there a
            > nicer way?
            >
            >
            > * * *

            Thanks again in advance...

            Greetings,
            Jack

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

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

              On 21/09/2008 at 04:41, xxxxxxxx wrote:

              Hi Jack,

              use GetAndCheckHierarchyClone() instead. No need for dependence lists etc. then. It handles the hiding and touching too.

              Use it like this.

              > BaseObject\* down = op->GetDown(); if(!down) return BaseObject::Alloc(Onull); \> down = op->GetAndCheckHierarchyClone(hh, down, HCLONE_ASPOLY, &dirty;, NULL, TRUE); \> \> if (!dirty) return down;

              You will get a null-object with all the objects of your hierarchy cloned underneath it. Decide with HCLONE_ASPOLY what you want the hierarchy clones to be (HCLONE_ASIS for example to simply get clones, not converted to polys...see doc for more info).

              Now go on coding. 😉

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

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

                On 21/09/2008 at 05:15, xxxxxxxx wrote:

                Thanks, working fine! 🙂

                Cheers,
                Jack

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