Inserting as a child without cloning first ?
-
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.
-
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);
-
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.
-
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!