Insert under with itertools

On 29/01/2018 at 14:09, xxxxxxxx wrote:

Hi,
python noob here.

I have 2 lists with objects declared by their name as string. I align the matrix of the corresponding objects using itertools:
for J,N in itertools.izip(list1,list2) :

That works very well. But now I also want to insert the objects from list1 also under the objects from list2 in the OM as children. I get now the error "list object has no attribute insertUnder". Ok, is there a workaround how to do that?

Thx

On 30/01/2018 at 02:14, xxxxxxxx wrote:

Hi,

welcome to the Plugin Café forums :slightly_smiling_face:

I'm not so sure about the first part of your description. In Cinema 4D Objects (BaseObject) are derived from (among other classes) GeListNode, which basically represents a node in the Object Manager tree. The functions to insert children are GeListNode.InsertUnder() (note the capital I) or InsertUnderLast().

If this does not solve your issue, please provide us with more code, so we can get a better understanding of your situation.

On 14/02/2018 at 09:12, xxxxxxxx wrote:

Hi,
thanks for the answer. For an artist with very basic coding skills it is not so easy to even know what to look for in the SDK. That is the structre I prefer to use since I have an overview in the code about the 2 objects that go together:

import c4d
from c4d import gui
import itertools

Nulls = ["Null1",   "Null2" ,    "Null3"  ,  "Null4"]
PositNull = ["N_Null1","N_Null2","N_Null3", "N_Null4"]

def main() :
 
  for J,N in itertools.izip(Nulls,PositNull) :
     
      obj = doc.SearchObject(J)
      if obj is None: return False
      matrix = obj.GetMg()        #the global matrix
      globalPos = matrix.off      #get the position from the matrix
     
      obj2 = doc.SearchObject(N)
      if obj2 is None: return False
      matrix2 = obj2.GetMg()        #the global matrix
      globalPos2 = matrix2.off      #get the position from the matrix
     
      m = matrix2
      m.off = globalPos2     #get the position from the Object Matrix
      obj.SetMg(m)           #Sets the global matrix of 1 to 2
     
      c4d.EventAdd()

if __name__=='__main__':
  main()

Now I want to add the feature that the according objects align in OM hierarchy as well.