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

    Making duplicate of objects

    SDK Help
    0
    5
    498
    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 24/09/2003 at 03:07, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   8.200 
      Platform:      
      Language(s) :     C++  ;

      ---------
      Im trying to make something similar to the Array Tool, where is makes copies of the input object.
      How do I go about this?
      Im stuck at the actual, making the duplicate of objects in an ObjectData plugin.

          
          
          
          
          BaseObject *PluginTest::GetVirtualObjects(PluginObject *op, HierarchyHelp *hh)  
          {  
           BaseObject *orig = op->GetDown();
          
          
          
          
           if (!orig) return NULL;
          
          
          
          
            
           BaseObject *main=NULL;  
           main = BaseObject::Alloc(Onull);
          
          
          
          
            
           Vector v(0,0,0);
          
          
          
          
           return main;  
          }
          
          
          
      

      The orig variable represents the input object, but how do I make several orig's and place them into the scene?
       
      Thanks

      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 24/09/2003 at 23:48, xxxxxxxx wrote:

        Use GetAndCheckHierarchyClone() to get one copy, then GetClone() on that one to get more.  Finally insert them under main.

        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 25/09/2003 at 03:26, xxxxxxxx wrote:

          Thanks, that worked great.
          The only problem is the clones keep dissapearing in the viewport (when i rotate the viewport for example). Im guessing I have to redraw the screen, but dont know how to go about it.
          Changing the input objects properties, makes all the clones flicker on and off, and end up with them hidden. Same with chaging properties of my object plugin too.
          This is my function
          BaseObject *TestPlugin::GetVirtualObjects(PluginObject *op, HierarchyHelp *hh)
          {
           
           // Get the first Input object
           BaseObject *orig = op->GetDown();
           if (!orig) return NULL;

          BaseObject *main=NULL;
           main = BaseObject::Alloc(Onull);

          // Clone the input object
           Bool dirty = FALSE;
           BaseObject *clone = op->GetAndCheckHierarchyClone(hh,orig,HCLONE_ASIS,&dirty,0,false);
           if(!clone) return 0;
           // Starting Vector
           Vector v(0,0,0);
           // Number of Clones needed
           BaseContainer *data=op->GetDataInstance();
           LONG CloneCount = 10;
           // The Size of the Object
           Real Size = 500
           Real GapDistance = Size/(CloneCount-1);

          // Add the clone to the null
           clone->InsertUnderLast(main);
           clone->SetPos(v);
           // Add Remaining Clones to null Object
           LONG i;
           for (i=0; i < (CloneCount-1); i++)
           {
           v.z+=GapDistance;
           BaseObject *nclone = (BaseObject* )clone->GetClone(COPY_NO_HIERARCHY,NULL);
           nclone->InsertUnderLast(main);
           nclone->SetPos(v);
           }
           return main;
          }

          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 25/09/2003 at 18:43, xxxxxxxx wrote:

            Hi Geespot,

            I've just written a plugin just like the array plugin, only it creates a grid of clones.
            I can post the code for the plugins I've written as soon as I've cleared up a couple of things (attaching GPL, getting a proper plugin id, etc), which shouldn't take more than a day or so (say, by Monday evening). Let me know if you're interested.
            In the meantime, you should check the value of dirty after you've tried cloning orig:

              
            Bool dirty = FALSE;  
            BaseObject *clone = op->GetAndCheckHierarchyClone(hh, orig, HCLONE_ASIS, &dirty;, 0, false);  
            if (!dirty) return clone; // output cache is clean: use it  
            if (!clone) return 0;  
            

            Cheers.

            .angus.

            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 26/09/2003 at 01:26, xxxxxxxx wrote:

              Thanks angus, your code worked, so I wont need to see your plugin code, thanks for offering.
              I totally forgot about the dirty variable.

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