Move an object in hierarchy



  • Hi everyone,

    In the script I'm writing I need to delete an object with some children, without deleting the children. So, I have to "move" the children one step up of the hierarchy, before deleting the parent. I went through the documentation but haven't found any method to do that (to move an object in its hierarchy). Any suggestion?



  • Hi, you have to write an own routine for that. I was writing this one a while ago:

    /**
     * @brief Moves all children of srcObj to tgtObj. Adds Undos.
     * @param srcObj The source object
     * @param tgtObj The target object
     */
    inline void g_MoveChildren(BaseObject* srcObj, BaseObject* tgtObj)
    {
    	if (!srcObj)
    		return;
    
    	auto doc = srcObj->GetDocument();
    	if (!doc)
    		return;
    
    	auto child = srcObj->GetDown();
    
    	while (child)
    	{
    		const auto temp = child->GetNext();
    		doc->AddUndo(UNDOTYPE::CHANGE, child);
    		child->Remove();
    		child->InsertUnderLast(tgtObj);
    		child = temp;
    	}
    }
    

    For further information about hierarchy manipulation, see https://developers.maxon.net/docs/Cinema4DCPPSDK/html/page_manual_gelistnode.html#page_manual_gelistnode_lists_edit



  • Hi Rage,

    you could try CallCommand() with id 1019951 - calling this should delete all selected objects without deleting their children. Might also do what you're after?

    WP.


  • Global Moderator

    Hi,

    both answers already provide valid solutions. Nice.

    @Rage: Please also consider to use the tagging system (see Read Before Posting) and the Question and Answer feature (see Q&A New Functionality). Especially the tags can help, like for example in this case @mp5gosu would probably have provided you with Python code, if the respective tag was set.
    Besides setting tags and changing into a question, I have also moved this thread into the Cinema 4D Development category.

    And then I want to add a few links to Python docs:
    GeListNode
    CallCommand()

    Cheers,
    Andreas