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

    GetAllTextures() Changed in R12&R13

    Scheduled Pinned Locked Moved SDK Help
    2 Posts 0 Posters 198 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 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

      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 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

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