how to get texture file names path?

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 += "|";
}
}

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.

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?

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

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('|'));

}
}