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
    • Recent
    • Tags
    • Users
    • Login

    how to get texture file names path?

    Scheduled Pinned Locked Moved SDK Help
    5 Posts 0 Posters 535 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 21/09/2008 at 23:55, xxxxxxxx wrote:

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

      ---------
      I want to get full path of texture but follow code fn.GetString() can't get full path.
      this is my snippet code:
      void getTextureFileName(string& strOutFileName)
      {
      string g_sBaseDir;
       BaseContainer ctr = GetActiveDocument()->GetAllTextures();
       
       BrowseContainer bc(&ctr);
       
       LONG id;
       GeData *dat;
       while (bc.GetNext(&id, &dat))
       {
        Filename fn = dat->GetFilename();
        
        String strFilePath;
        String strFileName( fn.GetString());
              strFilePath = strFileName;
        
        LONG iLen = strFilePath.GetCStringLen(St8bit)+1;
        char* pName = bNew CHAR[iLen];
        memset(pName,0, sizeof(CHAR)*iLen);
        
        strFilePath.GetCString( pName,iLen, St8bit);
        string strOutName(pName);
          
              bDelete(pName);
        pName = NULL;
      strOutFileName += strOutName ;
      strOutFileName += "|";
      }
      }

      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 22/09/2008 at 00:30, xxxxxxxx wrote:

        Will..not..work.

        //Material* mat;
        BaseChannel* bchan = mat->GetChannel(CHANNEL_COLOR);
        BaseContainer bdata = bchan->GetData();
        Filename fn = bdata.GetFilename(BASECHANNEL_SUGGESTEDFOLDER)+Filename(bdata.GetString(BASECHANNEL_TEXTURE));

        The texture image is stored in two places as you see - path and file specifiers.

        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 22/09/2008 at 01:42, xxxxxxxx wrote:

          //Material* mat;
          BaseChannel* bchan = mat->GetChannel(CHANNEL_COLOR);
          BaseContainer bdata = bchan->GetData();
          Filename fn = bdata.GetFilename(BASECHANNEL_SUGGESTEDFOLDER)+Filename(bdata.GetString(BASECHANNEL_TEXTURE));
           the code Will  get nothing. why?

          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 22/09/2008 at 15:19, xxxxxxxx wrote:

            That is only an example. There is more than CHANNEL_COLOR - like CHANNEL_BUMP, CHANNEL_DISPLACEMENT, CHANNEL_DIFFUSION, etc. etc. etc. And this only can get at the channel texture map not at shaders or deeper in (like fusion layers).

            I'm pretty sure that it does indeed work since I use it in my own code. Here are some links:

            http://www.plugincafe.com/forum/display_topic_threads.asp?ForumID=4&TopicID;=3212&PagePosition;=29

            http://www.plugincafe.com/forum/display_topic_threads.asp?ForumID=4&TopicID;=2775&PagePosition;=61

            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 23/09/2008 at 02:37, xxxxxxxx wrote:

              thanks robert,my problem was resolved, this is my snippet code:
               void getTextureFileName(string& strOutFileName)
              {
               string g_sBaseDir;
               BaseMaterial* mat = GetActiveDocument()->GetFirstMaterial();

              while(mat)
               {
                BaseChannel* pChannel = mat->GetChannel(CHANNEL_COLOR);
                if (pChannel)
                { 
                 Filename path = pChannel->GetData().GetFilename(BASECHANNEL_SUGGESTEDFOLDER);
                 if(!path.Content())     path = GetActiveDocument()->GetDocumentPath();
                 Filename file = pChannel->GetData().GetString(BASECHANNEL_TEXTURE);
                 if ( file.GetString().GetCStringLen(St8bit)< 0 ||  file.GetString().GetCStringLen(St8bit) ==  0)
                 {
                  mat = mat->GetNext();
                  continue;
                 }
                 path = path+file;

              String strTexturePath( path.GetString());

              LONG iPathLen = strTexturePath.GetCStringLen(St8bit)+1;
                 char* pTextureName = bNew CHAR[iPathLen];
                 memset(pTextureName,0, sizeof(CHAR)*iPathLen);

              strTexturePath.GetCString( pTextureName,iPathLen, St8bit);
                 string strOutTexturePath(pTextureName);

              bDelete(pTextureName);
                 pTextureName = NULL;
                 DBG_LOG("strOutTexturePath=%s",strOutTexturePath.c_str());
                 if ( strOutTexturePath.length() > 0 )
                 {

              if (strOutTexturePath.find(':') != string::npos)
                  {

              strOutFileName += strOutTexturePath.c_str();

              }
                  else
                  {

              Filename filedir = ::GeGetStartupPath();

              String strFilePathDir( filedir.GetString());

              LONG iPathLen = strFilePathDir.GetCStringLen(St8bit)+1;

              char* pDirName = bNew CHAR[iPathLen];
                   memset(pDirName,0, sizeof(CHAR)*iPathLen);

              strFilePathDir.GetCString( pDirName,iPathLen, St8bit);
                   string strOutDirName(pDirName);

              bDelete(pDirName);
                   pDirName = NULL;
                   g_sBaseDir = strOutDirName;

              strOutFileName += g_sBaseDir.c_str();
                   strOutFileName += "\";

              int Version = GetC4DVersion();

              if ( Version < 10000)
                   {    
                      strOutFileName += "tex\";
                   }
               
                   
                   strOutFileName += strOutTexturePath.c_str();   
                  }

              strOutFileName += "|";
                  //MessageDialog( strOutFileName.c_str() );

              }
                }
                mat = mat->GetNext();

              }
               if ( strOutFileName.length() > 0)
               {
                strOutFileName = strOutFileName.substr(0, strOutFileName.rfind('|'));

              }
              }

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