GetAllTextures() Changed in R12&R13

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 16/07/2012 at 11:45, xxxxxxxx wrote:

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

---------
GetAllTextures() now requires pointing to an array. So now the code examples posted in the archives no longer works for me.
I can't get any textures to return from it using the old code:

    AutoAlloc<AtomArray> myArray;             //Create a new empty atom type array  
  if(myArray)  
   {  
    doc->GetActiveObjects(*myArray,FALSE); //Get any active objects and store them in the array (use GETACTIVEOBJECTFLAGS_0 for R13)  
    LONG cnt = myArray->GetCount();        //Returns the size of the array based on how many objects are selected  
    for(LONG i = 0L; i != cnt; ++i)  
    {  
      String name = static_cast<BaseObject*>(myArray->GetIndex(i))->GetName(); //Get the name of each selected object  
      GePrint(name);  
    }  
   }  
  ////// Great..Everything is working properly so far ///////  
  ////// Now lets check to see what textures are assigned to the selected objects ////////  
   BaseContainer bc = doc->GetAllTextures(myArray);  //Create a container pointing to the array of selected objects   
   BrowseContainer browse(&bc);                      //Create an instance of the BrowseContainer class  
   LONG cid;  
   GeData *data;  
   while(browse.GetNext(&cid, &data))  
   {  
       GePrint("found a texture");                 //<---I get nothing in the console...Even with this!?  
       Filename fn = data->GetFilename();  
       GePrint("Texture: " + fn.GetString());  
   }

Could someone please post a working example of GetAllTextures() that works with R12 and/or R13?

-ScottA

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/07/2012 at 14:22, xxxxxxxx wrote:

I finally figured out how to make it work.
This code gets all the textures in the scene. And prints the names of any selected objects:

    AutoAlloc<AtomArray> myArray;                            //Create a new empty atom type array  
  if(myArray)  
  {  
    BaseContainer bc = doc->GetAllTextures(myArray);       //Fill a new container with all the texures in the document  
    LONG counter = 0;  
    while(bc.GetIndexId(counter) != NOTOK)                 //Get all of the non-empty container items  
    {  
      counter++;  
      Filename fn = bc.GetFilename(counter,NULL);          //Get each container item that is a Filename type  
      GePrint(fn.GetString());  
    }  
    doc->GetActiveObjects(*myArray,FALSE);                 //Get any active objects and store them in the array(use GETACTIVEOBJECTFLAGS_0 for R13++)  
    LONG objcnt = myArray->GetCount();                     //Get the size of the array based on how nay objects are selected  
    for(LONG i = 0L; i<objcnt; ++i)  
    {  
      String name = static_cast<BaseObject*>(myArray->GetIndex(i))->GetName(); //Get the names of the selected objects  
      GePrint(name);  
    }  
  }

-ScottA