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

    Inserting as a child without cloning first ?

    Scheduled Pinned Locked Moved SDK Help
    4 Posts 0 Posters 319 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 08/08/2012 at 15:42, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R13 
      Platform:   Windows  ;   
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      Guys is it possible to insert an object already in the scene hierarchy as a child of another object ?

      I tried this and Cinema crashed.
      I think this is not possible using the insertObject() method because there can't be 2 instances of the same unique object in two different positions in the same hierarchy.

      This is my code (I use with a shorcut) where I had to clone the obj first to avoid crashing:

      main(doc,op)
      {
      	var myObj = doc->GetActiveObject(); // Gets the Selected Object
      	if(!myObj) {
      		return;
      	}
      	var myObjParent = myObj->GetUp(); // Gets the Parent
      	if(myObjParent) {
      		if(myObjParent->GetType() == 1007455) { // Is HyperNurbs ?
        
      			/*
      					Snippet to activate/deactivate visibilty on HyperNurbs Object
      			*/
        
      			if (myObjParent#ID_BASEOBJECT_GENERATOR_FLAG == TRUE) { // Active ?
      				myObjParent#ID_BASEOBJECT_GENERATOR_FLAG = FALSE; 
      			}
      			else {
      				myObjParent#ID_BASEOBJECT_GENERATOR_FLAG = TRUE;
      			}
        
      			return;
      		}
      	}
      	
      	// If no parent Hypernurbs Object Found - Create One
        
      	CallCommand(1007455); // Create an HyperNurbs Object
        
      	var myHPN = doc->GetActiveObject(); // And Select that
      	
      	if(!myHPN) {
      		return;
      	}
      	var newObj = myObj->GetClone(0);
      	doc->InsertObject(newObj, myHPN, NULL); // Need an Alternative
      	doc->SetActiveObject(myObj);
      }
      

      Is there any way to access a method that instead of inserting the objects just move that in the hierarchy to avoid cloning ?

      And do you guys know the method to delete an object fron the hierarchy, programmatically, not by selecting it and deleting with CallCommand(100004787); // Delete

      The script is made to improve workflow in SDS modeling, to get a similar behaviour like in Modo.

      Thanks for the attention.

      EDIT: I've found how to delete the object (obj->Remove()).

      But that is not what I want basically because the behaviour I want to implement will make the tool selected or the selected geometry(Polygon,Edges,Points), remain selected.

      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 09/08/2012 at 00:24, xxxxxxxx wrote:

        First you have to remove the object from the document and then insert it as a child of the other object.  Everything is in a list (thus the derivation from BaseList2D) and you must insert things into the list and remove them before deletion or reinsertion.  You don't need a clone unless you want to have two objects.

        myObj->Remove();  
        doc->InsertObject(newObj, myHPN);
        
        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 09/08/2012 at 07:14, xxxxxxxx wrote:

          So I can remove the Obj without unloading it from the memory, I'm simply removing from the hierarchy then placing it back again where I want.

          Yes with this correction now works flawlessly. I switch on the fly without touching the Hierarchy using TAB key, I'm also improving the script to include a switch between CClark with nGons and without it.

          And adding a check to avoid if the Hypernurbs object get selected in the Hierarchy to create a new One.

          SanX.

          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 09/08/2012 at 11:03, xxxxxxxx wrote:

            Exactly.  Removing it from the list does not Free (delete) it, it just removes it from the hierarchy.  That's a good thing to remember.  Before you can free anything in a list (objects, tags, materials, etc.), you must Remove() them first.

            Glad that you have it working! 🙂

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